Linux 递增时钟

Linux 递增时钟,linux,operating-system,freebsd,Linux,Operating System,Freebsd,例如,当一个进程被设置为以10的初始时间片运行时,硬件中的某个人应该知道这个初始时间片并将其递减,当时间片变为0时,应该触发一个中断 在freeBSD内核中,我知道硬时钟和软时钟完成了这个记帐任务。但我的问题是,时钟的递减是否与进程的执行平行?这里我将以PIT为例,因为它是最简单的计时机制(已经存在了很长一段时间) 而且,这个答案相当具体到x86;也是不可知论者。我对FreeBSD和Linux的内部结构了解不够,无法具体回答。其他人可能更能做到这一点 本质上,时间片与进程的执行并行“递减”,因为

例如,当一个进程被设置为以10的初始时间片运行时,硬件中的某个人应该知道这个初始时间片并将其递减,当时间片变为0时,应该触发一个中断


在freeBSD内核中,我知道硬时钟和软时钟完成了这个记帐任务。但我的问题是,时钟的递减是否与进程的执行平行?

这里我将以PIT为例,因为它是最简单的计时机制(已经存在了很长一段时间)

而且,这个答案相当具体到x86;也是不可知论者。我对FreeBSD和Linux的内部结构了解不够,无法具体回答。其他人可能更能做到这一点

本质上,时间片与进程的执行并行“递减”,因为计时器为每个“滴答”创建一个IRQ(注意,诸如HPET的计时器可以执行“一次性”模式,该模式在特定延迟后触发一个IRQ,也可用于调度)。一旦时间片减为零,将通知调度程序并发生任务切换。所有这些都在您的流程“同时”发生:IRQ跳入,运行一些代码,然后让您的流程继续运行,直到时间片用完


应该注意的是,一般来说,您看不到进程运行到其时间片的末尾,因为任务切换可能是系统调用的直接结果(例如,从磁盘读取阻塞,甚至写入终端)在朦胧的过去,这更简单:一个时钟芯片——主板上的一个分立设备——将被配置成以X Hz的频率周期性地触发中断。每次“计时器中断”关闭时,当前程序的执行都将暂停(就像任何其他中断一样),内核的调度程序代码将减少其时间片。当时间片完全归零时,内核会将CPU从程序中取出,并将其交给另一个程序。时钟芯片与CPU分离,显然与程序的执行并行运行,但内核的簿记工作必须中断程序(这是我们谈论的模糊过去,因此只有一个CPU,因此内核代码和用户代码不能同时运行)

现在,时钟不是一个分立的设备,它是CPU的一部分,它可以被编程来做各种聪明的事情。最重要的是,它可以被编程为在N微秒后触发一个中断,其中N可能相当大;这允许内核在没有什么建设性的事情可以做的情况下,让CPU闲置很长时间(用计算机术语来说,可能是一整秒钟),从而节省能源。与此同时,很难再找到一个单核CPU了,内核们做了各种聪明的把戏,把记账工作推到没有更好事情可做的CPU上,时间片的计算变得复杂得多。Linux目前使用的“”甚至没有“时间片”的概念。我不知道FreeBSD有什么,但如果它很简单,我会感到惊讶


因此,对你的问题的简短回答是“大部分是并行的,现在比过去更为如此,但它不再像倒计时那样简单了。”

请阅读一些关于和相关主题的参考资料。我确实读过这些。。但是我不能得到一个清晰的画面…太好了。。。这就是我一直在寻找的答案!很难找到单核CPU?仔细看看市场,那些原子D/N/Z像海水一样无处不在。我知道有人会这么说。再给它一代芯片;-)