linux时钟浅析

linux时钟浅析

ID:37711168

大小:35.50 KB

页数:5页

时间:2019-05-29

linux时钟浅析_第1页
linux时钟浅析_第2页
linux时钟浅析_第3页
linux时钟浅析_第4页
linux时钟浅析_第5页
资源描述:

《linux时钟浅析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、linux时钟浅析时钟的作用尽管与CPU指令执行没有什么直接关系,时钟对于操作系统来说还是有着很重要的意义:1、记录系统时间。很多应用程序需要知道日期和时间、由日期和时间构成的时间戳也会被打在文件上面、等等;2、统计功能。如top之类的用户程序可以查看一段时间内的系统负载、以及各个进程占用CPU的时间、等等;3、定时功能。很多用户程序会使用到定时器,比如sleep一段时间后做某件事情、比如给select设置一个超时时间、等等;关于时钟硬件为了实现这些功能,计算机硬件需要提供相应的时钟电路。这些电路大致上分两类:1、R

2、TC(实时时钟),记录着当前的日期和时间(记录的是自1970-01-01起经历的秒数),并且自动随时间增长。这种硬件是由电池独立供电的,因为它要保持日期时间的更新,不能因为计算机的断电而停止工作。linux内核只在启动时从RTC获取当前时间,用于设置系统时间。在系统时间被修改时,linux内核会相应地更新RTC。而系统时间的自动增长则不依赖于RTC,依赖的是另一种时钟电路。2、时钟振荡器,可以周期性地发出中断。这种硬件是可编程的,linux内核在启动时可设置它发出中断的周期,一般是1ms。于是每隔1ms,CPU将收到

3、一个时钟中断,这个时间间隔称作一个tick(节拍)。利用这种周期性的中断,linux内核在处理时钟中断的中断处理程序(参见《linux内核中断处理浅析》)中,实现了系统时间的自动增长、各种统计和定时器功能。CPU每ms都要处理一次时钟中断,并且还要在中断处理程序中完成很多功能,那它还有时间干别的事吗?考虑一个主频为200MHz的RISC结构的CPU,假设每个CPU周期能处理一条指令,那么1ms的时间这个CPU能执行约20万条指令。假设时钟中断处理程序能在1万条指令之内完成(一般情况下1万条指令应该足够了),CPU还是

4、有大部分的时间能干其他事的。关于时钟中断在单处理器系统中,每个tick只发生一次时钟中断。在对应的中断处理程序中完成更新系统时间、统计、定时器、等全部功能;而在多处理器系统下,时钟中断实际上是分成两个部分:1、全局时钟中断,系统中每个tick只发生一次。对应的中断处理程序用于更新系统时间和统计系统负载;2、本地时钟中断,系统中每个tick在每个CPU上发生一次。对应的中断处理程序用于统计对应CPU和运行于该CPU上的进程的时间,以及触发对应CPU上的定时器;于是,在多处理器系统下,每个tick,每个CPU要处理一次本

5、地时钟中断;另外,其中一个CPU还要处理一次全局时钟中断。更新系统时间在linux内核中,全局变量jiffies_64用于记录系统启动以来所经历的tick数。每次进入时钟中断处理程序(多处理器系统下对应的是全局时钟中断)都会更新jiffies_64的值,正常情况下,每次总是给jiffies_64加1。而时钟中断存在丢失的可能。内核中的某些临界区是不能被中断的,所以进入临界区前需要屏蔽中断。当中断屏蔽取消的时候,硬件只能告诉内核是否曾经发生了时钟中断、却不知道已经发生过多少次。于是,在极端情况下,中断屏蔽时间可能超过1

6、个tick,从而导致时钟中断丢失。如果计算机上的时钟振荡器有很高的精度,linux内核可以读振荡器中的计数器,通过比较上一次读的值与当前值,以确定中断是否丢失。如果发现中断丢失,则本次中断处理程序会给jiffies_64增加相应的计数。但是如果振荡器硬件不允许(不提供计数器、或者计数器不允许读、或者精度不够),内核也没法知道时钟中断是否丢失了。(不过丢失就丢失吧,也没什么大不了的。)内核中的全局变量xtime用于记录当前时间(自1970-01-01起经历的秒数、本秒中经历的纳秒数)。xtime的初始值就是内核启动时从

7、RTC读出的。在时钟中断处理程序更新jiffies_64的值后,便更新xtime的值。通过比较jiffies_64的当前值与上一次的值(上面说到,差值可能大于1),决定xtime应该更新多少。系统调用gettimeofday(对应库函数time和gettimeofday)就是用来读xtime变量的,从而让用户程序获取系统时间。统计系统负载在时钟中断处理程序(多处理器系统下对应的是全局时钟)完成对上述jiffies_64和xtime的更新之后,接下来就会对系统负载进行统计。所谓系统负载,是指系统中各个CPU的可执行队列

8、中包含的进程数目。值为0表示对应CPU上没有可执行的进程,CPU空闲;值为1表示对应CPU被一个进程独占,CPU占用率为100%;值大于1表示对应CPU被多个进程共享,CPU占用率为100%。现在,内核要在中断处理程序中统计系统负载,意味着内核每隔一个tick要去查看一下在当前时间点上各个CPU的可执行队列中的进程数目。实际上,孤立地看每个ti

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

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

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