无限循环 VS 调度器

无限循环 VS 调度器

从汇编的角度来看,当我们编写的代码只是跳回几个命令,而没有跳转到 sheduler 可能使用的任何控制函数时,unix 如何中断这样的代码?

我认为它正在使用计时器和中断。那么问题是我们能否在硬件上不间断地实现unix系统,并且仍然在有限的时间内解决无限循环代码?

或者换句话说,我是否正确地假设unix处理像“while(true){}”这样的代码的唯一方法是通过带有中断的硬件定时器?

如果是这样,在没有硬件定时器+中断的硬件上实现类unix系统的最低要求是什么?

答案1

您讨论的是非抢占式调度和抢占式调度之间的区别。

非抢占式(也称为协作式)更简单一些(不需要计时器),并且线程通信时不需要锁。例如 Apple Mac OS9 及更早版本,我认为早期的 MS-Windows,许多嵌入式系统和微线程。

所以是的,需要一个计时器。但是对于您有关最简单硬件的问题。 Unix 需要一个 MMU,这比计时器复杂得多。 (实际上有一些类似 Unix 的系统没有 MMU,并且在很多情况下它们的工作方式相同(区别是:没有安全性,没有交换/分页)

另一种允许案例任务切换的方法while true。就是利用代码注入。编译器或加载器将注入代码以协作yield。这可能很难做到:对于加载程序来说,可能没有足够的信息来知道哪里需要它。它可能会打破原子性的假设。给定正确的语言和编译器,它大概可以做得很好。但我不知道任何例子。

相关内容