「BUAA OS Course」进程

Posted by saltyfishyjk on 2022-05-04
Words 2.8k and Reading Time 9 Minutes
Viewed Times

「BUAA OS Course」进程

Part 0 基本概念

并发与并行

  • 并发(Concurrent):设有两个活动a1和a2,如果在某一指定时刻t,无论a1和a2是在同一处理机还是不同的处理机上执行,只要a1和a2都处在各自的起点和终点间的某一层处,则称a1和a2是并发执行的
  • 并行(Parallel):考虑两个程序,他们在同一时间度量下运行在不同的处理机上,则称这两个程序是并行执行的。

原语

由若干条指令所组成的指令序列,来实现某个特定的操作功能,有以下特点:

  • 指令序列执行连续,不可分割
  • 操作系统的核心组成部分
  • 必须在管态(内核态)执行,并且常驻内存
  • 区别于系统调用,不可以被中断

状态与转换

  • 执行状态:进程正在处理机上运行,单处理机环境下,每个时刻最多只有一个进程处于执行状态
  • 就绪状态:进程获得了除处理机的一切所需资源,一旦得到处理机,便可立即运行
  • 阻塞状态:进程正在等待某一事件而暂停运行,即使处理机空闲,该进程也不能运行

Part 1 进程控制

进程控制块

进程控制块(Process Control Block, PCB)是系统用来描述进程的基本情况和运行状态的数据结构。

程序段相关数据段PCB三部分构成了进程映像(进程实体)。创建进程,实质上是创建进程映像的PCB;撤销进程,就是撤销进程的PCB。

PCB是进程存在的唯一标志

内容

进程标识符

每个进程都有唯一的标识符,可以是字符串或数字。Linux中是一个整型数,在进程创建时由系统赋予。

程序和数据地址

把PCB和其程序与数据联系起来。

当前状态

系统设计时会将相同状态的进程组成一个队列,如就绪进程队列等。等待进程队列会按照等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等。

现场保护区

当进程因为某种原因不能继续占用CPU时,(等待打印机等),释放CPU,这时,需要将CPU的各种状态信息保护起来,将来再次得到处理机时,恢复CPU的各种状态,继续运行。

同步与同步机制:

用于实现进程间互斥、同步和通信所需的信号量等。

优先级

反应进程的紧迫程度,通常由用户指定和系统设置。

资源清单

列出所拥有的除CPU外的资源记录,如I/O设备、打开的文件列表等。

链接字

根据进程所处的执行状态,进程相应的PCB加入到不同队列中。链接字指出该进程所在队列中下一个进程PCB的首地址。

组织方式

  • 线性表:将所有PCB连续存放在内存的系统区。
  • 连接方式线性表的改进,系统按照进程的状态建立就绪索引表、阻塞索引表等,从而形成就绪队列、下阻塞队列、运行队列等。
  • 索引方式

进程上下文切换与陷入内核

进程上下文切换(Process Context Switch)

  • 通常由调度器执行
  • 保存进程执行断点
  • 切换内存映射(页表基址、flush TLB)

陷入/退出内核(模态切换,Mode Switch)

  • CPU状态改变
  • 由中断、异常、Trap指令(系统调用)引起
  • 需要保存执行线程(寄存器、堆栈等)

进程的创建

允许一个进程创建另一个进程,创建者称父进程,被创建的进程为子进程。子进程可以继承父进程所拥有的资源。子进程被撤销时,将从父进程获得的资源归还给父进程。撤销父进程时,须同时撤销其所有子进程。

  • 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB。若PCB申请失败,则创建失败。
  • 为进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间(在PCB体现)。若资源不足(如内存空间),则并非创建失败,而是处于阻塞态,等待内存资源。
  • 初始化PCB,包括初始化标志信息、处理机状态信息、处理机控制信息以及进程的优先级等。
  • 若进程就绪队列可以接纳新进程,将新进程插入就绪队列,等待被调度运行。

进程的终止

引起进程终止的时间主要有:

  • 正常结束,表示进程任务完成并准备退出运行
  • 异常结束,表示进程运行时,发生某种异常事件,使程序无法继续运行,如,存储区越界、保护错、非法指令等
  • 外界干预,指进程应对外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止

