什么是 CPU 刻度?

什么是 CPU 刻度?

问题:

  • CPU 刻度是如何计算的以及它代表什么?
  • 单个是否tick等同于10 miliseconds因此如果某个线程报告不需要(5 * 10 ticks = 500 ticks)这是否意味着 CPU 可能太忙而无法安排上述线程工作

答案1

A打钩是用于测量内部系统时间的任意单位。通常有一个用于计时的操作系统内部计数器;操作系统各种功能使用的当前时间和日期均来自该计数器。

一个刻度代表多少毫秒取决于操作系统,甚至可能因安装而异。使用操作系统的机制将刻度转换为秒。

至于线程报告未被调用的原因:这取决于线程是否在某处阻塞(等待、I/O 等)。如果它没有阻塞,那么是的,操作系统的调度程序将决定何时运行,如果系统繁忙,这可能需要很长时间。

编辑:

请注意,也许不幸的是,一些作者还使用打钩作为的同义词处理器时钟周期(例如本文)我相信这种用法不太普遍,但最好还是先弄清楚人们在谈论什么。

答案2

编辑:取自PC 硬件概述

“处理器时钟通过定期生成时间参考信号(称为时钟周期或滴答时钟频率以千兆赫 (GHz) 为单位,每秒有数十亿个滴答。时钟速度决定了指令的执行速度。有些指令需要一个滴答,有些则需要多个滴答,有些处理器在一个滴答内执行多个指令。


滴答之间的时间由你的时钟速度决定,根据正在执行的 OP,需要一到多个滴答。例如,286 级 CPU 需要20 个刻度可繁殖两个数字。

如果您需要高性能计时器,那么我认为您不能依赖所有系统中恒定的滴答声。

CPU 调度程序可能会延迟线程,尤其是当有另一个优先级更高的线程时。所以是的,CPU 可能太忙了。

答案3

除了 sleske 的答案之外,我还编写了一个 C 程序来打印“每秒操作系统刻数” ft

// C headers
#include <stdio.h>

// Posix headers
#include <unistd.h>


int main(int argc, char * argv[]){

    long ft; // OS ticks per second

    t = sysconf(_SC_CLK_TCK);
    printf("ft = %ld\n\n", ft);

    return 0;
}

在我的情况下,我使用的是 OS Linux Debian 系统,当我编译并运行此 C 程序时,它将始终打印ft = 100。请注意,这里没有写单位,而是“每秒滴答数”。因此,这是一个频率!我们可以用单位来表示它:

ft = 100 1/s

t如果我们想从频率中得到周期,ft这个方程就是缺失的环节。

t = 1/ftt = 1/(100 1/s)t = 1/100 s

让我们将其转换为˙ms˙:

t = 1/100 s = (1 * 10^(-3)) s / (100 * 10^(-3)) = 1 * m s / (100 * 10^(-3)) = 1 * m s * 10^3 * 10^(-2) = 10^4 ms = 10 ms

因此每次10 ms在 Linux Debian 操作系统上都会发生这种情况。

相关内容