[操作系统] 时钟

时钟


  • 时钟
    • 时钟硬件
    • 时钟软件
      • 1 维护日时间
      • 2 防止进程超时运行
      • 3 CPU记账
      • 4 处理报警
      • 5 为各部分提供监视定时器
    • 软定时器

时钟又称为定时器,负责维护时间,防止进程垄断CPU。

1. 时钟硬件

时钟由三个部件构成:晶体振荡器、计数器和存储寄存器。晶体振荡器产生精确地周期性信号,该信号通过电路被传送给计数器,当计数器变为0时就产生一个CPU中断。

可编程时钟的优势在于中断频率可以由软件控制,它有不同的操作模式

  1. 完成模式

    在一次完成模式下,当时钟启动时,它把存储寄存器的值复制到计数器中。然后,来自晶体的每一个脉冲使计数器减1,当计数器变为0时,产生一个中断,并停止工作,直到软件再一次显式地启动它。

  2. 方波模式

    在方波模式下,当计数器变为0并且产生中断后,存储寄存器的值自动复制到计数器中,并且整个过程无限期地再次重复下去,这些周期性的中断称为时钟滴答。

2. 时钟软件

时钟硬件所做的全部工作是根据已知的时间间隔产生中断,而涉及时间的其他所有工作都必须由软件——时钟驱动程序完成。它的任务大多情况下为:

  1. 维护日时间。
  2. 防止进程超时运行。
  3. 对CPU使用情况记账。
  4. 处理用户进程提出的alarm系统调用。
  5. 为系统本身各部分提供监视定时器。
  6. 完成概要剖析、监视和统计信息收集。

2.1 维护日时间

即维持实际时间,在每个时钟滴答将计数器加1即可实现。但要注意位溢出,可以通过三种方法解决:

  1. 使用64位计数器:缺点是维护代价较高。
  2. 以秒为单位代替时钟滴答:需要使用辅助计数器记录时钟滴答。
  3. 对时钟滴答计数:相对于系统引导时间而不是固定外部时间。

2.2 防止进程超时运行

每当启动一个进程时,调度程序就将一个计数器初始化为以时钟滴答为单位的该进程时间片的取值。每次时钟中断时,时钟驱动程序将时间片计数器减1。当计数器变为0时,时钟驱动程序调用调度程序激活另一个进程。

2.3 CPU记账

每当一个进程启动时,便启动一个不同于主系统定时器的辅助定时器。当进程终止时,读出这个定时器的值就可以直到该进程运行了多长时间。为了精确记账,当中断发生时,需要将辅助定时器保存起来,并在中断结束后恢复。

2.4 处理报警

进程可以请求操作系统在一定时间间隔之后向它报警,经常被用于网络数据包超时重发中。

2.5 为各部分提供监视定时器

如果时钟驱动程序没有足够的时钟处理每个请求,就必须使用一个物理时钟模拟多个虚拟时钟。解决方法是,维护一张表,将所有未完成的定时器的信号时刻记入表中,还要维护一个变量给出下一个信号的时刻。当日时间更新时,时钟驱动程序进行检查了解最近信号是否已经发生,并搜索下一个要发生的信号时刻。

在时钟中断期间,时钟驱动程序需要:将实际时间增加1,将时间片减1并检查是否为0,对CPU记账,将报警计数器减1.

3. 软定时器

软定时器避免了中断。无论何时当内核因某种原因在运行时,在它返回到用户态之前,都要检查实时时钟以了解软定时器是否到期。如果已经到期,则执行被调度事件而无需切换到内核态,因为系统已经在内核态。在完成工作后,软定时器复位。

软定时器会因为以下原因进入内核的频率而波动:

  1. 系统调用
  2. TLB未命中
  3. 页面故障
  4. I/O中断
  5. CPU变空闲

在一段时间内可能不存在以上行为,没有软定时器闹响,为了在这些时间间隔上设置一个最大值,可以将软定时器设置为每隔一定时间闹响一次。

参考书目:现代操作系统第三版

你可能感兴趣的:(操作系统)