进程管理
一、前言

进程(Process)管理也称为处理机管理,主要就是合理的分配各个进程使用处理机的时间。
之所以有了这个概念,是因为当系统中有多个并发执行的程序时,程序这个静态的概念已经不能描述程序执行时的动态过程。

二、进程的基本概念

程序执行的特征

单个程序

可以用前趋图来表示一个程序执行的过程。如下:
进程管理_操作系统
三个主要特征:

特征 描述
顺序性 严格按照规定顺序执行
封闭性 独占资源,执行结果不受外界影响
可再现性 如果执行环境和初始条件都相同,则程序执行结果一定相同

多个程序

计算机系统采用多道程序设计技术,则主存中的多道程序可处于并发执行状态。如下:
进程管理_操作系统_02
\(I_2和C_1,P_1、C_2和P_1,P_2\)并发执行
\(I_2、I_3受I_1的约束\)
并发执行的特征:

  1. 失去了封闭性
  2. 程序间相互约束
  3. 程序与机器执行程序的活动不再一一对应。

进程实体的组成

进程是程序的一次执行,它由程序、数据和PCB组成。PCB是进程存在的唯一标志。
被进程共享的程序是不可修改部分,以可再入码的形式编制。
数据部分是一个进程所专用的,可修改。
PCB内容如下:

信息 含义
进程标识符 标明各个进程
状态 说明进程当前状态
位置信息 程序和数据在内存或外存的物理位置
控制信息 参数、信号量和消息等
队列指针 链接同一状态的进程
优先级 进程调度的依据
现场保护区 将处理机的现场保护到该区以便再次调度时能正确运行

进程的状态

三态模型

进程管理_操作系统_03
状态:
(1)运行(running)态:进程占有处理器正在运行。
(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。
(3)阻塞(blocked)态:又称为等待(wait)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。
状态的转换:
(1)运行态一一>等待态:等待使用资源或某事件发生,如等待外设传输;等待人工干预。
(2)等待态一一>就绪态:资源得到满足或某事件己经发生,如外设传输结束;人工干预完成。
(3)运行态一一>就绪态:运行时间片到,或出现有更高优先权进程。
(4)就绪态一一>运行态:CPU空闲时被调度选中一个就绪进程执行。

五态模型

进程管理_进程调度_04
新建态对应于进程刚刚被创建的状态,创建1个进程要通过两个步骤,首先,是为一个新进程创建必要的管理信息;然后,让该进程进入就绪态。新建态可以增加系统调度的灵活性,系统可根据系统性能和内存容量的限制来推迟新建态进程的提交

进程的终止也要通过两个步骤,首先,是等待操作系统进行善后;然后,退出主存。终止态防止系统进行善后处理时资源分配不当的问题.

三、进程的控制

有效控制进程从创建到消亡。
主要包括创建新进程、撤销已完成进程、改变进程状态和实现进程通信等。
进程控制由操作系统内核(Kernel)中的原语(Primitive)实现。

四、进程的通信

进程通信是各个进程交换信息(互相制约)的过程。

同步和互斥

同步

合作进程的直接制约问题。
同步不是同时,而是交叉并行。

互斥

申请临界资源的间接制约问题。
临界资源(Critical Resource,CR)一次只能一个进程使用。

临界区管理

临界区(Critical Section,CS)是操作临界资源的程序。

  • 有空即进。临界区无进程时,允许等待的进程进入并维持有限时间。
  • 无空则等。
  • 有限等待。有访问临界区需求的进程不能等待太久,否则陷入"饥饿"状态。
  • 让权等待。当前进程不能进入临界区时应立即释放处理机,否则陷入"忙等"状态。

信号量机制

信号量S是一个整数,S大于等于零是代表可供并发进程使用的资源实体数,当S小于零时则表示正在等待使用临界区的进程数(即阻塞队列)。

PV原语(低级通信)

P原语的操作:
(1)S减1;
(2)若S减1后仍大于或等于零,则进程继续执行;
(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度
V原语的操作:
(1)S加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作的缺点:
(1)编程难度大,对用户不透明,使用不当会引起死锁。
(2)效率低。

高级通信

高级进程通信分为三种方式:共享内存模式、消息传递模式、管道通信(共享文件)模式。

五、进程的调度

三级调度

进程调度方式

进程调度算法

六、死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备四个必要条件。
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

七、线程

线程也称为轻型进程
线程拥有PC、一组寄存器和栈。
同一进程的线程共享进程的全部资源。
线程的引入是为了减少程序执行的时空开销。
线程可创建另一个线程。