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

时间:2016-05-05 14:24:20

标签: linux-kernel operating-system scheduling

任何给定时间的流程状态都包含执行权流程?所以目前说处理器上运行了4个用户空间程序。现在在每个时间片之后,我假设控制必须转移到调度程序,以便可以接下来调度适当的进程。什么启动了这种控制权转移?对我来说,硬件中似乎必须有某种特殊的定时器/寄存器,它可以计算过程所占用的当前时间,因为过程本身没有机制来跟踪它执行的时间......我的直觉是对的吗?

2 个答案:

答案 0 :(得分:1)

首先,这个答案涉及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赫兹?),它在IRQ 0上向PIC发出一个#INT信号,并在确认并且所有CPU被中断并执行了处理程序之后。 该处理程序可能包含调度代码,该代码决定执行 1 的下一个进程。

当然,我们(我们大多数人)现在生活在21 st 世纪,并且没有使用IBM PC或其衍生产品,如XT或AT。 PIC已经改为使用更复杂的英特尔82093AA APIC来处理多个处理器/内核并进行全面改进,但我认为PIT保持不变,可能与英特尔AIP等集成版本相同。

协作调度程序不需要常规中断,因此不需要特殊的硬件支持(除了硬件支持的多任务处理)。该过程会故意产生CPU,如果没有,则会出现问题。为什么很少有操作系统实际使用协作调度程序的原因:它构成了一个很大的安全漏洞。

1 但请注意,8086上的操作系统(主要是DOS)没有实际操作系统 调度。 x86架构本身仅支持多任务处理 硬件随着80386版本(SX,DX等等)的出现而出现。我只想强调IBM 5150是第一个带有定时器芯片的x86系统(当然,也是第一台PC)。

答案 1 :(得分:1)

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

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

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