1进程的创建
(1) 申请空白PCB
(2) 为新进程分配资源 主要是内存资源的处理
(3) 初始化进程控制块 标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
(4) 将新进程插入就绪队列
2.进程的终止
正常结束
异常结束
内存越界错误
保护错(权限错,如修改只读文件等)
非法指令(不存在的指令,程序异常转向而把数据当指令)
特权指令错(用户态程序试图执行只有OS可执行的指令)
运行超时、运算错、i/o故障等
外界干预
操作员或操作系统干预(死锁时,可人为结束) 父进程请求终止子进程 父进程终止,子孙进程也跟着终止
3.进程的阻塞与唤醒
1)引起进程阻塞和唤醒的事件
请求系统服务的满足情况
启动某种需等待(I/O)操作
合作需要的新数据尚未到达
执行某功能的进程暂时无新工作可做(如发送数据进程)
2)阻塞和唤醒过程
由进程调用阻塞原语阻塞自己,是主动行为: (1)将PCB中的状态改为阻塞 (2)该PCB加入到阻塞队列中 (3)转进程调度,将处理机分配给另一进程 (4)进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。
4.进程的挂起与激活
关于调度
进程控制中,状态转换和调度密切相关。
运行态进程的改变必然产生调度行为
只要产生新就绪态进程,就需考虑调度策略
只要是采用抢占式调度,要检查新就绪进程是否可抢占CPU,引起新的调度
1.进程同步的基本概念
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
互斥:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,直到占用临界资源的进程退出临界区,我们称进程之间的这种相互制约关系为“互斥”。
同步:多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步关系。可理解为“有序”。
每个进程中访问临界资源的那段代码叫临界区。
进入区:对欲访问的临界资源进行检。若此刻未被访问,设正在访问的标志 临界区:访问临界资源的代码。 退出区:将正在访问的标志恢复为未被访问的标志 剩余区:其余部分
同步机制应遵循的规则
实现互斥的方法应符合如下每条原则
空闲让进:资源使用最基本原则
忙则等待:保证互斥
有限等待:合适时被唤醒防止死等
让权等待:能主动释放CPU防止忙等
信号量机制
1) 整型信号量
最初的信号量机制,两个原子操作对一个共享整型量进行操作。 信号量定义为一个整型量; 根据初始情况赋相应的值; 仅能通过两个原子操作来访问。
P操作 wait(S): While S<=0 do no-op;
S:=S-1; V操作 signal(S): S:=S+1;
2)记录型信号量
整型信号量符合“有限等待”原则
但整型信号量不符合“让权等待”原则
改进:条件不符时应能够主动放弃
新问题:放弃CPU的进程进入阻塞队列:因等待某信号量而放弃CPU的等待进程会有“若干”个,需将它们组织管理起来,并在合适的时候唤醒
信号量结构信息发生变化
不仅要有值的处理,还有队列的处理。
此时形成记录型数据结构,包括两部分:
整型变量value(代表资源数目) 进程链表L(链接所有等待进程):
代码描述: type Semaphore=record
value:integer;
L:list of PCB; end;
操作:S.Value,S.L
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)
定义信号量semaphore代表可用资源实体的数量。又叫信号灯。 当≥0,代表可供并发进程使用的资源实体数 当<0,表示正在等待使用该资源的进程数。 建立一个信号量必须经过说明,包括 信号量所代表的意义 赋初值 建立相应的数据结构,以便指向等待使用临界区的进程。 除初值外,信号量的值仅能由标准原子操作P、V操作来改变。 PV操作是荷兰语通过和释放的意思
互斥信号量注意点:互斥信号量mutex初值为1;
每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间 必须成对使用P和V原语(在同一进程中),不能次序错误、重复或遗漏:
遗漏P原语则不能保证互斥访问
遗漏V原语则不能在使用临界资源之后将其释放(给其他等待的进程)
前趋关系: 并发执行的进程P1和P2中,分别有代码C1和C2,要求C1要在C2开始前完成; 为每对前趋关系设置一个同步信号量S12,并赋初值为0。则只有V操作所在进程获得cpu时能运行
控制同步顺序的注意点
信号量值为0的点是限制的关键所在;
成对使用P和V原语(在有先后关系的两个进程中),不能次序错误、重复或遗漏,否则同步顺序出错。
信号量题目做题一般方法:
分析问题,找出同步、互斥关系
根据资源设置信号量变量
写出代码过程,并注意P、V操作的位置
检查代码,模拟机器运行,体验信号量的变化和程序运行过程是否正确。