- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux时钟浅析
linux时钟浅析
时钟的作用尽管与CPU指令执行没有什么直接关系,时钟对于操作系统来说还是有着很重要的意义: 1、记录系统时间。很多应用程序需要知道日期和时间、由日期和时间构成的时间戳也会被打在文件上面、等等; 2、统计功能。如top之类的用户程序可以查看一段时间内的系统负载、以及各个进程占用CPU的时间、等等; 3、定时功能。很多用户程序会使用到定时器,比如sleep一段时间后做某件事情、比如给select设置一个超时时间、等等; 关于时钟硬件为了实现这些功能,计算机硬件需要提供相应的时钟电路。这些电路大致上分两类: 1、RTC(实时时钟),记录着当前的日期和时间(记录的是自1970-01-01起经历的秒数),并且自动随时间增长。 这种硬件是由电池独立供电的,因为它要保持日期时间的更新,不能因为计算机的断电而停止工作。 linux内核只在启动时从RTC获取当前时间,用于设置系统时间。在系统时间被修改时,linux内核会相应地更新RTC。 而系统时间的自动增长则不依赖于RTC,依赖的是另一种时钟电路。 2、时钟振荡器,可以周期性地发出中断。 这种硬件是可编程的,linux内核在启动时可设置它发出中断的周期,一般是1ms。于是每隔1ms,CPU将收到一个时钟中断,这个时间间隔称作一个tick(节拍)。 利用这种周期性的中断,linux内核在处理时钟中断的中断处理程序(参见《linux内核中断处理浅析》)中,实现了系统时间的自动增长、各种统计和定时器功能。 CPU每ms都要处理一次时钟中断,并且还要在中断处理程序中完成很多功能,那它还有时间干别的事吗?考虑一个主频为200MHz的RISC结构的 CPU,假设每个CPU周期能处理一条指令,那么1ms的时间这个CPU能执行约20万条指令。假设时钟中断处理程序能在1万条指令之内完成(一般情况下 1万条指令应该足够了),CPU还是有大部分的时间能干其他事的。 关于时钟中断在单处理器系统中,每个tick只发生一次时钟中断。在对应的中断处理程序中完成更新系统时间、统计、定时器、等全部功能; 而在多处理器系统下,时钟中断实际上是分成两个部分: 1、全局时钟中断,系统中每个tick只发生一次。对应的中断处理程序用于更新系统时间和统计系统负载; 2、本地时钟中断,系统中每个tick在每个CPU上发生一次。对应的中断处理程序用于统计对应CPU和运行于该CPU上的进程的时间,以及触发对应CPU上的定时器; 于是,在多处理器系统下,每个tick,每个CPU要处理一次本地时钟中断;另外,其中一个CPU还要处理一次全局时钟中断。 更新系统时间在linux内核中,全局变量jiffies_64用于记录系统启动以来所经历的tick数。每次进入时钟中断处理程序(多处理器系统下对应的是全局时钟中断)都会更新jiffies_64的值,正常情况下,每次总是给jiffies_64加1。 而时钟中断存在丢失的可能。内核中的某些临界区是不能被中断的,所以进入临界区前需要屏蔽中断。当中断屏蔽取消的时候,硬件只能告诉内核是否曾经发生了时钟中断、却不知道已经发生过多少次。于是,在极端情况下,中断屏蔽时间可能超过1个tick,从而导致时钟中断丢失。 如果计算机上的时钟振荡器有很高的精度,linux内核可以读振荡器中的计数器,通过比较上一次读的值与当前值,以确定中断是否丢失。如果发现中断丢失, 则本次中断处理程序会给jiffies_64增加相应的计数。但是如果振荡器硬件不允许(不提供计数器、或者计数器不允许读、或者精度不够),内核也没法 知道时钟中断是否丢失了。(不过丢失就丢失吧,也没什么大不了的。) 内核中的全局变量xtime用于记录当前时间(自1970-01-01起经历的秒数、本秒中经历的纳秒数)。xtime的初始值就是内核启动时从RTC读出的。 在时钟中断处理程序更新jiffies_64的值后,便更新xtime的值。通过比较jiffies_64的当前值与上一次的值(上面说到,差值可能大于1),决定xtime应该更新多少。 系统调用gettimeofday(对应库函数time和gettimeofday)就是用来读xtime变量的,从而让用户程序获取系统时间。 统计系统负载在时钟中断处理程序(多处理器系统下对应的是全局时钟)完成对上述jiffies_64和xtime的更新之后,接下来就会对系统负载进行统计。 所谓系统负载,是指系统中各个CPU的可执行队列中包含的进程数目。值为0表示对应CPU上没有可执行的进程,CPU空闲;值为1表示对应CPU被一个进程独占,CPU占用率为100%;值大于1表示对应CPU被多个进程共享,CPU占用率为100%。 现在,内核要在
您可能关注的文档
最近下载
- 第四届全国工业设计职业技能大赛(无损检测员赛项)选拔赛考试题库(含答案).docx VIP
- 结缔组织病相关的间质性肺疾病诊断和治疗.pptx VIP
- 部编语文六年级上册第八单元整体教学设计教案.docx VIP
- 2024届高考作文素材- 敦煌.docx VIP
- 学年山东省济南市天桥区数学五年级上册第一学期期末考试真题(人教版,含答案).docx VIP
- 05G511 梯形钢屋架图集标准.docx
- ARM Cortex-M 系列:ARM Cortex-M7 系列_(4).Cortex-M7的指令集.docx
- 全驱动灵巧手的电气系统设计及控制方法研究.pdf
- 眼肿瘤 ppt课件(必威体育精装版文档).ppt VIP
- 天然气企业LNG储配站交接班记录式样.pdf VIP
文档评论(0)