Linux中的时钟和定时测量

Linux中的时钟和定时测量

ID:40849987

大小:659.51 KB

页数:36页

时间:2019-08-08

Linux中的时钟和定时测量_第1页
Linux中的时钟和定时测量_第2页
Linux中的时钟和定时测量_第3页
Linux中的时钟和定时测量_第4页
Linux中的时钟和定时测量_第5页
资源描述:

《Linux中的时钟和定时测量》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux操作系统分析中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@ustc.edu.cn助教:裴建国、冯晓静Autumn2008Linux中的 时钟和定时测量中国科学技术大学计算机系陈香兰(0512-87161312)xlanchen@ustc.edu.cn助教:裴建国、冯晓静Autumn20082021/10/2LinuxOSAnalysis3/36定时测量Linux内核提供两种主要的定时测量获得当前的时间和日期系统调用:time(),ftime()以及gettimeofday()维持定时器settimer(),

2、alarm()定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的2021/10/2LinuxOSAnalysis4/36主要内容定时的硬件设备Linux内核中与时间有关的程序实现CPU分时、更新系统时间、维护软定时器与定时测量相关的系统调用及相关服务例程2021/10/2LinuxOSAnalysis5/36硬时钟80x86体系结构上,内核必须显式的与四种时钟打交道实时时钟Realtimeclock,RTC时间戳计数器Timestampcounter,TSC可编程间隔定时器Programmableintervaltimer,PITSMP系统

3、上的本地APIC定时器用于跟踪当前时间产生周期性的时钟中断,用于计时2021/10/2LinuxOSAnalysis6/36实时时钟RTC基本上所有的PC都包含实时时钟独立于CPU与所有其他芯片依靠一个独立的小电池供电给RTC中的振荡器即使关闭PC电源,还会继续运转与CMOSRAM往往集成在一个芯片内例如:Motorala146818能在IRQ8上发出周期性的中断,频率在2HZ~8192之间可以对其编程实现一个闹钟2021/10/2LinuxOSAnalysis7/36Linux本身只使用RTC获得时间和日期对应的设备文件为/dev/rtc可以通过

4、设备文件对其编程内核通过0x70和0x71两个端口访问RTC系统管理员可以通过执行时钟程序设置时钟2021/10/2LinuxOSAnalysis8/36时间戳计数器TSC在80x86微处理器中,有一个CLK输入引线接收外部振荡器的时钟信号从pentium开始,很多80x86微处理器都引入了一个TSC一个64位的、用作时间戳计数器的寄存器它在每个时钟信号(CLK)到来时+1例如时钟频率400MHz的微处理器,TSC每2.5ns就+1rdtsc指令用于读该寄存器2021/10/2LinuxOSAnalysis9/36与后面介绍的可编程间隔定时器相比,

5、TSC可以获得更精确的时钟为此,Linux在系统初始化的时候必须确定时钟信号CLK的频率(即CPU的实际频率)calibrate_tsc根据在一个相对较长的时间间隔内(约50ms)所发生的TSC计数的个数进行计算那个间隔由可编程间隔定时器给出由于只在系统初始化的时候运行一次,因此本程序可以执行较长时间,而不会引起问题2021/10/2LinuxOSAnalysis10/36可编程间隔定时器PIT经过适当编程后,可以周期性的给出时钟中断通常是8254CMOS芯片使用I/O端口0x40~0x43Linux将PIT编程为:100Hz通过IRQ0发出时钟中

6、断每10ms产生一次时钟中断,即一个tick2021/10/2LinuxOSAnalysis11/36Tick的长短短优点:分辨率高缺点:需要较多的CPU时间处理,会导致用户程序运行变慢适用于非常强大的机器,这种机器能够承担较大的系统开销Tick的设置是一个折中,例如在大多数惠普的Alpha和Intel的IA-64上约1ms产生一个tick(每秒1024个时钟中断)RawhideAlpha工作站采用更高(1200tick/秒)2021/10/2LinuxOSAnalysis12/36在Linux中,下列宏决定时钟中断频率每秒钟时钟中断的个数,即每秒

7、tick的个数8254芯片的内部振荡器频率,每秒多少次对8254分频,获得HZ所需的时钟2021/10/2LinuxOSAnalysis13/36在init_IRQ()中初始化时钟中断频率此后,只要允许处理时钟中断,约每10ms就会产生一个时钟中断1tick约为10ms2021/10/2LinuxOSAnalysis14/36如何计算CPU的时钟频率CLKLinux在初始化的时候,利用可编程间隔定时器获得CPU的频率观察calibrate_tsc(),了解如何计算CPU的频率已知:PIT的频率未知:CLK频率方法:统计在PIT已知的一段时间内(50

8、ms),CLK发生了多少次;然后计算出CLK频率(次数/50ms)2021/10/2LinuxOSAnalysis15/3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。