linux内核设计与实现---定时器和时间管理(11)

  • 相对于事件驱动(事件驱动其实也是一种事件驱动,但发生频率非常高,对内和至关重要)而言,内核中有大量的函数都是基于事件驱动的。其中有些函书是周期性执行。

    • 周期性产生的事件—–由系统定时器驱动。系统定时器是一种可编程硬件控制芯片,它能以固定频率产生中断。就是所谓的定时器中断。它所对应的中断处理程序负责更新系统时间,也负责执行需要周期运行的任务。
    • 系统定时器和时钟中断处理程序是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(时间戳计数)
    • 时钟中断处理程序

猜你喜欢

转载自blog.csdn.net/u012418573/article/details/77370510