【问题标题】:How do the clock function works in operating systems?时钟功能在操作系统中是如何工作的?
【发布时间】:2019-04-20 12:13:07
【问题描述】:

我不明白时钟功能在操作系统中是如何工作的。

首先www.cplusplus.com中时钟功能的文档是:

Returns the processor time consumed by the program.

The value returned is expressed in clock ticks[...] 

据我了解,时钟功能必须直接访问 CPU 内的某个寄存器,该寄存器是 CPU 周期的计数器。这怎么可能?我的意思是,任何 32 位的寄存器如果以 CPU 频率递增一个单位,很快就会溢出。操作系统是否以某种方式处理此溢出?

【问题讨论】:

  • 正如 R.. 的回答所指出的,只要有其他时钟可用,就不需要 CPU 周期计数器来实现 clock。但是,CPU 周期跟踪可以通过分别检索 64 位计数器的低 32 位和高 32 位的指令来完成,或者使用每次 32 位回绕时触发的中断来完成。每次中断触发时,操作系统都会为高位增加自己的计数器。

标签: c linux operating-system clock


【解决方案1】:

“时钟滴答”是实现定义的,不是以 cpu 时钟为单位。从历史上看,它们是固定长度、粗粒度的调度时间片。不需要任何特殊的硬件 TSC 来实现clock。只需计算进程计划的时间片(最终由定时器中断或类似的强制执行)就足够了。

【讨论】:

  • 对于调度时间片,您是指例如 SysTick 速率?
  • @Dan:从历史上看,时间片是固定长度的(例如,在 x86 Linux 上为 1/100 秒),而计费只是根据整个时间片来计算。现代 Linux 要复杂得多。在仍然使用 1/100 单位的地方,它只是一些更精确值的舍入版本。 Unix 标准 require CLOCKS_PER_SEC to be 1 million 使得 clock 函数相当无用(因为它在 clock_t 为 32 位的系统上迅速溢出)。
猜你喜欢
  • 2010-10-06
  • 2014-10-09
  • 2010-11-18
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多