操作系统中的活动进程和就绪队列

时间:2016-06-23 12:50:02

标签: linux linux-kernel operating-system job-scheduling

我正在阅读操作系统中的作业调度。据我所知,所有活动进程都位于就绪队列和处理器从队列前端进行选择,并处理该进程的指令。此作业队列通常实现为链接列表。 但是,高尔文的书中说主存中的活动过程是用双向链表来表示的。

  

在Linux内核中,所有活动进程都使用a表示   task_struct的双向链表,内核维护一个指针    - 当前 - 到当前在系统上执行的进程。

然后它还说使用单个链表实现就绪队列。我是否将活动进程与就绪队列混淆了?

  

驻留在主内存中的进程已准备就绪   等待执行保存在名为就绪队列的列表中。这个   queue存储为链表。就绪队列标头   包含指向列表中第一个和最后一个PCB的指针。每个PCB   包括一个指针字段,指向就绪中的下一个PCB   队列中。

这两个概念是不同还是相同?

2 个答案:

答案 0 :(得分:1)

Linux使用时间切片技术来安排流程并动态地为流程分配优先级,即不断变化。

活动进程是用于已安排并正在运行的进程的术语,其中术语就绪队列用于尚未安排的进程处理器执行它们。

当多任务处理时,'n'个活动进程数存储在 Runqueue 中(即处于TASK_RUNNING状态且处于运行或等待的状态执行)。由于处理器一次只能执行一个进程,因此它将使用 - current - 指针指示当前正在执行的特定进程。在多任务处理期间,此指针不断变化。

术语就绪用于指示内核尚未安排的进程,这些进程存储在单个链表中。

在内核中,有很多进程一直在运行。您可以通过执行ps命令来查看它们。因此,这些流程将存储在 runqueue 中,并且在特定流程的时间片到期后将执行上下文切换,而 readyqueue 与此完全不同。

注意:术语从作者变为作者。

答案 1 :(得分:0)

我认为你可以阅读你所引用的特定内核版本的源代码 在kernel / sched /确认.Recent内核实现"运行队列"
与旧内核不同。 最新的调度程序实际上组织了准备好的 红黑树中的过程。