第二章 进程管理

一、进程的基本概念:
1.关于程序执行顺序
1)引入前趋图
描述进程执行前后关系的图
有向无循环图(DAG)
Pi结点:描述一个程序段、进程、或一条语句。
有向边“—>”:结点之间的偏序或前序关系
Pi—>Pk,则Pi是Pk的直接前趋,Pk是Pi的直接后继。
在这里插入图片描述
2)程序顺序执行时的特征
①顺序性
处理机的操作严格按程序规定顺序执行
②封闭性
程序一旦开始执行,其计算结果不受外界因素影响。
③ 可再现性
程序执行只要初始条件一样,不论如何停顿,重复执行多少次结果都一样。
3)程序的并发执行分析
多个程序如果无序并发,得到的只能是混乱的执行结果,
多道程序运行,走走停停的可能顺序有很多种,符合前趋图的关系才是合理并发。
4)并发程序执行时的特征
①间断性(运行表现)
多道 -> 程序并发执行-> 要共享系统的资源 -> 形成相互制约的关系-> 相互制约导致并发程序具有“执行——暂停——执行”这种间断性的活动规律。
②失去封闭性
共享资源,资源状态由多道程序改变,程序运行失去封闭性。即程序运行受其他程序的影响。
③结果不可再现性
结果不确定,程序执行将没有任何意义。
在这里插入图片描述
在这里插入图片描述
2、进程
OS利用“进程实体”控制程序执行就产生了“进程”。
进程就是用于描述、控制程序在内存中并发运行的一个东东。
1)进程的定义
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
可并发执行的程序在一个数据集合上的一次执行过程。
程序的一次执行
是一个程序与其数据一道通过处理机的执行所发生的活动。
2)进程的特征
①结构性特征,进程的根本——PCB
②动态性
进程实质上是进程实体的一次有生命期的执行过程。程序只是静态的一组有序指令。
进程最基本特征
③并发性
多个进程实体同存于内存中,在一段时间内同时运行。
有PCB的程序才能并发。
④独立性
⑤异步性
3)区别进程与程序
动与静:
进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。
永久与暂时:
进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。
结构:
进程的组成包括程序、数据和进程控制块(进程各种控制信息)。
进程与程序的对应关系:
都可1对n。通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
4)进程的基本状态
进程执行时的间断性,决定了其具有多种状态。把握各进程所属的状态对进程控制至关重要。与进程执行相关的各种共享资源有:
CPU
存储器
I/O设备
时间片
注意体会这些资源在进程状态变化中对进程运行的影响。
进程的三种基本状态
(1)就绪状态(Ready)
进程获得除CPU之外的所有必需资源,一旦得到CPU控制权,可立即运行。
(2)运行状态(Running)
进程已获得所有运行必需的资源,正在处理机上执行。
(3)阻塞状态(Blocked)
正在执行的进程由于发生某事件(请求I/O、申请缓冲、时间片到)而暂时无法执行时,便放弃CPU后暂停
在这里插入图片描述
3.进程控制块PCB
存放进程的管理和控制信息的数据结构称为进程控制块。
(1)OS对进程进行控制和管理围绕PCB进行
分析OS调度某进程的过程
查该进程的PCB,获取其状态、优先级
根据PCB保存的处理机状态信息,恢复现场
根据PCB中程序和数据的内存始址,找到其程序和数据
执行中的同步信号等也要查阅PCB,暂停时进程执行的处理机环境保存回PCB。
(2)PCB的重要性
进程控制块是进程存在的唯一标志:
进程创建时,PCB建立并伴随进程运行的全过程,直到进程撤消而撤消。PCB就象我们的户口。
进程管理和控制的最重要的数据结构
(3)PCB内部信息
①进程标识符信息:内部标识符(方便系统使用)and外部标识符(方便用户使用)
②处理机状态信息——主要由处理机的各种寄存器组成,被中断时这些信息要存放在PCB
通用寄存器:用户程序访问的,暂存信息
指令计数器:下一条指令地址
程序状态字PSW:一些状态信息
用户栈指针:每个用户进程都有的存放过程和系统调用参数及调用地址的一组系统栈。
③进程调度信息:进程状态、进程优先级以及进程调度所需的其他信息(调度算法相关信息)、状态转换有关的事件
④进程控制信息:程序和数据的地址(单个进程,数据所在的内外存地址)、进程同步和通信机制(多进程间,同步和通信机制的信号量、消息队列指针等)、资源清单、链接指针(PCB的组织,本PCB所在队列的下一个进程PCB首地址)
(4)PCB信息的存放:系统运行中有若干个程序的PCB,他们常驻内存的PCB区
采用的数据结构:PCB结构体、PCB链表或队列
(5)PCB的组织方式:
①链接方式:同一状态的PCB,依靠链接指针链接成队列。就绪队列;若干个阻塞队列;空白队列(PCB区的空PCB块)
在这里插入图片描述
②索引方式:同状态的PCB同样集中记录,但以索引表的方式记录PCB的地址。用专门的单元记录各索引表的首地址。
在这里插入图片描述
二、进程控制
1、进程的创建:
(1)引起进程创建的事件
①用户登录:分时情况下用户的请求
②作业调度:批处理中
③提供服务:运行中的用户程序提出功能请求,要创建服务进程(如打印服务)
④应用请求:应用程序自己创建进程,完成特定功能的新进程。(木马程序)
(2)进程创建过程
①申请空白PCB
② 为新进程分配资——主要是内存资源的处理
③ 初始化进程控制——标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
④ 将新进程插入就绪
2.进程的终止
(1)引起进程终止的事件
①正常结束
②异常结束
内存越界错误
保护错(权限错,如修改只读文件等)
非法指令(不存在的指令,程序异常转向而把数据当指令)
特权指令错(用户态程序试图执行只有OS可执行的指令)
运行超时、运算错、i/o故障等
③外界干预
操作员或操作系统干预(死锁时,可人为结束)
父进程请求终止子进程
父进程终止,子孙进程也跟着终止
(2)进程的终止过程
对上述事件,OS调用内核终止原语,执行下列过程:
①根据进程标示符,检索出该进程PCB,读其状态。
*IF 执行态,立即终止该进程,置调度标志为真,指示重新进行调度。
*IF 有子孙进程,亦应予以终止,以防成为不可控进程。
② 归还全部资源至其父进程或系统。
③ 将该进程PCB从所在队列或链表中移出。
3、进程的阻塞与唤醒
(1)引起进程阻塞与唤醒的事件
①请求系统服务的满足情况
②启动某种需等待(I/O)操作
③合作需要的新数据尚未到达
④执行某功能的进程暂时无新工作可做(如发送数据进程)
(2)进程阻塞过程
进程调用阻塞原语block将自己阻塞。可见,阻塞是进程自身的一种主动行为。
①将PCB中的状态改为阻塞
②该PCB加入到阻塞队列中
③转进程调度,将处理机分配给另一进程
④进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。
(3)阻塞与唤醒原语作用相反,成对使用
阻塞进程等待的事件发生时,有关进程(如放弃该资源的进程)调用唤醒原语把等待该事件的进程唤醒。
①把阻塞进程从等待该事件的阻塞队列中移出
②将其PCB中的现行状态改为就绪
③将PCB插入到就绪队列中。
三、信号量机制
1、整型信号量
(1)信号量定义为一个整型量;
根据初始情况赋相应的值;
仅能通过两个原子操作来访问。
(2)P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;
2、记录型信号量
(1)不仅要有值的处理,还有队列的处理。
此时形成记录型数据结构,包括两部分:
整型变量value(代表资源数目)
进程链表L(链接所有等待进程):
代码描述:
type Semaphore=record
value:integer;
L:list of PCB;
end;
操作:S.Value,S.L
(2)P、V操作
P操作wait():
S.value = S.value - 1;
if S.value < 0 then block(S,L)
V操作signal():
S.value = S.value + 1;
if S.value <= 0 then wakeup(S,L)
3、AND型信号量
出现原因:一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。
在这里插入图片描述
解决思想:
一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。
在这里插入图片描述
4、信号量集
引入原因:
每次只能获得或释放一个单位的资源,低效;
某些时候资源分配有下限的限制;
修改:在大于可分配设置的下界值t前提下,每次可分配d个。
在这里插入图片描述
四、经典进程同步问题
1、生产者、消费者问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 哲学家进餐问题
1)记录型信号量解决哲学家进餐问题
在这里插入图片描述
(2)就餐死锁问题
① 数量控制:
至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。—限制并发执行的进程数
②一刀切:
仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。—采用AND信号量。
Var chopstick: array [0, …, 4] of semaphore:=(1, 1, 1, 1, 1);
Process i
repeat
think;
Swait(chopstick[ ( i +1) mod 5] , chopstick[ i ] );
eat;
Ssignal(chopstick[ ( i +1) mod 5] , chopstick[ i ] );
until false;
③IF编程控制
规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。保证总会有一个哲学家能同时获得两只筷子而进餐
if I mod 2=0

