在无中断DCPU-16上是否可以使用抢占式多任务操作系统?

And*_*ter 10 interrupt multitasking dcpu-16

我正在研究各种OS设计,希望为DCPU-16编写简单的多任务操作系统.但是,我读到的关于抢先式多任务处理的所有内容都以中断为中心.听起来在16位硬件和软件时代,协作式多任务处理更为常见,但这需要考虑每个程序的多任务处理.

有没有办法在无中断架构上实现抢占式多任务处理?我能想到的只是一个可以动态切换任务的解释器,但这会产生巨大的性能损失(如果它必须解析每个操作并且不让任何东西本地运行,可能会大约10-20x +,我是想象).

Ira*_*ter 4

抢占式多任务处理通常是通过让中断例程将状态更改/有趣事件发送给调度程序来实现的,调度程序根据优先级决定要挂起哪些任务以及要启动/继续哪些新任务。然而,当正在运行的任务调用操作系统例程时,可能会发生其他有趣的事件,这可能具有相同的效果。

但重要的是某些事件在某处被记录,并且调度程序决定运行谁。因此,您可以使所有此类事件信号发送/调度仅在操作系统调用上发生。

您可以在各种任务应用程序代码中的“方便”点添加对调度程序的过分调用,以使系统更频繁地切换。无论它只是切换,还是使用一些背景信息,例如自上次调用以来经过的时间,都是调度程序详细信息。

你的系统不会像中断驱动的系统那样响应迅速,但你已经通过选择你所选择的 CPU 放弃了这一点。

  • @安德鲁G。确切地。这就是经典 Mac 操作系统添加多任务处理的方式,最初是作为 System 5 中的扩展。对操作系统的适当调用被视为协作多任务处理机会。正如您所说,没有严格的上限 - 例如,一个进程可能由于设计错误而进入无限循环,而没有操作系统调用,则会挂起整个系统。 (2认同)