




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 进程管理第二章 进程管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程第二章 进程管理v目的及要求领会程序顺序执行和并发执行的特征;掌握进程的概念和特征、进程的基本状态及转换理解进程控制块PCB的作用、包含信息和组织方式;2.1 进程的基本概念2.1.1 程序的顺序执行及其特征1.程序的顺序执行 一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行。2.1 进程的基本概念例:讨论单道系统的工作情况 对用户作业的处理 首先输入用户的程序和数据 Input 然后进行计算 Cacula
2、te 最后打印计算结果 Print 即有三个顺序执行的操作 I:输入操作 C:计算操作 P:输出操作P2C2 I2P1C1 I12.1 进程的基本概念2. 程序顺序执行时的特征(1) 顺序性 处理机的操作严格按照程序所规定的顺序执行。(2) 封闭性 程序一旦开始执行,其计算结果不受外界因素的影响。(3) 可再现性 程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关。2.1 进程的基本概念2.1.2 前趋图 前趋图是一个有向无循环图(DAG),用于描述进程之间执行的前后关系结点:描述一个程序段或进程,或一条语句 有向边:结点之间的偏序或前序关系“” =(Pi,Pj) Pi mu
3、st complete before Pj may start 若(Pi,Pj),记为PiPj,则 Pi是Pj的直接前趋,Pj是Pi的直接后继2.1 进程的基本概念P2P6P5P1P4P3P7P8P9前趋关系:P1P2, P1P3, P1P4, P2P5, P3P5, P4P6, P4P7, P5P8, P6P8, P7P9, P8P9或 P=P1, P2, P3, P4, P5, P6, P7, P8, P9=(P1,P2),( P1,P3),( P1,P4),( P2,P5),( P3,P5),( P4,P6),(P4,P7),( P5,P8),( P6,P8),( P7,P9),( P8
4、,P9)名词:初始结点; 终止结点; 重量2.1 进程的基本概念注意:前趋图中禁止存在循环前趋关系:S2S3, S3S2,不可能满足S3S2S12.1 进程的基本概念2.1.3 程序的并发执行及其特征1. 程序的并发执行 例: 在系统中有n个作业,每个作业都有三个处理步骤,输入数据、处理、输出,即Ii,Ci,Pi (i=1,2,3,.,n)。2.1.3 程序的并发执行及其特征 I2 I3C3C2P1P2C1P3 I1 I4C4P4例如:I1、C1、P1的执行必须严格按照I1,C1,P1的顺序;而C1与I2,P1与C2、I3是可以同时执行的。S3S2S1S42. 程序并发执行时的特征(1)间断性
5、 在多道程序设计的环境下,程序的并发执行,以及为完成一项任务而相互合作,这些程序之间要共享系统的资源,形成了相互制约的关系。 相互制约导致并发程序具有“执行暂停执行”这种间断性的活动规律。2.1.2 程序的并发执行及其特征(1)间断性(2)失去封闭性 程序在并发执行时,系统的资源状态由多道程序来改变,程序运行失去封闭性。一程序的运行受到其他程序的影响。(3)不可再现性 程序在并发执行时,多次运行初始条件相同的同一程序会得出不同的运行结果。 例:共享公共变量的两个程序,它们执行时可能产生不同结果程序顺序执行时的特征(1) 顺序性(2) 封闭性(3) 可再现性2.1.3 程序的并发执行及其特征并发
6、程序失去可再现性的例子n:=0例:讨论共享公共变量的两个程序, 它们执行时可能产生的不同结果。 程序A n := n+1; 程序B n := 0; 2.1 进程的基本概念2.1.4 进程的特征与状态1. 进程的特征和定义 在多道程序设计的环境下,为了描述程序在计算机系统内的执行情况,必须引入新的概念-进程。1)进程的定义进程:程序关于某个数据集合的一次执行过程。2.1 进程的基本概念行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程(Dijkstra)。进程是这样的计算部分,它是可以和其它计算并行的一个计算。(Donovan)进程(有时称为任务)是一个程序与其数据一道通过处理机的
7、执行所发生的活动。(Alan.C. Shaw)进程是执行中的程序。(Ken Thompson and Dennis Ritchie ) 进程的其它定义 2)进程的特征(与程序比较)(1) 结构特征 进程控制块(PCB) + 程序 + 数据 = 进程实体(2) 动态性-最基本特征 进程:进程实体的一次执行过程,有生命周期 程序:程序是一组有序指令的集合,是静态的概念。(3) 并发性(4) 独立性(5) 异步性 进程按各自独立的、不可预知的速度向前推进1. 进程的特征和定义2. 进程的三种基本状态(1)就绪状态(Ready) 进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运
8、行。(2)运行状态(Running) 进程已获得运行所必需的资源,它的程序正在处理机上执行。 (3)阻塞状态(Blocked) 正在执行的进程由于发生某事件而暂时无法执行时,便放弃处理机而处于暂停状态,称该进程处于阻塞状态或等待状态。就绪队列与阻塞队列2.1.4 进程的特征与状态I/O请求进程的三种基本状态以及各状态之间的转换2.1.4 进程的特征与状态3. 挂起状态1) 引起挂起状态的原因: 终端用户的请求 父进程请求 负荷调节的需要 操作系统的需要2) 进程状态的转换 引入挂起状态后,增加了挂起状态(静止状态)到非挂起状态(活动状态)的转换,或者相反。2.1.4 进程的特征与状态1.活动就
9、绪静止就绪2.活动阻塞静止阻塞3.静止就绪活动就绪4.静止阻塞活动阻塞2.1.4 进程的特征与状态readyareadysblockedablockeds2.1 进程的基本概念2.1.5 进程控制块(PCB) 1. 进程控制块的作用 2. 进程控制块中的信息 3. 进程控制块的组织方式2.1 进程的基本概念2.1.5 进程控制块(PCB)1. 进程控制块的作用 存放进程管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,在创建时,建立PCB,并伴随进程运行的全过程,直到进程撤消而撤消。PCB就象我们的户口。 PCB是进程存在的唯一标志。 系统的所有PCB组织成链表或队
10、列,常驻内存的PCB区。2.1.5 进程控制块(PCB)2. 进程控制块中的信息1) 进程标示符 每个进程都必须有一个唯一的标识符内部标示符外部标示符2) 处理机状态 处理机状态信息主要由处理机的各种寄存器中的内容组成。处理机运行时的信息存放在寄存器中,当被中断时这些信息要存放在PCB中。2.1.5 进程控制块(PCB)3) 进程调度信息进程状态进程优先级进程调度所需的其他信息事件4) 进程控制信息程序和数据的地址进程通信和同步机制资源清单链接指针2.1.5 进程控制块(PCB)3.进程控制块的组织方式1) 链接方式 把具有同一状态的PCB用其中的链接字链接成一个队列。 就绪队列; 若干个阻塞
11、队列; 1 PCB9 0 PCB8 9 PCB7 7 PCB6 PCB5 8 PCB4 0 PCB3 3 PCB2 4 PCB1就绪队列指针就绪队列指针阻塞队列指针阻塞队列指针空闲队列指针空闲队列指针执行指针执行指针PCB的链接组织方式:的链接组织方式:2.1.5 进程控制块(PCB)3.进程控制块的组织方式2) 索引方式系统根据所有进程的状态建立几张索引表,把各表的内存首地址记录在内存的专用单元中。索引表的表目中记录了相应状态的某个PCB在PCB表中的地址。PCB7PCB6PCB5PCB4PCB3PCB2PCB1执行指针执行指针就绪表指针就绪表指针阻塞表指针阻塞表指针就绪索引表就绪索引表阻塞
12、索引表阻塞索引表第二章 进程管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 管程机制2.6 进程通信2.7 线程2.2 进程控制 对系统中的全部进程实施有效的管理,包括进程创建、终止、进程阻塞和唤醒。 2.2.1进程的创建 1.进程图 描述进程的家族关系的有向树ABDKEFLMJIHGC进程的创建过程:申请空白PCB 为新进程分配资源初始化进程控制块 将新进程插入就绪队列2.进程的创建操作系统发现要求创建新进程的事件后,调用进程创建原语Creat()创建新进程。1.引起进程终止的事件 1)正常结束 2)异常结束 越界错误、非法指令 等 3)外界干预
13、操作员或操作系统干预; 父进程请求; 父进程终止2.2.2 进程的终止2.进程的终止过程2.2.2 进程的终止找出被终止进程的PCB 若进程状态为运行态,置CPU调度标志为真若其有子孙进程,终止其子孙进程并回收其资源回收终止进程的资源 回收终止进程的PCB1.引起进程阻塞和唤醒的事件 1)请求系统服务 2)启动某种操作 3)新数据尚未到达 4)无新工作可做2.进程阻塞过程2.2.3 进程的阻塞与唤醒调用阻塞原语阻塞自己; 将PCB中的状态改为阻塞,并加入阻塞队列; 转进程调度。3.进程唤醒过程 把阻塞进程从等待该事件的阻塞队列中移出; 置进程状态为就绪态,将PCB插入到就绪队列中。 阻塞原语与
14、唤醒原语作用相反,成对使用阻塞进程等待的事件发生,有关进程调用唤醒原语 wakeup()唤醒等待该事件的进程2.2.4 进程的挂起与激活1.进程的挂起过程 检查被挂起进程的状态: 若处于活动就绪,则改为静止就绪; 若处于活动阻塞,则改为静止阻塞; 若挂起的进程正在执行,则重新进行进程调度。当出现引起进程挂起的事件时,系统利用挂起原语suspend()将指定进程或处于阻塞的进程挂起。2.2.4 进程的挂起与激活2.进程的激活过程 1) 激活原语先将进程从外存调入内存; 2) 检查该进程的状态: 若为静止就绪,则改为活动就绪; 若为静止阻塞,则改为活动阻塞。当发生激活进程的事件时,系统利用激活原语
15、active()将指定进程激活。作业课本 P.812、3、5、6第二章 进程管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程第二章 进程管理v目的及要求理解临界资源和临界区的概念;熟练掌握利用信号量机制解决进程同步问题;2.3 进程同步v2.3.1 进程的同步基本概念v2.3.2 信号量机制v2.3.3 信号量的应用对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。进程同步的主要任务:2.3.1 进程同步的基本概念1.进程间两种形式的制约关系(1) 间接相互制约关系
16、 - 源于资源共享(2) 直接相互制约关系 - 源于进程合作v临界资源(Critical Resource):把一段时间内只允许一个进程访问的资源称为临界资源或独占资源v临界区(Critical Section):每个进程中访问临界资源的那段代码称为临界区2. 临界资源2. 临界资源 生产者消费者问题:2.3.1 进程同步的基本概念能存n个数据的BufferP1P2PlC1C2Cm生产者进程消费者进程生产者进程和消费者进程都以异步方式运行,但它们之间必须保持同步。2.3 进程同步用数组表示用数组表示具有具有n个缓冲个缓冲区的缓冲池区的缓冲池注意:缓冲池组织为循环缓冲,输入指针加1表示为in:=
17、(in+1)mod n,输出指针加1表示为out:=(out+1)mod n,当(in+1)mod n=out时表示缓冲池满,in=out表示缓冲池空。Producer: repeat produce an item in nextp while counter= n do no-op bufferin:=nextp in:=in+1 mod n counter:=counter+1 until falseConsumer: repeat while counter= 0 do no-op nextc:=bufferout out:=out+1 mod n counter:=counter-1
18、 consumer the item in nextc until false空操作指令空操作指令重复的测重复的测试条件试条件并发操作时会出错生产者消费者问题:2.3 进程同步进程同步register1:=counterregister1:=register1+1counter:=register1register2:=counterregister2:=register2-1counter:=register2register1:=counter 1register1:=register1+1 1register2:=counter 2 register2:=register2-1 2cou
19、nter:=register1 counter:=register2 临界区:进程中访问临界资源的那段代码访问临界区的程序设计为:对欲访问的临界资源进行检查,若此刻未被访问,设正在访问的标志 进入区访问临界资源 临界区将正在访问的标志恢复为未被访问的标志 退出区其余部分 剩余区2.3.1进程同步的基本概念进程互斥:两进程不能同时进入同一临界区Repeat entry section critical section exit section remainder sectionuntil falsev4.同步机制应遵循的规则空闲让进忙则等待有限等待让权等待2.3 进程同步v2.3.1 进程同步的
20、基本概念v2.3.2 信号量机制v2.3.3 信号量的应用v1965年荷兰Dijkstra提出的信号量(Semaphores)是一种卓有成效的进程同步工具,在长期的应用中,得到了很大的发展,从整型信号量经过记录型信号量,进而发展为“信号量集”机制。v信号量就是OS提供的管理公有资源的有效手段。 v信号量代表可用资源实体的数量。2.3.2 信号量机制2.3.2 信号量机制1. 整型信号量定义:把整型信号量定义为一个用于表示资源数目的整型量S,除初始化外,仅能通过两个原子操作wait(S),signal(S)来访问。P操作 wait(S): While S=0 do no-op; S:=S-1;V
21、操作 signal(S): S:=S+1;P、V操作是原子操作,不可中断。未遵循“让权等待”原则,导致忙等2.3 进程同步2. 记录型信号量引入整型变量value(代表资源数目)、进程链表L (链接所有等待进程)记录型数据结构: type semaphore=record value: integer; L: list of process; end; Wait 操作: -申请资源,减量操作,S.value:=S.value-1 -当S.value0时,表示资源分配完,进行自我阻塞。Signal操作: -释放资源,增量操作,S.value:=S.value+1 -当S.value0,唤醒S.L
22、链表中的等待进程。2.3 进程同步wait(S) begin S.value:=S.value-1 if S.value0 then block(S L) endsignal(S) begin S.value:=S.value+1; if S.value0,代表可用资源的数量 value1时)或互斥信号量(S=1时)。 Swait(S, 1, 0),当S=1时,允许多个进程进入某特定区,当S变为0后,阻止任何进程进入特定区,相当于可控开关。2.3 进程同步v2.3.1 进程同步的基本概念v2.3.2 信号量机制v2.3.3 信号量的应用2.3.3 信号量的应用1.利用信号量实现进程互斥(模式)
23、为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间即可。Var mutex: semaphore :=1; begin parbegin process 1: begin repeat wait(mutex); critical section signal(mutex); remainder section until false; end process 2: begin repeat wait(mutex); critical section signal(m
24、utex); remainder section until false; end parendwait(mutex)和signal(mutex)必须成对出现用信号量机制实现互斥的模式Var mutex: semaphore :=1; /表示打印机 begin parbegin p1: begin repeat wait(mutex); 使用打印机 signal(mutex); until false; end p2: begin repeat wait(mutex); 使用打印机 signal(mutex); until false; end parend 例:用记录型信号量实现两个 进程互
25、斥使用一台打印机练习:用记录型信号量实现 三个进程互斥使用一 台打印机p3: begin repeat wait(mutex); 使用打印机 signal(mutex); until false; end2.3 进程同步2.利用信号量实现前驱关系(模式)设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2。使进程P1和P2共享一个公用信号量S,并赋予其初值为0。进程P1: S1; signal(S);进程P2: wait(S); S2;S1S2S1S2S3S4S5S6Var a, b, c, d, e, f, g; semaphore :=0, 0,
26、 0, 0, 0, 0, 0; begin parbegin begin S1; signal(a); signal(b); end; begin wait(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end; begin wait(d); S5; signal(g); end; begin wait(e); wait(f); wait(g); S6; end; parend end第二章 进程管理2.1 进程的基本概念2.2 进程控制2.
27、3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程第二章 进程管理v目的及要求理解经典进程同步问题掌握进程的通信机制2.4 经典进程的同步问题2.4.1 生产者-消费者问题2.4.2 哲学家进餐问题2.4.3 读者-写者问题能存n个数据的BufferP1P2PsC1C2Cm生产者进程消费者进程生产者进程和消费者进程都以异步方式运行,但它们之间必须保持同步。2.4.1 生产者-消费者问题v1. 利用记录型信号量解决生产者-消费者问题可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲池和满缓冲池的数量。能存能存n个数据的个数
28、据的BufferP1P2PlC1C2CmVar mutex, empty, full: semaphore :=1, n, 0; buffer: array 0, , n-1 of item; in, out: integer :=0, 0;begin parbegin producer : begin repeat 生产一个产品放入nextp; wait(empty); wait(mutex); buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); signal(full); until false; endconsumer : begin
29、repeat wait(full); wait(mutex); nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty); 消费 nextc中的产品; until false; endparendendmutex:生产者间,消费者 间互斥使用缓冲区empty: 缓冲区的空闲容量full: 缓冲区的已占容量注意:每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现。对资源信号量empty和full的wait和signal操作,同样需要成对地出现,但处于不同的程序中。在每个程序中的多
30、个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,再执行对互斥信号量的wait操作,否则可能引起进程死锁。2. 利用AND信号量解决生产者-消费者问题2.4.1 生产者-消费者问题能存能存n个数据的个数据的BufferP1P2PlC1C2Cm2.4 经典进程的同步问题经典进程的同步问题2. 利用利用AND信号量解决生产者信号量解决生产者消费者问题消费者问题Var mutex, empty, full: semaphore :=1, n, 0; buffer: array 0, , n-1 of item; in, out: integer :=0, 0;begin parbegi
31、n producer : begin repeat nextp; Swait(empty, mutex); buffer(in):=nextp; in:=(in+1) mod n; Ssignal(mutex, full); until false; end parendend consumer : begin repeat Swait(full, mutex); nextc:=buffer(out); out:=(out+1) mod n; Ssignal(mutex, empty); nextc; until false; end mutex:生产者间,消费者 间互斥使用缓冲区empty:
32、 缓冲区的空闲容量full: 缓冲区的已占容量用AND型信号量解决生产者消费者问题2.4.2 哲学家进餐问题五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五只碗和五支筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。可见:相邻两位不能同时进餐; 最多只能有两人同时进餐。43012c3c2c1c0c41.利用记录型信号量解决哲学家进餐问题 2.4.2 哲学家进餐问题放在桌子上的筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信号量表示一
33、只筷子,五个信号量构成信号量数组。 Var chopstick: array 0, , 4 of semaphore:=1;所有信号量均被初始化为1。43012c3c2c1c0c42.4.2 哲学家进餐问题40321Var chopstick: array 0, , 4 of semaphore:=1;第i 位哲学家的活动可描述为: repeat wait(chopstick i ); wait(chopstick ( i +1) mod 5 ); eat; signal(chopstick i ); signal(chopstick(i +1)mod 5); think; until fal
34、se;算法虽能保证相邻两位不会同时进餐,但有可能引起死锁。假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0,当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限等待。解决方法:至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。43012c3c2c1c0c4Var chopstick: array 0, , 4 of semaphore:=
35、1;Var count: semaphore :=4;v repeatv wait(count);v wait(chopstick i );v wait(chopstick ( i +1) mod 5 );v v eat;v v signal(chopstick i );v signal(chopstick(i +1)mod 5);v signal(count);v v think;v until false;Var chopstick: array 0, , 4 of semaphore:=1;Var count:=4;v repeatv if i mod 2=1 thenv beginv
36、wait(chopstick i );v wait(chopstick ( i +1) mod 5 )v endv elsev beginv wait(chopstick ( i +1) mod 5 );v wait(chopstick i )v endv eat;v signal(chopstick i );v signal(chopstick(i +1)mod 5);v v think;v until false;43012c3c2c1c0c42.利用AND信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐。本质上是AND同步问题。Var c
37、hopstick: array 0, , 4 of semaphore:=(1, 1, 1, 1, 1);Philosopher i repeat think; Swait(chopstick(i+1)mod 5,chopsticki ); eat; Ssignal(chopstick(i+1)mod 5, chopsticki ); until false;2.4.2 哲学家进餐问题表示chopsticki可用43012c3c2c1c0c42.4.3 读者-写者问题一个数据文件或记录可被多个进程共享。只要求读文件的进程称为“Reader进程”,其它进程则称为“Writer进程”。允许多个进程
38、同时读一个共享对象,但不允许一个Writer进程和其他Reader进程或Writer进程同时访问共享对象 “读者-写者问题”是保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。读、读共享; 写、写互斥; 写、读互斥1.利用记录型信号量解决读者-写者问题互斥信号量wmutex: 实现Reader与Writer进程间在读或写时的互斥,整型变量Readcount: 表示正在读的进程数目;由于只要有一个Reader进程在读,便不允许Writer进程写。 所以,仅当Readcount=0,即无Reader进程在读时,Reader才需要执行Wait(wmutex)操作。若Wait(wmu
39、tex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。2.4.3 读者-写者问题同理,仅当Reader进程在执行了Readcount减1操作后其值为0时,才需执行signal(wmutex)操作,以便让Write进程写互斥信号量rmutex: Reader进程间互斥访问ReadcountVar wmutex, rmutex :semaphore :=1, 1; Readcount :integer :=0;begin parbegin Reader : begin repeat wait(rmutex); if Readcount=0 then wait(wmute
40、x); Readcount :=Readcount +1; signal(rmutex); 读; wait(rmutex); Readcount :=Readcount -1; if Readcount=0 then signal(wmutex); signal(rmutex); until false; end parendend Writer : begin repeat wait(wmutex); 写; signal(wmutex); until false;endWmutex: 读、写互斥;写、写互斥Rmutex: 读间访问Readcount互斥Readcount: 记录读者进程数评价
41、:能实现读者写者问题 但读优先,对写者不公平2.利用信号量集机制解决读者-写者问题 增加一个限制:最多只允许增加一个限制:最多只允许RNRN个读者同时读。个读者同时读。引入信号量L,并赋予其初值RN,通过执行Swait(L, 1, 1)操作,来控制读者的数目。每当有一个读者进入时,就要先执行Swait(L, 1, 1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN +1个读者要进入读时,必然会因Swait(L, 1, 1)操作失败而阻塞。数据文件或记录W1W2WlR1R2Rm写者进程读者进程写、写互斥;写、读互斥。读、读共享2.4 经典进程的同步问题经典进程的同步问题2. 利用
42、信号量集机制解决读者利用信号量集机制解决读者写者写者问题问题 增加一个限制:最多只允许增加一个限制:最多只允许RN个读者同时读。个读者同时读。 因此,引入信号量因此,引入信号量L,并赋予其初值并赋予其初值RN,通过执行通过执行wait(L, 1, 1)操作,来控制读者的数目。每当有一个读者操作,来控制读者的数目。每当有一个读者进入时,就要先执行进入时,就要先执行wait(L, 1, 1)操作,使操作,使L的值减的值减1。当。当有有RN个读者进入读后,个读者进入读后,L便减为便减为0,第,第RN +1个读者要进个读者要进入读时,必然会因入读时,必然会因wait(L, 1, 1)操作失败而阻塞。操
43、作失败而阻塞。Var RN integer; L, mx: semaphore :=RN, 1;begin parbegin reader : begin repeat Swait(L, 1, 1); Swait(mx, 1, 0); 读读; Ssignal(L, 1); until false; end parendendwriter : begin repeat Swait(mx, 1, 1; L, RN, 0); 写写; Ssignal(mx, 1); until false;endL: 控制读进程的数目控制读进程的数目RNMx: 实现读、写互斥;写、写互斥实现读、写互斥;写、写互斥第二
44、章 进程管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程2.5 进程通信进程通信:指进程之间的信息交换。1. 低级通信:进程间仅交换一些状态和少量数据。 进程之间的互斥和同步低级通信 信号量机制作为通信工具的缺点: (1)效率低 (2)通信对用户不透明2. 高级通信:进程间可交换大量数据。用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。 操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。2.5 进程通信(高级通信)2.5.1 进程通信的类型2.5.2 消息传递通信的实现方法2.5
45、.3 消息传递系统实现中的若干问题2.5.4 消息缓冲队列通信机制高级通信机制可归结为三大类:v共享存储器系统v消息传递系统v管道通信系统2.5.1 进程通信的类型2.5.1 进程通信的类型一、共享存储器系统 相互通信的进程间共享某些数据结构或共享存储区,通过这些空间进行通信。1.基于共享数据结构的通信方式 进程公用某些数据结构,借以实现诸进程间的信息交换。 实现:公用数据结构的设置及对进程间同步的处理,都是程 序员的职责。 操作系统-提供共享存储器 特点:低效。只适合传递相对少量的数据。2.基于共享存储区的通信方式 在存储器中划出一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通
46、信。属于高级通信二、消息传递系统进程间的数据交换,以格式化的消息为单位。程序员直接利用系统提供的一组通信命令(原语)进行通信。例:计算机网络:网络报文三、管道通信管道:指用于连接一个读进程和一个写进程以实现他们之间 通信的一个打开的共享文件,又名pipe文件。2.5.1 进程通信的类型写进程(发送进程)读进程(接收进程)打开的共享文件(管道)管道机制提供的协调能力:互斥;同步;确定对方是否存在2.5.2 消息传递通信的实现方法进程间通信时,源进程可以直接或间接地将消息传送给目标进程,由此可将进程通信分为直接通信和间接通信。1.直接通信方式发送进程利用OS提供的发送命令,直接把消息发送给目标进程
47、。发送进程和接收进程都以显式方式提供对方的标识符。通信原语:Send(Receiver, message); 发送一个消息给接收进程Receive(Sender, message); 接收Sender发来的消息v利用直接通信原语解决生产者-消费者问题 当生产者生产出一个产品(消息)后,便用Send原语将消息发送给消费者进程;而消费者进程则利用Receive原语来得到一个消息。若消息尚未产生出来,消费者必须等待,直至生产者进程将消息发送过来。Producer: repeat produce an item in nextp; send(consumer, nextp); until false;
48、Consumer: repeat receive(producer, nextc); consume the item in nextc; until false;2.间接通信方式 -通过信箱通信信箱用来暂存发送进程发送给目标进程的消息,接收进程则从信箱中取出发送给自己的消息。消息在信箱中可安全保存,只允许核准的目标用户随时读取利用信箱通信方式,既可实时通信,又可非实时通信。2.5.2 消息传递通信的实现方法Sender1SendernReceiver信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。信箱分类: 私用信箱 公用信箱 共享信箱2.5.3 消息传递系统实现中的若干问题
49、1. 通信链路分类:(1)根据通信链路的建立方式:显示连接:先用 “建立连接”命令(原语) 建立一条通信链路; 通信; 用显式方式拆除链路。用于计算机网络隐式连接:发送进程无须明确提出建立链路的要求,直接利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。用于单机系统为使发送进程和接收进程能够通信,必须在发送进程和接收进程之间建立一条通信链路(2)根据通信链路的连接方法(3)根据通信方式的不同点-点连接通信链路多点连接通信链路单向通信链路双向链路无容量通信链路有容量通信链路(4)根据通信链路容量的不同2. 消息的格式单机系统环境:环境相同,消息格式简单计算机网络环境:环境不同,消息的
50、传输距离很远 消息格式比较复杂。2.5.3 消息传递系统实现中的若干问题消息格式:从消息长度分类比较短的定长消息格式变长的消息格式消息头:消息在传输时所需的控制信息消息的正文:发送进程实际上所发送的数据2.5.3 消息传递系统实现中的若干问题3.进程同步方式 在进程之间进行通信时,辅以进程同步机制,使诸进程间能协调通信。 发送进程或接收进程在完成消息的发送或接收后,都存在两种可能性:进程或者继续发送(接收)或者阻塞。发送进程阻塞、接收进程阻塞发送进程不阻塞、接收进程阻塞发送进程和接收进程均不阻塞2.5.4 消息缓冲队列通信机制发送进程利用Send原语,将消息直接发送给接收进程;接收进程利用Re
51、ceive原语接收消息。用于本地进程间通信1. 消息缓冲队列通信机制中的数据结构 消息缓冲队列通信方式中,主要利用的数据结构是消息缓冲区(1)消息缓冲区type message buffer =record sender; 发送者进程标识符 size; 消息长度 text; 消息正文 next; 指向下一个消息缓冲区的指针 endtype processcontrol block =record mq; 消息队列队首指针 mutex; 消息队列互斥信号量 sm; 消息队列资源信号量 end(2)PCB中有关通信的数据项应该在进程的PCB中增加消息队列队首指针,用于对消息队列进行操作,以及用于实
52、现同步的互斥信号量mutex和信号量sm2.5.4 消息缓冲队列通信机制2. 发送原语 procedure send(receiver, a) /将发送区a的内容发给receiver begin getbuf(a.size, i); /根据a.size申请缓冲区i i.sender :=a.sender; /将发送区a中的信息复制 i.size :=a.size; /到消息缓冲区i中 i.text :=a.text; i.next :=0; getid(PCB set, receiver.j); /取接收进程内部标识符放于j wait(j.mutex); /将消息缓冲区插入消息队列 inser
53、t(j.mq, i); signal(j.mutex); signal(j.sm); end2.5.4 消息缓冲队列通信机制3. 接收原语 procedure receive(b) /从进程自己的消息接收队列中取 begin /消息i放入消息接收区b中 j:=internal name; /j为接收进程内部标识符 wait(j.sm); wait(j.mutex); remove(j.mq, i); /将消息队列中的第一个消息移出 signal(j.mutex); b.sender :=i.sender; /将消息缓冲区i中的信息 b.size :=i.size; /复制到接收区b b.tex
54、t :=i.text; end2.5.4 消息缓冲队列通信机制2.5 进程通信进程通信text:Hello size:5sender:Asend(B, a) sm mutex mq next:0text:Hellosize:5sender:Atext:Hello size:5sender:Areceive(b)发发送送区区a接接收收区区b 进程进程A 进程进程B第一消息缓冲区第一消息缓冲区PCB(B)第二章 进程管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程2.6 线程2.6.1 线程的基本概念2.6.2 线程间的同步和通信2.6.3 线程的实现方式v目的及要求掌握线程的基本概念;理解线程间的同步和通信了解线程的实现方式;2.6.1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度2月智能驾驶芯片兼容性检测转让条款
- 叉车安全培训知识
- 2024年乌鲁木齐石化分公司秋季高校毕业生招聘132人笔试参考题库附带答案详解
- 2024年中储粮质检中心有限公司社会招聘23人笔试参考题库附带答案详解
- 交通安全培训课件
- 二零二五版别墅房屋出租合同
- 二零二五版借款延期补充协议
- 运营维护的合同范例共
- 二零二五搅拌桩施工劳务分包协议
- 演出安全协议书二零二五年
- 新能源汽车租赁市场发展方案
- 2024年叉车司机N1特种作业证初审取证(安徽)考试复习题库(含答案)
- 货架回收合同范例
- (2024年)中国传统文化介绍课件
- 《曹冲称象课件》课件
- 【MOOC】宇宙简史-南京大学 中国大学慕课MOOC答案
- 餐厅经营管理方案 餐厅的经营与管理计划
- 公民基本权利课件
- 深度学习及自动驾驶应用 课件 第1、2章 汽车自动驾驶技术概述、深度学习基础
- 糖尿病诊治发展史
- 美团合作商骑手协议书范文模板
评论
0/150
提交评论