调度程序的实现是否需要某种硬件支持



进程在任何给定时间的状态都由执行中的进程组成,对吗?因此,目前有4个用户空间程序在处理器上运行。现在,在每个时间片之后,我假设控制权必须传递给调度器,以便下一步可以调度适当的进程。是什么引发了这种控制权的转移?对我来说,硬件中似乎必须有某种特殊的定时器/寄存器来记录进程所花费的当前时间,因为进程本身没有机制来跟踪它执行的时间。。。我的直觉对吗??

首先,这个答案只涉及x86架构。

有不同种类的调度器:抢占式和非抢占式(协作式)。

抢占调度器 抢占进程的执行,即使用TSS(任务状态段)启动上下文切换,然后执行到另一个进程的跳转。进程停止,然后启动另一个进程。

协作调度器不会停止进程。它们依赖于进程,该进程放弃CPU而支持调度器,也称为"屈服",类似于没有内核支持的用户级线程。

抢占可以通过两种方式实现:作为某些I/O绑定操作的结果,或者在CPU运行时
想象一下,你向FPU发送了一些指示。它需要一些时间才能完成。你可以在FPU执行计算时做其他事情,而不是无所事事地坐着!因此,作为I/O操作的结果,调度器切换到另一个进程,可能在FPU完成后立即恢复被抢占的进程
然而,正如许多调度算法所要求的那样,规则抢占只能通过以一定频率发生的一些中断机制来实现,而与进程无关。定时器芯片被认为是合适的,随着1981年发布的IBM 5150(又称IBM PC),x86系统被交付,其中包括Intel 8086、Intel 8042键盘控制器芯片、Intel 8259 PIC(可编程中断控制器)和Intel 8253 PIT(可编程间隔定时器)

与其他一些外围设备一样,i8253连接到i8259。在一秒钟内(18 Hz?),它向IRQ 0上的PIC发出了几次#INT信号,在确认之后,所有CPU都被中断,并执行了一个处理程序。该处理程序可能包含调度代码,该代码决定执行1的下一个进程。

当然,到目前为止,我们(大多数人)生活在21世纪,还没有使用IBM PC或其衍生物,如XT或AT。PIC已更改为更复杂的Intel 82093AA APIC,以处理多个处理器/内核并进行总体改进,但PIT保持不变,我认为,可能是像Intel AIP这样的集成版本。

协作调度器不需要定期中断,因此不需要特殊的硬件支持(除了硬件支持的多任务处理)。该进程有意地产生CPU,如果没有,则说明存在问题。为什么很少有操作系统真正使用协作调度器:这造成了一个巨大的安全漏洞。


1注意,然而,8086上的操作系统(主要是DOS)并没有真正的调度器。x86体系结构仅在随着80386版本之一(SX、DX等)的出现。我只是想强调一下,IBM5150是第一个带有定时器芯片的x86系统(当然,也是第一台PC)。

运行带有抢占式调度器的操作系统(即所有常用的调度器)的系统都是IME,它们都提供了硬件定时器中断,该中断会导致驱动程序运行,并可以更改正在运行的线程集。

这样的定时器中断对于为系统调用、sleep()功能和其他与时间相关的函数提供超时非常有用。当系统过载时,或者在其上运行的线程占用CPU时,它还可以帮助在就绪线程之间共享可用的CPU,因此就绪线程的数量超过了可用于运行它们的内核的数量。

完全有可能在没有任何硬件定时器的情况下实现抢占式调度程序,允许在软件中断(系统调用)时从已经运行的线程中调度运行的线程集,以及在I/O完成时从磁盘、NIC、KB的外围驱动程序中调度所有其他中断,鼠标等。不过我从未见过这样做——计时器功能太有用了:)

最新更新