相对于事件驱动(事件驱动其实也是一种事件驱动,但发生频率非常高,对内和至关重要)而言,内核中有大量的函数都是基于事件驱动的。其中有些函书是周期性执行。
- 周期性产生的事件—–由系统定时器驱动。系统定时器是一种可编程硬件控制芯片,它能以固定频率产生中断。就是所谓的定时器中断。它所对应的中断处理程序负责更新系统时间,也负责执行需要周期运行的任务。
- 系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢
- 动态定时器—-一种用来推迟执行程序的工具。比如说,软驱马达在一定时间内都为活动,那么软驱驱动程序会使用动态定时器关闭软驱马达。动态定时器可由内核动态创建和撤销。
- 内核中的时间概念
- 内核必须在硬件的帮助下才能计算和管理时间。系统定时器用于计算流逝的时间。
- 系统定时器以某种频率自行触发(击中–hitting或射中—popping)时钟中断,频率可通过编程预设,称为节拍率(tick rate)。
- 内核通过预编的节拍率得知连续两次时钟中断的间隔时间,间隔时间称为节拍(tick),为节拍率分之一秒。来更新墙上时间和系统运行时间
- 墙上时间—实际时间,对用户空间的应用程序最重要。通过控制时钟中断维护。提供API for 用户空间。
- 系统运行时间—-自系统启动开始所经历的时间,对用户空间和内核都很有用。
- 节拍率:HZ
- 通过静态预处理定义的,也就是HZ(赫兹)。
- 无节拍的OS
- jiffies
- 全局变量jiffies用来记录自系统启动以来产生的节拍总数。一秒内时钟中断产生的次数等于HZ,jiffies增加的值就是HZ。
- 系统运行时间以秒为单位,就等于jiffies/HZ
- jiffies的回绕—-(warp around)提供了四个宏.
- 用户空间和HZ—-改变内核HZ的值,会给用户空间的某些程序造成异常结果。因为内核是以节拍数/秒的形式给用户空间的,如果更改HZ的定义值,用户并不知道新的HZ值,就会出现错误。因此内核必须导出所有更改的jiffies值。因而内核定义了USER_HZ来代表用户空间看到的HZ值。
- 硬时钟和定时器
- 体系结构提供了两种设备进行计时:系统定时器和实时时钟。
- 实时时钟(RTC)—是用来持久存放系统时间的设备,即使系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。
- 当系统启动时,内核通过读取RTC来初始化墙上时间,该时间存放在xtime变量中。内核一般不会在系统启动后再读取xtime变量,但是有时会周期性的将当前时间值存回RTC中。RTC最主要的作用仍是在启动时初始化xtime变量。
- 系统定时器:内核定时机制中最重要的角色。—-提供一种周期性触发中断机制。
- x86中主要采用可编程中断时钟(PIT)。
- 其他的时钟资源包括:APIC(高级可中断终端控制器)和TSC(时间戳计数)
- 时钟中断处理程序
linux内核设计与实现---定时器和时间管理(11)
最新推荐文章于 2024-05-27 02:59:17 发布