课前问题
1.“无序”并发的运行特征:
答:间断性·失去封闭性·不可再现性
2.进程是什么?进程的三种基本状态是什么?运行中如何有序转换?
答:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
三种状态:就绪态·执行态·阻塞态。
由系统根据PCB中所记录的相关信息进行调度和资源分配。
3.PCB是什么?包含什么信息?系统如何组织所有PCB
PCB(进程控制块)用来存放进程的管理和控制信息的一个数据结构。
PCB中有进程标识符信息·处理机状态信息·进程调度信息·进程控制信息。
PCB的组织方式:链接方式·索引方式
笔记
进程的创建过程:
- 申请空白PCB
- 为新进程分配资源(主要是内存资源的处理)
- 初始化进程控制块(标识符、程序计数器指向程序入口地址,就绪态、优先级等信息的填写)
- 将新进程插入就绪队列。
原语
原语是由若干指令构成的原子操作过程,作为整体实现功能,不可被打断。
OS通过调用进程创建原语Creat()创建新进程,其他控制工作也都是由OS内核以“原语”的方式实现,以保证不被打断。
进程的阻塞与唤醒
引起进程阻塞和唤醒的事件:
- 请求系统服务的满足情况
- 启动某种需等待(I/O)操作
- 合作需要的新数据尚未到达
- 执行某功能的进程暂时无新工作可做(如发送数据进程)
!!!!!!!!!阻塞是进程自身的一种主动行为(由进程调用阻塞原语阻塞自己),阻塞与唤醒原语作用相反,成对使用
进程间的相互影响
两种制约关系:
- 间接相互制约关系:主要源于资源共享(互斥)
- 直接相互制约关系:主要源于进程合作(有序)
进程同步的主要任务:
使并发执行的各进程之间能有效的共享资源和相互合作,从而使程序具有可再现性。
!!临界资源:一次只允许一个进程使用的资源。
理解同步
**互斥:**在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,直到占用临界资源的进程退出临界区,这种相互制约关系称为互斥。
同步:多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步关系(可理解为有序)
**临界区:**每个进程中访问临界资源的那段代码(为了正确同步,对临界区的代码要增加控制)
!!!!进入和退出临界区的处理对实现互斥尤其重要
同步机制应遵循的规则
- 空闲让进:资源使用最近本原则
- 忙则等待:保证互斥
- 有限等待:合适时被唤醒,防止死等
- 让权等待:能主动释放CPU,防止忙等
控制同步的关键---- 不被打断的进行标志值的判断和修改
信号量机制
荷兰科学家Dijkstra(狄克斯特拉)提出的一种卓有成效的进程同步机制。
整形信号量(符合有限等待,但不符合让权等待)
信号量定义为一个整形量·根据初始情况赋相应的值·仅能通过两个原子操作来访问。P、V操作wait()、signal()。
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)
互斥信号量注意:
·互斥信号量mutex为1
·每个进程中将临界区代码置与p(mutex)和v(mutex)原语之间
·必须成对使用p、v原语(同一进程中),不能次序错误、重复或遗漏:
遗漏p原语则不能保证互斥访问
遗漏v原语则不能在临界资源之后将其释放(给其他等待进程)
实现有序
前趋关系:并发执行的进程p1、p2中,分别有代码c1和c2,要求c1要在c2开始前完成,设置一个同步信号量S,初值为0
P1 : C1 ;signal(S);
P2 : wait(S);C2 ;
**分析:**如果是p2先来,执行wait(s){s.value=s.value-1;if(s.value<0)then block(S,L)} 因为S初值为0执行wait后block,必须等到P1中signal释放S才能继续运行
信号量题目做题一般方法:
- 分析问题,找出同步互斥关系
- 根据资源设置信号量变量
- 写出代码过程,并注意P、V操作的位置
- 检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确