我正在阅读操作系统中的作业调度。据我所知,所有活动进程都位于就绪队列和处理器从队列前端进行选择,并处理该进程的指令。此作业队列通常实现为链接列表。 但是,高尔文的书中说主存中的活动过程是用双向链表来表示的。
在Linux内核中,所有活动进程都使用a表示 task_struct的双向链表,内核维护一个指针 - 当前 - 到当前在系统上执行的进程。
然后它还说使用单个链表实现就绪队列。我是否将活动进程与就绪队列混淆了?
驻留在主内存中的进程已准备就绪 等待执行保存在名为就绪队列的列表中。这个 queue存储为链表。就绪队列标头 包含指向列表中第一个和最后一个PCB的指针。每个PCB 包括一个指针字段,指向就绪中的下一个PCB 队列中。
这两个概念是不同还是相同?
答案 0 :(得分:1)
Linux使用时间切片技术来安排流程并动态地为流程分配优先级,即不断变化。
活动进程是用于已安排并正在运行的进程的术语,其中术语就绪队列用于尚未安排的进程处理器执行它们。
当多任务处理时,'n'个活动进程数存储在 Runqueue 中(即处于TASK_RUNNING状态且处于运行或等待的状态执行)。由于处理器一次只能执行一个进程,因此它将使用 - current - 指针指示当前正在执行的特定进程。在多任务处理期间,此指针不断变化。
术语就绪用于指示内核尚未安排的进程,这些进程存储在单个链表中。
在内核中,有很多进程一直在运行。您可以通过执行ps
命令来查看它们。因此,这些流程将存储在 runqueue 中,并且在特定流程的时间片到期后将执行上下文切换,而 readyqueue 与此完全不同。
注意:术语从作者变为作者。
答案 1 :(得分:0)
我认为你可以阅读你所引用的特定内核版本的源代码
在kernel / sched /确认.Recent内核实现"运行队列"
与旧内核不同。
最新的调度程序实际上组织了准备好的
红黑树中的过程。