考虑一个非常旧的单核CPU,它不支持硬件中断,假设我想写一个多任务操作系统。使用硬件计时器,可以轮询IRQ线路,以确定计时器是否已过,如果已过,则切换线程/进程。
然而,为了能够轮询,内核必须得到CPU的执行关注。对于支持硬件中断的CPU,ISR在中断时被调用,(如果我错了,请纠正我)如果中断是由上下文切换定时器引起的,则相应的ISR调用处理上下文切换的内核代码。
如果CPU不支持硬件中断(同样,如果我错了,请纠正我),那么内核必须反复检查中断,并在内核空间中调用适当的ISR。
但是,如果用户线程当前正在这个假设的处理器上执行,线程必须手动将执行交给内核,以便能够通过适当的IRQ行根据计时器检查上下文切换是否到期。这可以通过调用适当的内核函数来实现。
有没有一种方法可以在只支持软件中断的单核处理器上实现非协作多线程我的想法是正确的,还是遗漏了什么?
好吧,内核在获得CPU控制权之前不能进行多任务处理,这一点通常是正确的。这是通过中断或当用户代码进行系统调用时发生的。
定时器中断,尤其是用于抢占时间切片。我认为很难找到一个完整的CPU不支持定时器中断,不必使用穿孔卡或开关进行编程。中断比多核、虚拟内存、DMA或任何新奇的东西都要古老得多。
一些SoC具有具有这种限制的实时子组件(如Beaglebone),如果您在FPGA或其他东西中对小型CPU进行编码,则可能会出现这种限制。
在没有中断的情况下,您必须等待系统调用,这基本上变成了协作多任务处理。