时钟管理

  • 定时器和时间管理
    • 节拍率:HZ
    • jiffies
    • 实时时钟
    • 时钟中断处理程序

定时器和时间管理

时间管理在内核中占有非常重要的地位。相对于事件驱动而言,内核中有大量的函数都是基于时间事件驱动的,例如周期性执行的函数,或者延时执行的函数。
周期性产生的事件都是由系统定时器驱动的。系统定时器是一种可编程硬件芯片,它能以固定的频率产生中断(即定时器中断),它所对应的中断处理程序(时钟中断)负责更新系统时间,以及负责执行需要周期性运行的任务。系统定时器和时钟中断处理程序是Linux内核管理机制中的中枢。

时间中断周期执行的工作有:
(1)更新系统运行时间和实际的时间
(2)均衡调度程序中各处理器上的运行队列。
(3)检查当前进程时间片是否用尽,如果用尽,重新调度进程
(4)更新资源消耗和处理器时间的统计值

节拍率:HZ

内核必须在硬件的帮助下才能计算和管理时间,硬件为内核提供了一个系统定时器来计算时间的流逝。系统定时器以某种频率自行触发,该频率可以通过系统编程预定,称作节拍率(例如,1s 300次,300hz)。因为节拍率是可知的,所有内核知道连续两次时钟中断的间隔时间,这个间隔时间叫做节拍,它等于节拍率分之1(1/tick rate)秒。

内核在文件<asm/param.h>文件中定义了节拍率的值。这个值对于系统来说是非常重要的,因为很多内核任务都离不开它,所以选择一个合适的频率至关重要。
提高节拍率,意味着系统时间中断更加频繁,依赖于定时任务的系统调用精度更加准确,进程调度也会更加准确。但是高节拍率也意味着系统的负担增重,因为处理器必须花更多的时间来处理时钟中断处理程序,这样会引起处理器处理其他工作的时间更少,频繁打乱处理器高速缓存以及增加耗电等问题。

jiffies

全局变量jiffies用来记录自系统启动开始所产生节拍次数的总和。系统启动的时候将该值初始化为0(实际上可能复杂点,需要考虑到溢出问题,可以百度查询jiffies回绕),此后,每次时钟中断就将该值增加1。因为1s的中断次数为HZ,系统运行时间以秒为单位,就等于jiffies/HZ s。

回绕问题(如上图)。

实时时钟

体系结构提供了两种设备进行计时:一种是前面说到的系统定时器,另一种是实时时钟。

实时时钟(RTC)是用来持久存放系统时间的设备。即便系统关闭了,它也能靠主板上微型电池提供的电力保持系统的计时。系统在启动时,内核会通过读取RTC来初始化实际时间(实际的日期),该时间存放在xtime变量中。

时钟中断处理程序

处理程序的具体工作依赖于特定的体系结构,但是绝大多数处理程序都会执行以下操作:
(1)周期性设置实时时钟
(2)增加jiffies变量值
(3)统计系统资源消耗统计值(进程消耗的系统时间和用户时间)
(4)执行进程调度相关的sheduler_tick()函数。
(5)计算平均负载等等。

关于时钟还有定时器和延时执行两部分,都是比较容易通过字面理解的概念,具体的接口需查询相关资源。

linux内核之时钟管理相关推荐

  1. Linux内核系统时钟管理 感想总结 (未完待续)

    目前讨论根据的是2.6.x 版本的内核 Linux 内核系统时钟需要了解的泛化的概念 绝对时间: 所谓的绝对时间指的是系统流逝的时间,从你启动系统的那一时刻开始计算,直到你关闭系统的那一刻作为结束,这 ...

  2. Linux内核学习--内存管理模块

    Linux内核学习--内存管理模块 首先,Linux内核主要由五个部分组成,他们分别是:进程调度模块.内存管理模块.文件系统模块.进程间通信模块和网络接口模块. 本部分所讲的内存是内存管理模块,其主要 ...

  3. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  4. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  5. 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

    文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...

  6. linux内核之内存管理.doc,linux内核之内存管理.doc

    Linux内核之内存管理 作者:harvey wang 邮箱:harvey.perfect@ 新浪博客地址:/harveyperfect ,有关于减肥和学习英语相关的博文,欢迎交流 把linux内存管 ...

  7. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  8. fork的黑科技,它到底做了个啥,源码级分析linux内核的内存管理

    最近一直在学习linux内核源码,总结一下 https://github.com/xiaozhang8tuo/linux-kernel-0.11 一份带注释的源码,学习用. fork的黑科技,它到底做 ...

  9. Linux内核:进程管理——补丁管理

    Linux 补丁管理是为在 Linux 计算机上运行的应用程序管理补丁的过程.在 Linux 中管理补丁涉及扫描您的 Linux 端点以检测丢失的补丁.从供应商的站点下载补丁并将它们部署到相应的客户端 ...

最新文章

  1. 【译Py】数据科学面试终极指南(二)
  2. 财务需要学python-财务人要学Python吗?
  3. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp
  4. Netty详解(三):Netty 入门应用
  5. 水平输送水汽通量matlab,分享:水汽通量散度
  6. python基础函数图_Python基础:函数
  7. javascript 正则表达式-零宽断言
  8. 单片机实验:节日彩灯控制器
  9. Java IO流练习题-获取文本上每个字符出现的次数
  10. hdu-5493 Queue(二分+树状数组)
  11. Java Recruitment(1)
  12. python怎么操作_python怎么操作mysql
  13. 黑马程序员——C语言小节------字符串与指针
  14. 灾难恢复! 关于做过快照的AVHD文件合并成VHD .
  15. mysql插入图片_如何向MySQL中插入图片文件
  16. qtp(QuickTest Professional)的下载安装
  17. Java实体类与数据库表映射关系
  18. 如何html设置下载的字体呢?
  19. 空调库存创新高,格力计划挖掘三四五线城市
  20. 初探springboot的荆棘之路

热门文章

  1. oracle mysql 同义词_Oracle数据库创建同义词(synonym)详细讲解
  2. python使用cdsapi出现错误UnicodeDecodeError: 'gbk' codec can't decode byte 0x9a in position 8
  3. 十种常见的web攻击
  4. 万物智联与烟火人间,一场跨越20年的双向奔赴
  5. 做抖音快手如何快速涨粉
  6. 店盈通带你看,拼多多商品标题怎么写?有什么方法?
  7. 绘画大师、音乐达人……AI如何重新定义艺术?
  8. 164页5万字轨道交通BIM方案建议书
  9. postman学习笔记与相关面试题(含部分接口测试知识,可用于Jmeter的运用)
  10. mybatis错误:Parameter 'companyName' not found. Available parameters are [arg3, arg2, arg1, arg0,..]