else

3、读者-写者问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
五、管程
1、管程的组成
一组局部变量
对局部变量操作的一组过程
对局部变量进行初始化的语句。
( 联想面向对象中的类)
语法:名为monitor_name的管程
Type monitor_name= monitor
variable declarations;
procedure entry P1(){…}
procedure entry P2(){…}
procedure entry Pn(){…}
initialization code;
2、管程特点
任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据;
就如同使用临界资源,就要先通过其信号量的申请。
任何时刻,仅允许一个进程在管程中执行某个内部过程。
3、条件变量
(主要作用就是进程同步的阻塞和唤醒控制)
局部于管程的变量有两种:
普通变量
条件变量(用于控制进程阻塞和唤醒)
类似信号量变量,但不取具体值;相当于每个阻塞队列的队列指针。
对条件变量的操作需结合对普通变量的条件判断,从而控制进程状态。
4、管程的优缺点
(1)优点:
保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程可以以函数库的形式实现。相比之下,管程比信号量好控制。
管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,使同步操作相对集中,从而增加了模块的相对独立性
引入管程可提高代码的可读性,便于修改和维护,正确性易于保证:采用集中式同步机制。一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰。
(2)缺点
大多数常用的编程语言中没有实现管程,如果某种语言本身不支持管程,那么加入管程是很困难的。
虽然大多数编程语言也没有实现信号量,但可将P、V操作作为一个独立的子例程或操作系统的管理程序调用加入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值