一个简单的问题:在单任务系统中,操作系统将smt复制到内存中,然后“转到”那里的某个地方,程序稍后将控制权返回给任务管理器。但是在多任务操作系统中,我们只需在流程中执行几个步骤,然后返回到任务管理器等待轮到自己。如果没有'goto'和'ret',我们怎么去'任务经理'?
(唯一想到的是 - 像'have made one instruction'
这样的一些奇怪的中断)
答案 0 :(得分:3)
有两种主要类型的多任务系统。合作和先发制人。
在合作系统中,每个任务都被赋予控制权,然后预期运行一段时间。然后它必须自愿将控制权返回给调度程序。这可以通过运行到完成预定函数或通过调用yield()函数来实现。通过执行不产生的任务,可以使系统无响应。
在抢先式系统中,调度程序可以完全控制运行的任务以及执行时间切片和/或任务优先级的时间。强制执行本身通常由系统时钟触发,该系统时钟以某种固定速率产生中断。由于此属性,使系统无响应但更难以通过优先级倒置或资源死锁来实现。