操作系统原理第四章(02)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
4.3 进程控制 4.3.1 进程控制的概念
New Admit Ready
Dispatch
Timeout
Running
Release
Exit
Event Occurs
ate
t en t Ev ai W
Cre
Blocked
五状态进程模型(状态变迁)
3
4.3 进程控制 4.3.1 进程控制的概念
Ready Queue Admit Dispatch Processor Release
4.5 进程互斥
4.5.3 锁和上锁、开锁操作 当进程使用某个临界资源之前必须完成下列操作: 1、考察锁位的值;(是否上锁) 2、若原来的值是为“0”(未上锁),将锁位置为“1”(上 锁),并进入临界区; 3、若原来值是为“1”(已上锁),则转到1。 当进程使用完资源后,将锁位置为“0”(开锁)。 在考察锁位的值和上锁操作之间,锁位不得被其他进程 所改变,通过原语来实现。 若不通过原语实现,会有什么问题?
28
4.5 进程互斥
4.5.1 互斥的概念 3.互斥 当某一进程正在访问某临界区时,就不允许其它进 程进入,否则就会发生无法估计的错误。 进程之间的这种相互制约关系称为互斥。 例如:飞机定票系统中的机票库
29
4.5 进程互斥
4.5.2 进程互斥的软件实现 算法1:单标志
while (turn != i);
34
4.5 进程互斥
4.5.2 进程互斥的软件实现
算法3:双标志、后检查
flag[i] = TRUE; while (flag[j]); critical section flag[i] = FALSE; remainder section <b> <a>
缺点: Pi和Pj可能都进入不了临界区。 按下面序列执行时,会都进不了临界区:“Pi<b> Pj<b> Pi<a> Pj<a>”。 原因:在切换自己flag之后和检查对方flag之前有一段时间 ,结果都切换flag,都检查不通过。 35
16
4.3 进程控制
4.3.4 进程挂起
进程挂起的内部调用形式(UNIX系统): sleep(chan,pri) 其中: chan 进程挂起(睡眠)的原因; pri 进程被唤醒后的优先级
一般调用形式: susp(chan) 其中:chan 进程等待的原因
17
4.3 进程控制
4.3.4 进程挂起
算法 susp 输入:chan 等待的原因 { 保护现行进程的CPU现场到pcb结构中; 置该进程为“等待”态; 输出:无
37
4.5 进程互斥 4.5.3 锁和上锁、开锁操作 上锁原语 算法lock 输入:锁变量w 输出:无 { test: if (w == 1) goto test; /*测试锁的值*/ else w = 1; /*上锁*/ }
38
4.5 进程互斥 4.5.3 锁和上锁、开锁操作 开锁原语 算法unlock 输入:锁变量w 输出:无 { w = 0; }
/*开锁*/
39
4.5 进程互斥
4.5.3 锁和上锁、开锁操作 上述算法的缺点: lock原语中的goto语句:忙等待。
40
4.5 进程互斥
4.5.3 锁和上锁、开锁操作 改进的算法
算法lock1 输入:锁变量w 输出:无 { while (w == 1) { 保护现行进程的CPU现场; 现行进程入w的等待队列; 置该进程为“等待”状态; 转进程调度程序; } w = 1; /*上锁*/ }
4.3 进程控制
4.3.2 进程创建
12
4.3 进程控制
4.3.3 进程撤消
进程完成其任务,希望终止时,调用进程撤消原语 来撤消进程。
相当于一个人死亡后,家人要去派出所消户口。
在一般操作系统中进程撤消的系统调用是:kill UNIX系统中是exit()。
13
4.3 进程控制
4.3.3 进程撤消
33
4.5 进程互斥
4.5.2 进程互斥的软件实现
算法3:双标志、后检查
flag[i] = TRUE; while (flag[j]); critical section flag[i] = FALSE; remainder section <b> <a>
类似于算法2,与互斥算法2的区别在于先修改后检查。可 防止两个进程同时进入临界区。
5
4.3 进程控制 4.3.1 进程控制的概念 进程控制功能由各种原语操作来实现。 原语 –一种特殊的系统调用命令,它可以完成一个特定的功 能。 –原语执行时不可中断,即:具有原子性。
6
4.3 进程控制 4.3.1 进程控制的概念 在UNIX系统中进程控制的系统调用: fork() sleep() exit() wait() 创建子进程 进程睡眠 进程自已终止(自杀) (父)等待子进程终止
引例中的电话和打印机都属于临界资源。除此之 外,还有内存变量、指针、数组等等也是临界资源。
26
4.5 进程互斥
4.5.1 互斥的概念 2、临界区: 每个进程中访问临 界资源的那段程序段称为 临界区。 例:右图中,Q为 临界资源;AB段、CD段 和EF段为临界区。
27
4.5 进程互斥
4.5.1 互斥的概念 进入临界区的准则: • 有空让进 当无进程在临界区时,任何有权使用临界区的进程可 进入 • 无空等待 不允许两个以上的进程同时进入临界区 • 有限等待 任何进入临界区的要求应在有限的时间内得到满足
将该进程pcb插入到等chan的等待队列;
转进程调度程序; }
18
4.3 进程控制
4.3.4 进程挂起
19
4.3 进程控制
4.3.5 进程唤醒
一个正在运行的进程会因等待某事件(例如,等 待打印机)的发生,由运行状态转换成阻塞状态,当 它等待的事件发生后,这个进程将由阻塞状态转换成 就绪状态。这种转换由进程唤醒操作完成。 调用进程唤醒操作一般在中断处理、进程通信等 过程中。例如,打印机完成中断处理程序,在完成了 打印完成的操作后,就去检查等待打印机的队列,若 不为空,则调用进程唤醒操作,唤醒一个(或多个) 等待打印机的进程。
Time-out
Event 1 Occurs Event 1 Queue Event 2 Occurs Event 2 Queue
Event 1 Wait
Event 2 Wait
五状态进程模型(多队列结构)
4
4.3 进程控制 4.3.1 进程控制的概念 进程控制包括: –进程创建 –进程撤消 –进程阻塞 –进程唤醒 这些功能由各种原语操作来实现。 原语:一种特殊的系统调用命令,它可以完成一个 特定的功能。特点:原语执行时不可中断,即:具有原 子性。
有两个进程Pi, Pj,其中的Pi:
critical section turn = j; remainder section
设立一个公用整型变量 turn:描述允许进入临界区的进程标 识 – 在进入区循环检查是否允许本进程进入:turn为i时,进 程Pi可进入; – 在退出区修改允许进入进程标识:进程Pi退出时,改 turn为进程Pj的标识j。 30
产生相互制约关系的原因: • • 资源共享 进程合作
24
4.5 进程互斥
4.5.1 互斥的概念 引例: 宿舍电话的使用 打印机的使用 特点: 资源的使用过程: – 申请资源; – 使用资源(独占); – 释放资源。
25
4.5 进程互斥
4.5.1 互斥的概念 1. 临界资源 一次仅允许一个进程使用的资源称为临界资源。
20
4.3 进程控制
4.3.5 进程唤醒
进程唤醒原语的形式: wakeup(chan) 其中:chan 唤醒进程阻塞的原因。
21
4.3 进程控制 4.3.5 进程唤醒
算法:wakeup 输入:chan:等待的事件(阻塞原因) 输出:无 { 保护现行进程的CPU现场到pcb结构中; 置该进程为“就绪”态; 将该进程入就绪队列; 找到chan的等待队列的指针; for(该队列上每一个等待进程) { 将该进程移出此等待队列; 置进程状态为“就绪”态; 将进程入就绪队列; } 转进程调度程序; }
wakeup()
进程唤醒
Hale Waihona Puke Baidu
在4.10节介绍。
7
4.3 进程控制 4.3.1 进程控制的概念 Unix进程状态变迁图
8
4.3 进程控制
4.3.2 进程创建
在 UNIX 系 统 中 用 户 键 入 一 个 命 令 ( 如 date, ps,ls),shell就创建一个进程。 一个程序如果可分成几个程序段,并且这些程序 段可并发执行,用户程序可使用创建程序的系统调用 创建多个进程,每个进程执行一个程序段。 进程创建类似于人出生后要到派出所报户口。
4.5 进程互斥
4.5.2 进程互斥的软件实现
算法4:先修改、后检查、后修改者等待
flag[i] = TRUE; turn = j; while (flag[j] && turn == j); critical section flag[i] = FALSE; remainder section
结合算法1和算法3,是正确的算法 turn=j;描述可进入的进程(同时修改标志时) 在进入区先修改后检查,并检查并发修改的先后: – 检查对方flag,如果不在临界区则自己进入--空闲则入 – 否则再检查turn:保存的是较晚的一次赋值,则较晚的进 36 程等待,较早的进程进入--先到先入,后到等待
22
4.3 进程控制 4.3.5 进程唤醒
• 按此算法,是把等待在chan事件上的所有进程唤醒, 类似于UNIX系统的处理方式。 • 也有的系统只唤醒一个等待chan事件的进程:等待队 列就要按某种优先级排队。 • 进程唤醒操作会引起就绪队列和等待chan事件的等待 队列发生变化。
23
4.4进程的相互制约关系
算法 kill 输入:无 { 由运行指针得当前进程的pid; 释放本进程所占用的资源给父进程; 输出:无
该进程从总链队列中摘除;
释放此pcb结构; 转进程调度程序; }
14
4.3 进程控制
4.3.3 进程撤消
15
4.3 进程控制
4.3.4 进程挂起
当一个处在运行状态的进程,因等待某个事件的 发生(如等待打印机)而不能继续运行时,将调用进 程挂起系统调用,把进程的状态置为阻塞状态,并调 用进程调度程序(等于让出处理机)。 调用进程挂起操作是在进程处于运行状态下执行 的。它将引起等待某事件的队列的改变。
9
4.3 进程控制
4.3.2 进程创建
进程创建原语: create(name,priority,start_addr) 其中: name: 进程标识符; priority: 进程优先级; start_addr: 程序开始地址。
UNIX系统: fork()
10
4.3 进程控制
4.3.2 进程创建
11
第四章 并发处理
1
4.3 进程控制 4.3.1 进程控制的概念
进程有生命周期:产生、运行、暂停、终止。对进 程的这些操作叫进程控制。 进程控制的职责是对系统中全部进程实施有效的管 理,它是处理机管理的部分(另一部分是进程调度), 当系统允许多进程并发执行时,为了实现共享、协调并 发进程的关系,处理机管理必须提供对进程实行有效的 管理。
4.5 进程互斥
4.5.2 进程互斥的软件实现 算法1:单标志 缺点: 强制轮流进入临界区,没有考虑进程的实际需要。 容易造成资源利用不充分:在Pi出让临界区之后,Pj 使用临界区之前,Pi不可能再次使用临界区。
31
4.5 进程互斥
4.5.2 进程互斥的软件实现
算法2:双标志、先检查
while (flag[j]); flag[i] = TRUE; critical section flag[i] = FALSE; remainder section <a> <b>
设立一个标志数组flag[]:描述进程是否在临界区,初值均为 FALSE。 – 先检查,后修改:在进入区检查另一个进程是否在临界 区,不在时修改本进程在临界区的标志,然后进入; – 在退出区修改本进程在临界区的标志。
32
4.5 进程互斥
4.5.2 进程互斥的软件实现
算法2:双标志、先检查 while (flag[j]); <a> flag[i] = TRUE; <b> 优点: critical section 不用交替进入,可连续使用。 flag[i] = FALSE; 缺点: remainder section Pi和Pj可能同时进入临界区。 按 下 面 序 列 执 行 时 , 会 同 时 进 入 : “ Pi<a> Pj<a> Pi<b> Pj<b>”。 原因:在检查对方flag之后和切换自己flag之前有一段 时间,结果都检查通过。