当进程进入系统时,它们会被添加到作业队列(job queue)中,这个队列包含系统中所有的进程。驻留在内存中的准备就绪并等待执行的进程,会被保存在就绪队列( ready queue)中。该队列通常是一个链表结构。就绪队列头包含指向链表的第一个和最后一个PCB块的指针。每个PCB包括一个指向就绪队列的下一个PCB的指针域。

系统中还包括其他的队列。当一个进程被分配了CPU资源,它会执行一段时间并最终退出,或者被中断,或者等待某个特定的事件发生(如完成了I/O请求)。假设流程向共享设备发出I/O请求,比如磁盘。因为系统中有多个进程,而磁盘当钱可能正忙于其他进程的I/O请求。那么这个进程不得不等待磁盘资源可用。等待特定I/O设备的进程列表称为设备队列(device queue)。每一个设备都有其自己的队列。看下图:

进程调度的常见表示方法是队列图(queueing diagram)。见下图,每个矩形框代表的是一个队列。图中存在两种队列:就绪队列和一系列的设备队列。其中的圆圈代表的是服务于该队列的资源,而箭头表示的是系统中进程的流向。

一个新的进程最初被放进就绪队列中。它在就绪队列中等待,直到被选中执行或被派遣(dispatched),一旦这个进程被分配到了CPU资源并执行,有几个事件可能发生:

  • 这个进程可以发出I/O请求,然后被放到I/O队列中。

  • 进程可以创建一个新的子进程,并等待其结束

  • 进程可能会由于中断而强制释放CPU,并被放回到就绪队列中

在前两种情况下,进程最终从Waiting状态转换到Ready状态,并被扔进就绪队列(ready queue)。进程会持续这个循环,直到终止。到那时,它将会从所有队列中删除,其PCB和资源将得以释放。

results matching ""

    No results matching ""