中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009

Slides:



Advertisements
Similar presentations
完美殺人筆記簿 【爸!我受夠了!】 第七組組員: 林正敏 陳筱涵 李蓓宇 許純宜 羅玉芬 謝文軒.
Advertisements

第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
九年级物理一轮复习 第一章 声现象 知识要点. 1. 声音的产生和传播  ( 1 )声音的产生:声音是由于物体的振动产生的。  凡是发声的物体都在振动。振动停止,发声也停止。  ( 2 )声源:正在发声的物体叫声源。固体、液体、气体 都可以作为声源,有声音一定有声源。  ( 3 )声音的传播:声音的传播必须有介质,声音可以在.
藥物濫用 華德學校上午校 黃秀雯.
党的十八届四中全会 依法治国精神解读. 党的十八届四中全会 依法治国精神解读 一、十八届四中全会概况 中国共产党第十八届中央委员会第四次全体会议,于2014年10月20日至23日在北京举行。 全会审议通过了《中共中央关于全面推进依法治国若干重大问题的决定》。
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
证券市场法律制度与监督管理 作者:张学亮.
示范流程培训课件.
我怀念的乡村记忆 陈秀华 社会工作0841.
沟通技巧 主讲:涂育俊.
电话联系.
迎宾员礼仪 包头机电工业职业学校管理系 白琳 1.
第8章 机床操作 主讲:臧红彬 博士.
组织与点评 模拟招聘会.
Chapter 6 時序.
财 务 会 计 第四篇:供应链会计实务 制作人:谌君、熊瑜.
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Jul 2014 HEAT部署Hadoop集群
走进编程 程序的顺序结构(二).
微机原理与接口技术 第9章 计时/计数接口.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
按键驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
Online job scheduling in Distributed Machine Learning Clusters
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
CPU结构和功能.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
第五章 中断与异常 中断的基本知识 中断描述符表的初始化 中断处理 中断的下半部处理机制 中断的应用-时钟中断.
Windows 7 的系统设置.
2015长沙事业单位 政策解读 中公教育:邓颖莉 主讲:XX.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
K60入门课程 02 首都师范大学物理系 王甜.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
分裂对象模型 C++ otcl.
微机原理与接口技术 西安邮电大学计算机学院 杨锐.
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
HSC高速输出例程 HORNER APG.
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
临界区问题的硬件指令解决方案 (Synchronization Hardware)
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
2.4 让声音为人类服务.
信号发生电路 -非正弦波发生电路.
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
反应显微谱仪的飞行时间测量 暨数据获取系统的研究
DSP技术与应用 电子与信息技术系.
一个实时嵌入式操作系统移植问题研究 报告人:荣峰华.
Presentation transcript:

中国科学技术大学计算机系 陈香兰(0551-3606864) xlanchen@ustc.edu.cn Spring 2009 Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551-3606864) xlanchen@ustc.edu.cn Spring 2009

Linux中的 时钟和定时测量

定时测量 Linux内核提供两种主要的定时测量 定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的 获得当前的时间和日期 维持定时器 系统调用:time(), ftime()以及gettimeofday() 维持定时器 settimer(), alarm() 定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的 2019/5/3 Linux内核源代码导读

硬时钟 80x86体系结构上,内核必须显式的与四种时钟打交道 实时时钟Real time clock,RTC 时间戳计数器Time stamp counter,TSC 可编程间隔定时器Programmable interval timer, PIT SMP系统上的本地APIC定时器 用于跟踪 当前时间 产生周期性的时钟中断, 用于计时 2019/5/3 Linux内核源代码导读

实时时钟RTC 基本上所有的PC都包含实时时钟 与CMOS RAM往往集成在一个芯片内 独立于CPU与所有其他芯片 依靠一个独立的小电池供电给RTC中的振荡器 即使关闭PC电源,还会继续运转 与CMOS RAM往往集成在一个芯片内 例如:Motorala 146818 能在IRQ8上发出周期性的中断,频率在2HZ~8192之间 可以对其编程实现一个闹钟 2019/5/3 Linux内核源代码导读

Linux本身只使用RTC获得时间和日期 对应的设备文件为/dev/rtc 内核通过0x70和0x71两个端口访问RTC 阅读mach_get_cmos_time 对应的设备文件为/dev/rtc 可以通过设备文件对其编程 内核通过0x70和0x71两个端口访问RTC 系统管理员可以通过执行时钟程序设置时钟 native_get_wallclock get_wallclock read_persistent_clock timekeeping_init、 timekeeping_resume、 timekeeping_suspend 2019/5/3 Linux内核源代码导读

时间戳计数器TSC 在80x86微处理器中,有一个CLK输入引线 从pentium开始,很多80x86微处理器都引入了一个TSC 接收外部振荡器的时钟信号 从pentium开始,很多80x86微处理器都引入了一个TSC 一个64位的、用作时间戳计数器的寄存器 它在每个时钟信号(CLK)到来时+1 例如时钟频率400MHz的微处理器,TSC每2.5ns就+1 rdtsc指令用于读该寄存器 2019/5/3 Linux内核源代码导读

在Linux2.6.26中,rdtscll()和rdtscl()用来读取TSC的值。 native_read_tsc EAX_EDX_RET、EAX_EDX_VAL针对是64位还是32位进行不同的处理,前者将rdtsc读到的值存放到val(64位的值)或者low和high(2个32位的值)中, 后者将val返回或者将low和high拼装成64位返回。 2019/5/3 Linux内核源代码导读