操作系统终止进程的过程如下(撤销原语):

  • 根据被终止进程的标识符,检索PCB,从中读出该进程的状态
  • 若被终止进程处于执行状态,立即终止该进程的指向性,将处理机资源分配给其他进程
  • 若该进程还有子(孙)进程,将其所有子(孙)进程终止
  • 将该进程拥有的全部资源,或归还给父进程,或归还给操作系统
  • 将PCB从所在队列(链表)中删除

进程的阻塞和唤醒

正在执行的进程,由于期待的某些事件未发生,如,请求系统资源失败、等待某种操作的完成,由系统自动执行阻塞原语(Block),使自己由运行态转为阻塞态。可见,进程的阻塞是进程自身的一种主动行为,因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞态。阻塞原语的执行过程如下:

  • 找到将要被阻塞进程的标识号对应的PCB
  • 若该进程为运行态,保护其现场,将其状态转为阻塞态,停止运行
  • 将该PCB插入相应事件的等待队列,将处理机资源调度给其他就绪线程

当该进程所期待的时间发生,如其启动的I/O操作已完成或其所期待的数据已到达,由有关进程(如释放该I/O设备的进程,或提供数据的进程)调用唤醒原语(Wakeup),将等待该事件的进程唤醒。唤醒原语的执行过程如下:

  • 在该事件的等待队列中找到对应进程的PCB
  • 将其从等待队列中移出,并置其状态为就绪态。
  • 将该PCB插入就绪队列,等待调度

值得注意的是,Block原语和Wakeup原语是一堆作用恰好相反的原语,须成对使用。Block由阻塞进程自我调用实现,Wakeup由一个被唤醒进程合作或其他相关的进程调用实现。

进程切换

对于通常的进程,其创建、撤销及要求由系统设备完成的I/O操作,都是利用系统调用而进入内核,再由内核中的相应处理程序予以完成。进程切换同样是在内核的支持下实现的,因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

进程切换指处理机从一个进程的运行转到另一个进程的运行,在这个过程中,进程的运行环境产生了实质性的变化。进程切换的过程如下:

  • 保存处理机上下文,包括程序计数器和其他寄存器
  • 更新PCB
  • 把进程的PCB移入相应的队列,如,就绪、在某事件阻塞队列
  • 选择另一个进程执行,并更新其PCB
  • 更新内存管理的数据结构
  • 恢复处理机上下文

注意,进程切换和处理机模式切换不同。模式切换时,处理机逻辑上可能还在同一进程中运行。若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时所保存的CPU现场,而无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则,当前进程的环境信息也需要改变。

注意:“调度”和“切换”的其区别。调度是指决定资源分配给哪个进程的行为,是一种决策行为;切换是指实际分配的行为,是执行行为,一般来说,先有找资源的调度,然后才有进程的切换

Part 2 进程的组织

进程控制块

进程创建时,操作系统为它新建一个PCB,该结构之后常驻内存,任意时刻可以读取,并在进程结束时删除。PCB是进程实体的一部分,是进程存在的唯一标志。

进程执行时,操作系统通过PCB了解进程的现行状态信息,以便控制和管理;进程结束时,系统回收PCB,进程随之消亡。操作系统通过PCB表来管理和控制进程。

程序段

程序段是能被进程调度程序调度到CPU执行的程序代码段。注意,程序可以被多个进程共享,即,多个进程可以运行同一个程序。

数据段

一个进程的数据段,可以是进程对应的程序架构处理的原始数据,也可以是程序执行时产生的中间或最终结果。

Part 3 进程的通信

进程通信指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式,有以下三类:

共享存储

通信的进程之间存在一块可以直接访问的共享空间,对这片共享空间读/写实现进程之间的信息交换。对共享空间进行读/写时,需要使用同步互斥工具(如P操作,V操作),对共享空间的读/写进行控制。

共享存储分为两种:低级方式的共享是基于数据结构的共享,高级方式的共享是基于存储区的共享。操作系统为通信进程提供可共享使用的存储空间和同步互斥工具,数据交换由用户自己安排读/写指令完成。

消息传递


This is copyright.