Operating system 操作系统如何实现进程切换

Operating system 操作系统如何实现进程切换,operating-system,scheduling,scheduler,Operating System,Scheduling,Scheduler,操作系统如何获得进程切换。我想说得更笼统一些。我们正处于多任务时代,我知道一个基本概念,即存在一个调度程序,它权威性地指出哪个进程将运行。我的问题更多的是处理器如何保证某个进程将消耗X时间,然后执行下一个进程。在特定的时间后,是否有任何低水平的机制破坏过程?或者这是一种抽象的方法来实现 有没有可能在没有特殊处理器帮助的情况下实现中断当前任务并将执行切换到另一个任务的功能?如果否,我们需要什么来实施它。让我们假设我想在一些简单的uC中实现类似的东西,比如Atmega8(这只是uC的一个例子,我们可

操作系统如何获得进程切换。我想说得更笼统一些。我们正处于多任务时代,我知道一个基本概念,即存在一个调度程序,它权威性地指出哪个进程将运行。我的问题更多的是处理器如何保证某个进程将消耗X时间,然后执行下一个进程。在特定的时间后,是否有任何低水平的机制破坏过程?或者这是一种抽象的方法来实现


有没有可能在没有特殊处理器帮助的情况下实现中断当前任务并将执行切换到另一个任务的功能?如果否,我们需要什么来实施它。让我们假设我想在一些简单的uC中实现类似的东西,比如Atmega8(这只是uC的一个例子,我们可以使用其他的,来自其他家族的)

谷歌的“中断”。对于现代抢占式内核,来自运行线程/进程的系统调用和导致驱动程序运行的硬件中断是可以驱动操作系统内核调度状态机的事件,因此是下一个将在可用内核上运行的进程/线程集

在许多操作系统设计中,特别是在有限的硬件上,没有“处理器保证某些进程将消耗X时间”这样的东西。其他的调度程序内置了反饥饿算法

还有其他的调度算法寻求提供保证,但在面临系统调用和I/O完成事件时硬件中断的冲突需求时,这是非常困难的。有两种方法(我可以想当然地想到)可以导致上下文切换:

1) 进程/线程的产量。这往往是上下文切换最常见的原因。线程排队等待I/O请求并等待响应。等待导致线程/进程屈服


2) 定时器,如上所述。在计算绑定进程(所有处理、无I/O、无页面错误)的情况下,CPU计时器生成中断,在内核模式下处理。一个操作系统将有一组内务任务在定时器中断时执行。其中之一就是看看当前的进程是否超过了它的量。如果是这样,并且有另一个进程以更高的优先级准备就绪,请执行上下文切换。

或查询
Wikipedia
中的“中断”或3)完成(1)中要求的I/O操作,并使等待的线程运行,抢占另一个线程。计时器中断将无法找到具有较高优先级的就绪进程/线程-任何此类线程在就绪时都会被设置为“立即”运行,抢占优先级较低的线程。