我已经读过操作系统使用以下方法实现调度:
我的问题是:我刚刚描述的方法是实现调度的唯一方法吗?
答案 0 :(得分:5)
没有。基本上有两种在操作系统中实现多线程的基本方法:
1)Preemtive Multitasking
使用preemtive多任务处理,您可以使用中断源来触发任务切换。大多数时候,如果执行长时间运行的任务并且没有发生其他硬件事件,则在定时器ISR(中断服务程序)内进行任务切换。如果发生其他硬件事件,可能还会执行任务切换以阻止具有更高优先级的线程以允许处理硬件事件。
2)合作多任务
在协作式多任务处理中,只要执行系统调用,操作系统就会切换线程。这可以是一个特殊的系统调用,允许应用程序显式触发任务切换(如早期多任务系统中使用的Yield,如Windows 3.11,经典Mac OS等)。也可以在用户模式下完全实现协同式多任务处理。
今天大多数操作系统采用混合方式 - 它们对硬件事件做出反应(如果长时间运行的线程从不调用系统例程而没有其他I / O发生这将是计时器),但它们也可以切换任务应用程序执行系统调用或调用系统提供的库时的协作方式。
答案 1 :(得分:0)
在线程或相同优先级进程之间切换上下文切换时需要一个定时器中断。一些多线程抢占式嵌入式操作系统的替代方案是使每个线程具有不同的优先级,这消除了对时间分片或定时器中断的需要。中断仍可用于触发上下文切换(除了使用系统调用来通知其他线程的线程),但不需要定时器中断。