linux内核之时钟管理
时钟管理
- 定时器和时间管理
- 节拍率: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内核之时钟管理相关推荐
- Linux内核系统时钟管理 感想总结 (未完待续)
目前讨论根据的是2.6.x 版本的内核 Linux 内核系统时钟需要了解的泛化的概念 绝对时间: 所谓的绝对时间指的是系统流逝的时间,从你启动系统的那一时刻开始计算,直到你关闭系统的那一刻作为结束,这 ...
- Linux内核学习--内存管理模块
Linux内核学习--内存管理模块 首先,Linux内核主要由五个部分组成,他们分别是:进程调度模块.内存管理模块.文件系统模块.进程间通信模块和网络接口模块. 本部分所讲的内存是内存管理模块,其主要 ...
- 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...
- 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )
文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...
- 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )
文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...
- linux内核之内存管理.doc,linux内核之内存管理.doc
Linux内核之内存管理 作者:harvey wang 邮箱:harvey.perfect@ 新浪博客地址:/harveyperfect ,有关于减肥和学习英语相关的博文,欢迎交流 把linux内存管 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- fork的黑科技,它到底做了个啥,源码级分析linux内核的内存管理
最近一直在学习linux内核源码,总结一下 https://github.com/xiaozhang8tuo/linux-kernel-0.11 一份带注释的源码,学习用. fork的黑科技,它到底做 ...
- Linux内核:进程管理——补丁管理
Linux 补丁管理是为在 Linux 计算机上运行的应用程序管理补丁的过程.在 Linux 中管理补丁涉及扫描您的 Linux 端点以检测丢失的补丁.从供应商的站点下载补丁并将它们部署到相应的客户端 ...
最新文章
- 【译Py】数据科学面试终极指南(二)
- 财务需要学python-财务人要学Python吗?
- bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp
- Netty详解(三):Netty 入门应用
- 水平输送水汽通量matlab,分享:水汽通量散度
- python基础函数图_Python基础:函数
- javascript 正则表达式-零宽断言
- 单片机实验:节日彩灯控制器
- Java IO流练习题-获取文本上每个字符出现的次数
- hdu-5493 Queue(二分+树状数组)
- Java Recruitment(1)
- python怎么操作_python怎么操作mysql
- 黑马程序员——C语言小节------字符串与指针
- 灾难恢复! 关于做过快照的AVHD文件合并成VHD .
- mysql插入图片_如何向MySQL中插入图片文件
- qtp(QuickTest Professional)的下载安装
- Java实体类与数据库表映射关系
- 如何html设置下载的字体呢?
- 空调库存创新高,格力计划挖掘三四五线城市
- 初探springboot的荆棘之路
热门文章
- oracle mysql 同义词_Oracle数据库创建同义词(synonym)详细讲解
- python使用cdsapi出现错误UnicodeDecodeError: 'gbk' codec can't decode byte 0x9a in position 8
- 十种常见的web攻击
- 万物智联与烟火人间,一场跨越20年的双向奔赴
- 做抖音快手如何快速涨粉
- 店盈通带你看,拼多多商品标题怎么写?有什么方法?
- 绘画大师、音乐达人……AI如何重新定义艺术?
- 164页5万字轨道交通BIM方案建议书
- postman学习笔记与相关面试题(含部分接口测试知识,可用于Jmeter的运用)
- mybatis错误:Parameter 'companyName' not found. Available parameters are [arg3, arg2, arg1, arg0,..]