进程描述
进程的定义:程序的一次执行过程
-
程序与进程的区别
(1) 程序是指令的集合,静态概念;进程是程序在处理机上的一次执
行过程,动态概念。
(2) 程序是长期存在的,进程有生命周期,有创建、活动、消亡。
(3) 程序仅是指令的有序集合;而进程则由程序、数据和进程控制块
组成。
(4) 进程与程序之间不是一一对应的,即同一程序同时运行于若干不
同的数据集合上,它将属于若干个不同的进程;而一个进程可以执行
多个程序。 -
进程的特征
(1)结构特征:进程由程序段,数据段以及进程控制块三部分组成,总成“进程映像”
(2)动态性:由创建产生,由调度执行,由得不到资源而阻塞,由撤销而死亡,程序是静态的
(3)并发性:只有建立了进程,才能执行并发
(4)独立性:独立运行,独立获取资源
(5)异步性:间断性 -
进程的状态:
(1)三种基本状态:就绪状态,执行状态,阻塞状态 -
进程控制块
(1)操作系统中用于控制管理的数据结构
(2)作用:进程存在的唯一标志;PCB( process control block)常驻内存
(3)进程控制块中的信息:标志,处理机状态,进程调度信息,进程控制信息
进程控制
对系统中所有进程从创建、存在到消亡的全过程实施有效的管理和控制。具有创建新进程、对运行进程进行控制、撤销进程的能力。进程控制由OS系统的内核完成, 内核通过原语操作来实现。
- 处理机的两种状态:
- 核心态——又称管态或系统态,使OS管理程序执行时机器所处的状态。具有较高特权,能执行一切指令,访问所有寄 存器和存储区。
- 用户态——又称目态,是用户程序执行 时机器所处的状态。具有较低特权的执 行状态,只能执行规定的指令,访问指 定的寄存器和存储区。
- 内核:基于硬件的第一次软件扩充,并常 驻内存。
- 原语:由若干指令构成,用于完成一定功 能的一段程序。原语在执行期间不可分割, 所以原语操作具有原子性。(关中断下完成)
- 常用的进程控制原语 : 创建、撤销 ;阻塞:执行→阻塞 ;唤醒:阻塞→就绪 ;挂起:活动→静止; 激活:静止→活动
-
进程创建:
(1)子进程可继承父进程的资源,撤销时会归还,父撤销会撤销所有子进程
(2)引起进程创建的事件:用户登录,作业调度,提供服务,应用请求
(3)进程的创建过程(create原语):申请空白PCB(一个系统1的pcb是有限的) --> 为新进程分配资源 --> 初始化PCB --> 将新进程插入就绪队列 -
进程的撤销:
(1)引起进程终止的事件:正常结束(Halt,lolgff),异常结束(Protect,error,overtime),外界干预(kill,父进程结束,请求)
(2)进程终止的过程:检查进程状态 --> 执行态->终止且置调度标志为真 --> 有无子孙进程需终止 --> 归还资源给父进程或系统 --> 从PCB队列中移除PCB -
阻塞和唤醒
(1)引发事件:1. 请求系统服务而无法得到满足; 2.启动某种操作而需要同步时; 3.新数据尚未到达;4.无新工作可做
(2)阻塞过程:是进程的自身一种主动行为。a.调用block原语 b. 停止执行,修改PCB入阻塞队列,并转调度。
(3)唤醒过程:其他相关进程完成。a. wakeup原语 b.修改PCB,入就绪队列
(4)挂起:由进程调用suspend原语完成,将该进程PCB移到指定区域,注意状态的改变有可能重新调度
(5)激活:active原语(如在外存,调入内存,改变状态,根据情况看是否调度,如抢先和非抢先)
进程同步
同步:并发进程在执行次序上的协调,以达到有效的资源共享和互相合作,使程序执行有可再现性。
- 两种制约关系
(1)资源共享关系(进程间接制约):需要互斥的访问临界资源
(2)互相合作关系(进程直接制约) - 临界资源
一次只允许一个进程访问的资源,引起不可再现是因为临界资源没有互斥访问。 - 临界区:进程访问临界资源的那段代码
-
同步机制应遵循的准则
(1)空闲让进,忙则等待
(2)有限等待:应保证有限等待,不会产生死等
(3)让权等待:不能进入临界区的执行进程应放弃CPU执行权 -
信号量机制
(1)整形信号量:是一个整型量,通过2个原子操作wait(s)和signal(s)来访问。
Wait(s) {while( s <= 0 ); s–;}
Signal(s){s++; }
信号量类型是特殊类型,只能做wait,signal操作,wait表示申请一个单位资源,signal表示释放一个单位资源(P,V 操作)
PV操作有共享变量信号量存在,所以其程序是一个临界区。PV操作是 原子操作,执行时不可中断。信号量只能通过PV操作改变其值。
1.互斥的模式——PV总是成对出现在同一进程中;
2.同步的模式——PV总是成对出现在不同进程中;
3.前驱关系——有多少前驱关系设置多少个信号量,初值为0;有多少 前驱做多少P操作,有多少后继结点做多少V操作,无前驱不做P操作
(2)记录型信号量
在整型信号量机制中的wait操作,只要是信号量 S≤0, 就会不断地测试。因此,该机制并未遵循 “让权等待”的准则,而是使进程处于“忙等”的状 态。
解决方案:
typedef strut{
int value;
strut process_control_block *list;
}semaphore;
list:为进程链表,用于链接所有等待该类资源进程。
wait(semaphore *S) {
S->value--;
if (S->value <0)
block (S->list)
}
signal(semaphore *S) {
S->value++
if (S->value<=0)
wakeup(S->list)
}
说明:
1.S->value>0时,表示系统中可用资源的数目。
2.当S->value<0时,S->value的绝对值表示阻塞进程的数目。
3.如果S->value的初值为1,表示只允许一个进程访问临界资源, 此时的信号量转化为互斥信号量
(3)AND型信号量
- 特点:要么全分配,要么一个也不分配。
- 当不用它时,有可能发生系统死锁。
- 死锁:在无外力作用下的一种僵持状态。
Swait(s1,s2,…,sn) {
while(1) {
if (s1>=1& …&sn >=1) {
for(i=1;i<=n;i++) si--; break;
} else {
place the process in the waiting queue with the first si found with si<1,
and set the program count of this process to the beginning of swait operation
}
}
}
Ssignal(s1,s2,…,sn) {
while(1) {
for (i=1;i<=n;i++){
si++;
remove all the process waiting in the queue associated with si into the ready queue
}
}
}
(4)信号量集
- 为提高效率而对AND信号的扩充。
- 允许一次申请多种资源多个
Swait(S1, t1, d1, …, Sn, tn, dn){
while(1) {
if(Si>=t1 & … &Sn>=tn )
for (i=1;i<=n;i++) Si=Si-di;
else{
Place the executing process in the waiting queue of the first Si with Si <ti and set its program counter to the beginning of the Swait Operation.
}
}
}
Ssignal(S1, d1, …, Sn, dn){
while(1) {
for (i=1;i<=n;i++) {
Si =Si+di;
Remove all the process waiting in the queue associated with Si into the ready queue
}
}
}