NTP 和 NTPD 纳米内核

NTP 和 NTPD 纳米内核

我有几个关于 NTP Nanokernel 的问题,如下所述:http://www.eecis.udel.edu/~mills/database/brief/nano/nano.pdf

最大的问题是这个 Nanokernel 如何设法提供低于系统时钟周期的精度(例如 ns 精度)?

我有几个次要问题:

  1. 这个修改是否以及何时被引入到主线 Linux 内核中?
  2. 其次,Nanokernel 似乎使用了 CPU 时钟周期(无论设置为什么 HZ)和时钟周期计数器的聚合组合。

“进程周期计数器(PCC)用于在滴答中断之间插入微秒或纳秒”

它如何使用周期计数器,因为据我所知它不提供中断,那么纳米内核是否连续读取包含当前计数器的处理器注册表值?

  1. 最后,NTPD 是否修改了 CPU 时钟频率,或者它只是维护一个应用计算时钟调整的软件时钟?

答案1

注意:虽然 NTP 有一个超微内核的想法,可以用来修补不使用 NTP 的操作系统,但在 Linux 中尤其不是这种情况。正如您在问题 1 中提到的,NTP 代码位于内核本身中

0:这个纳米内核如何设法提供低于系统时钟周期的精度(例如 ns 精度)?

大于系统时钟滴答精度的精度是通过依赖其他计算机或设备的聚合精度来实现的。系统时钟滴答给出了该计算机的滴答更新频率。然而,精确度的位数是在所使用的特定软件中定义的,例如通常依赖于 POSIX 标准的操作系统。正如您提到的,某些时间结构的 POSIX 标准可以达到纳秒精度。

为了了解如何获得比系统时钟精度更高的精度,假设我在我的计算机上连接了 GPS 设备或某种奇特的原子钟。每当有人问我现在几点了,我就会查阅时钟并给出答案。

如果 ntp 像 Linux 一样位于内核中,则可以在以下位置使用 GPS 设备时间而不是系统时钟时间获取当日时间()来电。

至于计算机的时钟,当然,我将通过 GPS 或原子钟获得的时间与计算机的时间进行比较,当它的时间超过一个刻度时,我安排使用问题 3 的答案中描述的 adjtime() 来调整它。

  1. 这个修改是否以及何时被引入到主线 Linux 内核中?

NTP Nanokernel 的想法是在 ntp 4.0 版本中引入的,该版本至少可以追溯到 1998 年。我认为它至少从 2.2.36 开始就以某种形式出现在 Linux 内核中。linux github 日志据报道,2006 年 10 月 1 日,ntp 代码被隔离到ntp.c内核中自己的文件中。但当然它以前就在那里。

总而言之,这一切都不是什么新鲜事。

  1. 它如何使用周期计数器,因为据我所知它不提供中断,那么纳米内核是否连续读取包含当前计数器的处理器注册表值?

它像任何其他程序读取程序变量一样使用它。当使用它的代码运行并且需要该值时,比如说因为它已经获取了新信息,它会读取该变量并更新它。如果有人需要时间,它也会在计算中使用它。因此,除非代码是以一种非常愚蠢的方式编写的(我很确定它不是),否则它不会“持续读取处理器注册表值”,除非是必要的。

  1. 最后,NTPD 是否修改了 CPU 时钟频率,或者它只是维护一个应用计算时钟调整的软件时钟?

它使用系统调用调整时间() 这甚至可以追溯到 1998 年之前。 adjtime 的作用是定期安排时钟计数器错过增量以减慢速度,或增量超过 1 以加速。

相关内容