Featured image of post 操作系统 进程线程模型 进程控制块及进程控制

操作系统 进程线程模型 进程控制块及进程控制

进程控制块PCB

在操作系统中,为进程定义了一个专门的数据结构,称为进程控制块PCB。

PCB内容

PCB内容可以分为调度信息和现场信息两大部分。

调度信息供进程使用时使用,描述了进程当前所处的状况,他包括进程名、存储信息、进程号、优先级、当前状态、资源清单、“家族”关系、消息队列指针、进程队列指针和当前打开的文件等。

现场信息刻画了进程的运行情况,由于每个进程都有自己专用的工作存储区,其他进程运行时不会改变它的内容。

进程的组成

PCB组织

  1. 线性方式:将所有的PCB部分状态组织在一个连续表(称为PCB表)中。
    • 优点:简单,且不需要额外的开销,适用于进程数且不多的系统。
    • 缺点:需要扫描整个PCB表。
  2. 索引方式:对于具有相同状态的进程,分别设置各自的PCB索引表,表目为PCB在PCB表(线性表)中的地址。就构成了就绪索引表和等待索引表。
  3. 链接方式:对于具有相同状态的进程PCB,通过PCB中的链接字构成一个队列。按“先进先出”的原则出对,若队列指针为0,表示该队列为空。

进程的队列

  1. 就绪队列:进程入队和出队的次序与处理机调度算法有关。
  2. 等待队列:每一个等待事件一个队列。
  3. 运行队列:在单CPU系统中整个系统有一个运行队列。

进程控制

作用:就是对进程在这个生命周期中各种状态之间的转换进行有效的控制。

原语:通常由若干的指令组成,用来实现某个指定的操作。通过一段不可分割的或不可中断的程序实现其功能。原语的执行过程必须是连续的,一旦开始执行就不能间断,直到执行结束。原语是操作系统的可行,在管态下执行,并且常驻内存。

进程控制原语

用于进程控制的原语一般有:创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。

  1. 创建原语:一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的子进程,构成新的子进程,构成新的父子关系。建立进程控制快PCB:先申请一个空闲的PCB区域,将有关信息填入PCB,置该进程为就绪状态,最后将它插入到就绪状态队列中去。
  2. 撤销原语:找到要被撤销的进程PCB,将它从所在队列中消去。
  3. 阻塞原语:把进程运行状态转换为阻塞状态。首先应中断CPU执行,把CPU的当前状态保存到PCB的现场信息中,把它插入到该事件的等待队列中去。
  4. 唤醒原语:京城因为等待时间的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。具体操作过程:在等待队列中找到该进程,置该进程的当前状态为就绪状态,然后将它从等待队列中撤去并插入到就绪队列中排队,等待调度执行。

UNIX类操作系统的进程控制操作

父进程调用fork()函数。

  1. 为子进程分配一个空闲的proc结构(进程描述符)。
  2. 赋予子进程唯一标识pid。
  3. 以一次一页的方式复制父进程用户地址空间。
  4. 获得子进程继承的共享资源的指针。
  5. 子进程就绪,加入调度队列。
  6. 对子进程返回标识符0;向父进程返回子进程的pid。
  7. 父进程和新建子进程的区别在于它们有着不同的pid。

fork()函数的执行的特点就像是只被调用一次,却会返回两次:一次是在调用进程(父进程)中,一次是在新创建的子进程中。

Licensed under CC BY-NC-SA 4.0