进程的描述与控制
进程的描述
为了使程序并发执行,并对并发执行的程序加以描述和控制,人们引入了“进程”的概念。
定义
为了使参与并发执行的程序都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为 进程控制块(PCB)。系统使用PCB描述进程的基本情况和获得过程,进而控制和管理进程。由 程序段,相关数据段和 PCB三部分构成进程实体。
进程的创建和销毁实质上是对进程实体的PCB的创建和销毁。
特征
- 动态性:由创建而产生,由调度而执行,由撤销而消亡。
- **并发性:**引入进程的目的正是为了使进程实体能和其他进程并发执行。
- 独立性:进程实体能够独立运行、独立获得资源单位和独立接受调度的基本单位。
- 异步性:进程是按异步的方式运行,即按照各自独立、不可预知的方式进行的。
状态
每个进程都具备一下三种基本状态:
- 就绪(Ready)状态:指进程处于准备好运行的状态,即进程已分配到除CPU以外的所有资源,只要再获得CPU即可开始运行。如果系统中有很多就绪状态的进程,通常将他们按照一定的策略排列成一个队列,称为就绪状态。
- 执行(Running)状态:进程已获得CPU正在运行。对于单处理机在任何时刻只有一个进程运行。
- 阻塞(Blocking)状态:正在执行的进程由于发生某件事(I/O请求、申请缓冲失败等),暂时无法执行的状态,或者执行受到阻塞。引起进程调度,把CPU分配给另一个就绪进程,而让受阻进程处于暂停状态,这种状态称为阻塞状态。
为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中又为进程引入了两种状态:创建状态和终止状态。
- 创建状态:为了保证进程的调度必须在创建工作完成后进行,以确保对进程控制块操作的完整性。对于处在创建状态的进程只有在获得所需的资源以及对其PCB块的初始化工作完成后,便可以进入就绪状态。
- 终止状态:当一个进程到达自然结束点或者出现了无法克服的错误,或被操作系统终结,或被其他有终止权的进程终结,它将进入终止状态。进程不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集。一旦完成对其信息的提取之后,操作系统将删除该进程。即将PCB清零,并将该空白PCB返还系统。
为了系统和用户观察分析进程的需要,还引入了对进程的重要操作——挂起/激活操作。在引入了挂起原语(Suspend)和激活原语(Active)后。进程可能发生以下几种状态。
- 活动就绪→ 静止就绪 :当进程处于未被挂起的就绪状态时,称为活动就绪,表示为Readya。当用挂起原语Suspend将该进程挂起后,该进程转换为静止就绪状态,表示为Readys,处于Readys状态的进程不再被调度执行。
- 活动阻塞→**静止阻塞 **:当进程处于尚未挂起的阻塞状态时,称为处于活动阻塞状态,表示为Blockeda。当用Suspend*原语将它挂起后,进程便转换为静止阻塞,表示为Blockeds。处于该状态的进程在期待的事件出现后,将从静止阻塞变为静止就绪。
- 静止就绪→**活动就绪 **:处于Readys状态的进程,若用激活原语Active激活后,该进程将转变为Readya状态。
- 静止阻塞→**活动阻塞 **:处于Blockeds状态的进程,若用激活原语Active激活后,进程将转变为Blockeda状态。
进程中的数据结构
在计算机系统中,为每个资源和进程都设置了一个数据结构,用于表征其实体,我们称之为资源信息表获进程信息表。资源信息表分类链接成不同的队列:内存表、设备表、文件表和用于进程管理的进程表。进程表又被称为PCB。
PCB的作用
- 作为独立运行的基本标志
- 能实现间断性的运行方式
- 提供进程管理的信息
- 提供进程调度所需的信息
- 实现与其他进程的同步与通信
PCB中的信息
- 进程标识符:用于唯一标识一个进程,一个进程通常有两种标识符:外部标识符和内部标识符。
- 外部标识符:为了方便用户(进程)对进程的访问,需为每个进程设置一个外部标识符。
- 内部标识符:为了方便系统对进程的使用,赋予每个进程一个唯一的数字标识符,它通常是一个进程的序号。
- 处理机的状态:也称为处理机上下文,主要由处理机中的各种寄存器的内容组成。
- 通用寄存器。
- 指令计数器
- 程序状态字PSW
- 用户栈指针
- 进程调度信息:
- 进程状态:进程调度和对换的依据。
- 进程优先级。
- 进程调度所需的其他信息:与所采用的的进程调度算法有关,比如,进程所等待的时间。
- 事件:进程由执行状态转变为阻塞状态所等待的事件,即阻塞原因。
- 进程控制信息:
- 程序和数据的地址。
- 进程同步和通信机制。
- 资源清单:除CPU外所有运行所需要的信息,还有一张已分配的清单。
- 链接指针:本进程所在队列中的下一个进程PCB的首地址。
PCB的组织方式
-
线性方式:将系统中的所有PCB都组织在一张线性表中。实现简单、开销小。每次查找多要扫描整张表,适合进程数目不多的系统。
-
链接方式:把具有相同状态的进程的PCB分别通过PCB的链接字链接成一个队列。往往按进程的优先级排成队列。
-
索引方式:系统根据所有进程状态不同,建立几张索引表。
进程控制
进程控制是进程管理中最基本的功能,主要包括创建进程、终止已完成的进程、将因发生异常情况而无法继续执行的进程置于阻塞状态、负责进程运行中的状态转换等功能。
OS内核
现代操作系统通常分为若干层次,再讲OS的不同功能置于不同层次。通常将于硬件紧密相关的模块(中断处理程序)、常用设备的驱动程序(时钟管理、进程调度等)安排在紧靠硬件的软件层次中,将他们常驻内存,称为)OS内核。
通常将处理机的执行状态分为系统态和用户态。
- 系统态:又称管态,内核态。具有较高的特权,能执行一切指令,访问所有寄存器。
- 用户态:又称目态具有较低的执行特权,仅能执行规定的指令和指定的寄存器和存储区。
OS内核都包含了以下两大方面的功能:
- 支撑功能:
- 中断处理:是内核最基本的功能,是整个操作系统赖以活动的基础。
- 时钟管理:在时间片轮转调度中,每当时间片用完时,便由时钟管理产生一个中断信号,促使调度程序重新调度。
- 原语操作:由若干条指令组成的,用于完成一定功能的一个过程。他们是原子操作。
- 资源管理功能
- 进程管理。
- 存储器管理:如将用户空间的逻辑地址变换为内存中的物理地址的转换机构。内存分配与回收功能模块等。
- 设备管理。
进程创建
进程层次结构
在OS中,允许一个进程创建另一个进程,通常把创建进程的进程称为父进程,把被创建的进程称为子进程。在Unix中,进程与其子孙进程共同组成一个进程家族。
子进程可以继承父进程所拥有的资源,子进程被撤销时应归还从父进程获得的资源。
在Windows不存在任何进程层次结构的概念,所有的进程都有相同的地位。如果一个进程创建另一个进程获得一个句柄,用于控制被创建的进程。句柄可以传递,也就是说获得句柄的进程就有控制其他进程的权利。
引起创建进程的事件
导致一个进程创建另一个进程的典型事件有4类:
- 用户登录:用户在终端键入登录命令后,系统将为该进程创建一个进程。
- 作业调度:在多道批处理系统中,作业调度程序按照一定的算法调度某个作业,将他们装入内存,创建进程,并插入就绪队列中。
- 提供服务:当运行中用户程序提出某个请求后,系统专门创建一个进程提供服务。例如,文件打印。
- 应用请求:由用户进程自己创建新进程,以便新进程以同创建者并发运行的方式完成特定任务。例如,从键盘不断读入数据。
进程终止
- 正常结束
- 异常结束:
- 越界错
- 保护错
- 非法指令
- 特权指令错
- 运行超时
- 等待超时
- 算术错
- I/O故障
- 外界干预:
- 操作员或操作系统干预,例如,发生死锁,操作系统终止某些进程
- 父进程请求:子进程已完成父进程所要求的任务是,父进程可以结束子进程
- 父进程终止:父进程结束时,他的所有子进程也应该结束
进程同步
进程同步机制是对多个进程在执行次序上进行协调,使并发执行的诸进程之间按照一定的规则共享系统资源,并能很好的相互合作,从而使程序的执行具有可再现性。
进程间由两种制约关系:间接相互制约关系和 直接相互制约关系。
- 间接相互制约关系是多个程序在并发执行时,由于共享系统资源,如CPU、I/O设备等,形成相互制约关系。
- 直接相互制约关系是源于他们之间的相互合作。
临界资源,进程只能单独进行访问和使用的资源,不能共享。
临界区,进程中访问临界资源的那段代码叫做临界区。
对临界资源的访问必须进行同步机制。
硬件同步机制
- 关中断:在进入所测试之前关闭中断,知道完成所测试并上锁之后才能打开中断。
- Test-and-Set指令实现互斥:
- 利用Swap指令实现进程互斥:为每个临界资源设置一个拳击布尔变量lock,初值为false。
信号量机制
- 整型信号量:P,V操作
- 记录型信号量:没有遵循“让权等待”原则,使进程处于忙等状态。只要S《=0就会不断测试。
- AND型信号量:真的一个进程需要更多种类的资源。将进程在整个运行过程中需要的所以资源,一次性全部分配给进程,待进程使用完一起释放。
- 信号量集:对进程所申请的所有资源以及每类资源的需求量,在一次P,V操作完成申请或释放,不再是每次测试1个,而是该资源的分配下限值。
于忙等状态。只要S《=0就会不断测试。
- AND型信号量:真的一个进程需要更多种类的资源。将进程在整个运行过程中需要的所以资源,一次性全部分配给进程,待进程使用完一起释放。
- 信号量集:对进程所申请的所有资源以及每类资源的需求量,在一次P,V操作完成申请或释放,不再是每次测试1个,而是该资源的分配下限值。