与后面介绍的可编程间隔定时器PIT相比,TSC可以获得更精确的时钟 为此,Linux在系统初始化的时候必须确定时钟信号CLK的频率(即CPU的实际频率) native_calculate_cpu_khz 根据在一个相对较长的时间间隔内所发生的TSC计数的个数进行计算 此间隔由可编程间隔定时器PIT给出,CALIBRATE_LATCH 由于只在系统初始化的时候运行,因此本程序可以执行较长时间,而不会引起问题 2019/5/3 Linux内核源代码导读

可编程间隔定时器PIT 经过适当编程后,可以周期性的给出时钟中断 通常是8254 CMOS芯片 Linux将PIT编程为: 使用I/O端口0x40~0x43 Linux将PIT编程为: 100Hz 通过IRQ0发出时钟中断 每10ms产生一次时钟中断,即一个tick 2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

Linux的计时体系结构 更新自系统启动以来所经过的时间 更新时间和日期 确定当前进程的执行时间,考虑是否要抢占 更新资源使用统计计数 检查到期的软定时器 2019/5/3 Linux内核源代码导读

计时体系结构中的关键数据结构和变量 Jiffies变量 时钟源 Xtime变量 2019/5/3 Linux内核源代码导读

Jiffies变量 记录系统自启动以来系统产生的tick数 每次时钟中断+1 关于jiffies_64 2019/5/3 Linux内核源代码导读

时钟源 时钟源抽象 参见数据结构clocksource 缺省时钟源 2019/5/3 Linux内核源代码导读

clocksource_register clocksource_list 按rating排序 注册时钟源: clocksource_register clocksource_list 按rating排序 2019/5/3 Linux内核源代码导读

例如以tsc作为时钟源 2019/5/3 Linux内核源代码导读

又如pit作为时钟源 init_pit_clocksource将会注册此时钟源 2019/5/3 Linux内核源代码导读

Xtime变量 存放当前时间和日期 2019/5/3 Linux内核源代码导读

时间纪元 1970年1月1日(UTC)午夜 2019/5/3 Linux内核源代码导读

Xtime的更新 基本上每个tick更新一次 参见:update_wall_time 根据时钟源更新xtime的秒数和纳秒数 时钟源 2019/5/3 Linux内核源代码导读

X86中的时钟中断源及其初始化 start_kernel tick_init 滴答相关 初始化 init_timers 定时机制 相关 hrtimers_init 高精度定时器 相关 初始化 timekeeping_init Xtime相关 初始化 time_init sched_clock_init 调度相关 hpet_time_init setup_pit_timer 注册pit_clockevent为 Clockevent设备 并设置global_clock_event 2019/5/3 Linux内核源代码导读

需要寻找event_handler什么时候赋值的 =&pit_clockevent 需要寻找event_handler什么时候赋值的 2019/5/3 Linux内核源代码导读

tick_init调用clockevents_register_notifier注册tick_notifier到 clockevents_chain上 notifier_call_chain将会 遍历clockevents_chain tick_check_new_device tick_setup_device tick_setup_periodic __raw_notifier_call_chain tick_set_periodic_handler raw_notifier_call_chain 设置event_handler = tick_handle_periodic clockevents_do_notify tick_periodic clockevents_register_device do_timer update_process_times 2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

软定时器和延迟函数 软定时器 动态定时器(内核) 间隔定时器(可以用户) 延迟函数 2019/5/3 Linux内核源代码导读

动态定时器 动态定时器被动态的创建和撤销,当前活动的动态定时器个数没有限制 2019/5/3 Linux内核源代码导读

创建并激活一个动态定时器 创建一个新的timer_list对象 调用init_timer初始化,并设置定时器要处理的函数和参数 设置定时时间 使用add_timer加入到合适的链表中 通常定时器只能执行一次,如果要周期性的执行,必须再次将其加入链表 2019/5/3 Linux内核源代码导读

动态定时器的维护 2019/5/3 Linux内核源代码导读

数据结构 2019/5/3 Linux内核源代码导读

处理 2019/5/3 Linux内核源代码导读

2019/5/3 Linux内核源代码导读

动态定时器应用之delayed work 2019/5/3 Linux内核源代码导读

动态定时器应用之schedule_timeout 2019/5/3 Linux内核源代码导读

延迟函数 参见delay.S 2019/5/3 Linux内核源代码导读

缺省为delay_loop 使用tsc时为delay_tsc 2019/5/3 Linux内核源代码导读

与定时测量相关的系统调用 time() ftime() gettimeofday() 返回从1970年1月1日凌晨0点开始的秒数 返回从1970年1月1日凌晨0点开始的秒数以及最后一秒的毫秒数 数据结构为timeb gettimeofday() 对应于sys_gettimeofday() 2019/5/3 Linux内核源代码导读

settimer() alarm() 间隔定时器 引起SIGALARM信号 频率:周期性的触发定时器(若为0,只触发一次) 2019/5/3 Linux内核源代码导读

与时钟相关的命令 date:显示或者更改系统时钟 使用time获得时钟 使用ctime改变时钟格式 2019/5/3 Linux内核源代码导读

Thanks! The end.