多任务如何工作


15

我对操作系统的内部运作一无所知,但是我可以或多或少地猜测许多功能的近似行为。不过,我无法弄清的一件事是多任务处理。

从理论上讲,操作系统会根据CPU以较小的时间间隔运行各种程序来管理时间。但目前还不清楚这是如何真正起作用。

假设操作系统要启动我的程序。机器代码从某个地址开始加载到RAM中的某个位置。我想应该跳转到该地址,以便执行我的代码。但是以这种方式,直到我跳回操作系统,操作系统才能重新获得控制权。

基本上,我可以想象只有两种方式可以完成这项工作,但似乎都不合适:

  • 操作系统可以读取我要执行的机器指令并对其进行仿真,而不是直接执行它们。我故意含糊其词,因为我不知道这将如何工作,但似乎会大大减慢该程序的速度。

  • 或者,操作系统可以等到我进行系统调用。在那一刻,它重新获得控制权,并可以检查我已经运行了多长时间并进行了分时操作。这可能有效,但是似乎不可靠,因为我可以进行很长的计算而不涉及系统调用,并且会挂起所有内容一段时间。

因此,似乎这两种机制都无法很好地发挥作用。实际如何执行多任务处理?


尽管您的猜测并不完全正确,但是您指出的问题是:“我可以进行很长的计算而不涉及系统调用,并且会暂时挂起所有内容。”
2011年

寻找关键字:interrupt
SK-logic

是的,但是谁在启动中断?如果我的代码正在执行,则操作系统无法执行INT指令。对我来说,有些事情仍然很神秘
Andrea

@Andrea,硬件时钟正在触发中断。就这么简单。en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic

好的,现在我明白了。因此,如果我正确理解,它是一项基于硬件的功能,不能仅在操作系统中实现。
Andrea

Answers:


21

操作系统将计时器编程为每隔几微秒(或毫秒,取决于系统速度)踢一次。该定时器引发硬件中断,这将导致CPU停止当前正在执行的操作,将其所有内容转储到堆栈中,并处理由中断控制器提供的地址指示的中断例程。该例程可以检查堆栈和其他各种变量,以决定接下来应将哪个运行过程重新投入运行。如果是相同的过程,则中断例程简单地返回。如果是不同的堆栈,则会保存堆栈的相关部分,然后将其替换为先前中断的进程的内容,因此当中断例程返回时,该进程将继续。除了已经过去了一段时间以外,

(对于现代CPU)这是发生的情况的非常非常简化的版本,但是它解释了原理。除了这些由OS控制的中断外,还存在由外部事件(鼠标,键盘,串行端口,网络端口等)引起的中断,这些事件是通过单独的中断例程进行处理的,这些中断例程通常连接到事件处理程序。

通常,过程/任务/上下文切换也基于外部资源的可用性。通常,需要来自存储的数据(即不在RAM中)的进程会将请求放置在队列上,为硬件中断设置事件处理程序以指示请求已得到处理,然后将控制权交给任务调度程序(因为没有点等待)。再次,对实际情况进行了非常简化的描述,但它应满足此答案的目的。


5

它因系统而异。

在非抢先式多任务处理系统(例如原始的Oberon或原始的Apple Macintosh)中,操作系统会定期“轮询”所有任务,使他们有机会进行工作。这些任务有望很好地配合。如果他们只需要一点工作,就可以完成并返回操作系统。如果一个任务有一个BIG块要做,则可以将其分解成小块,并在每次轮询时都工作一小块。

硬件中断(磁盘驱动器DMA完成,串行端口中断,您所拥有的)导致中断例程运行。这些中断例程继而可以在任务下次运行时通知任务要完成的工作。

在非抢先式多任务系统中,中断例程的完成与执行不会影响中断的发生。

在抢占式多任务系统中,中断例程可能会强制更改计划。在传统的轮循式抢占式多任务系统中,定时计时器中断确实可以做到这一点。触发计时器中断,计时器中断例程执行了一些不可思议的操作,导致中断返回指令返回到操作系统的抢占式调度,而不是返回到正在运行的任务,从而使处理器脱离了当前任务,并且(POSSIBLY )将其交给其他任务。如果此时没有其他任务准备运行,则当前任务将再次获得处理器,而只是浪费了一些时间。

抢先式多任务处理可能会导致很多麻烦。有关互斥锁和关键部分以及致命的拥抱和优先级倒置等所有烦人的内容,都会在处理器毫无预警地从您手中夺走时显示出来。您必须使用所有这些内容来告诉操作系统,您正在混合硝酸甘油,并且现在就将处理器从您身边拿走,这很可能在服务器机房地板的中间造成一个冒烟的虚拟漏洞。


如果在没有任何警告的情况下将处理器从您身边夺走,会发生什么不好的后果?我猜您将再次获得与寄存器中相同值的处理器控制权。这与仅保持计算有何不同?
Andrea

@Andrea:互斥和关键部分是关于在关键时刻不丢失处理器。如果您的进程已锁定,而您丢失了处理器,则该事物将保持锁定,直到您再次获得处理器为止。这可能会导致问题。
John R. Strohm

@Andrea您将再次获得对处理器的控制权,并且其他一些进程可能与您将要使用的内存有关。
user253751'1

4

计时器中断可以由计算机硬件生成以中断CPU。这样,基于操作系统使用的调度算法,OS可以决定是继续执行当前程序还是上下文切换到准备运行的另一个程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.