交通923、927操作系统电子课件zgsosjiaoan_第1页
交通923、927操作系统电子课件zgsosjiaoan_第2页
交通923、927操作系统电子课件zgsosjiaoan_第3页
交通923、927操作系统电子课件zgsosjiaoan_第4页
交通923、927操作系统电子课件zgsosjiaoan_第5页
免费预览已结束,剩余28页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

114二月2023北京交通大学计算机学院主讲教师:翟高寿(副教授)联系电话:(办)电子邮件:制作人:翟高寿制作单位:北京交通大学计算机学院《操作系统》214二月2023北京交通大学计算机学院第二章进程管理2.1进程的基本概念2.2进程控制2.3进程同步2.4经典进程同步问题2.5进程通信2.6管程与线程314二月2023北京交通大学计算机学院2.4经典进程同步问题2.4.1生产者—消费者问题2.4.2哲学家进餐问题2.4.3读者—写者问题414二月2023北京交通大学计算机学院生产者消费者问题背景生产者—消费者问题是相互合作进程关系的一种抽象输入时的输入进程与计算进程输出时的计算进程与输出进程生产者—消费者问题具有很大的代表性和实用价值计算机系统IPO系统514二月2023北京交通大学计算机学院生产者消费者问题描述生产者进程在生产数据,并将此数据提供给消费者进程消费为使二者可以并发执行,在它们之间设置了一个具有n个缓冲区的循环缓冲,生产者进程可以将它所生产的数据放入一个缓冲区中,消费者进程可以从一个缓冲区中取得一个数据消费异步运行方式及彼此必须保持同步614二月2023北京交通大学计算机学院空缓冲区与满缓冲区空缓冲区是指未投放数据或虽曾投放数据但对应数据已被取走的缓冲区满缓冲区则指已投放数据且对应数据尚未被取走的缓冲区进程同步当生产者进程要把所生产的数据送入循环缓冲时,首先应检查是否有空缓冲区存在,若有,则可向对应空缓冲区中投放数据,同时通知消费者进程;否则只有等待。当消费者进程要从循环缓冲中提取数据时,首先应检查是否有满缓冲区存在,若有,则从对应满缓冲区中提取数据,并通知生产者进程,否则只有等待。进程互斥循环缓冲是一个临界资源:单/多个生产者/消费者进程生产者-消费者问题剖析714二月2023北京交通大学计算机学院生产者消费者问题临界资源剖析0n-3n-2n-1123…指针移动方向输出指针out输入指针in消费者1消费者2消费者3

……消费者X生产者1生产者2生产者3

……生产者Y814二月2023北京交通大学计算机学院生产者消费者程序变量设计循环缓冲表示机制一维数组buffer:array[0..n-1]ofitem;输入指针in指示下一个可以投放数据的缓冲区初始值为0;变化方式:in(in+1)modn输出指针out指示下一个可以获取数据的缓冲区初始值为0;变化方式:out(out+1)modnnextp/nextc暂存每次要生产或消费的数据914二月2023北京交通大学计算机学院生产者消费者程序信号量设计循环缓冲的互斥使用互斥信号量mutex,初始值为1资源信号量empty表示循环缓冲中的空缓冲区的数量,其初始值为nfull表示循环缓冲中的满缓冲区的数量,其初始值为01014二月2023北京交通大学计算机学院生产者-消费者主程序设计Varbuffer:array[0..n-1]ofitem;in,out:integer0,0;mutex,empty,full:semphore1,n,0;beginparbeginproducer;consumer;parendend1114二月2023北京交通大学计算机学院生产者子程序设计producer:Varnextp:item;beginrepeatproduceaniteminnextp;

wait(empty);wait(mutex);

buffer[in]nextp;in(in+1)modn;

signal(mutex);signal(full);untilfalse;end1214二月2023北京交通大学计算机学院消费者子程序设计consumer:Varnextc:item;beginrepeat

wait(full);wait(mutex);

nextcbuffer[out];out(out+1)modn;signal(mutex);signal(empty);

consumetheiteminnextc;untilfalse;end1314二月2023北京交通大学计算机学院同步问题程序设计要领每个并发子程序关于互斥信号量的wait与signal操作必须在同一子程序中成对出现关于资源信号量的wait与signal操作同样需成对出现,但可以分别处于不同的并发子程序中每个并发子程序中的多个wait操作的顺序不能颠倒,即资源信号量wait操作执行在前而互斥信号量wait操作执行在后,否则可能引起死锁每个并发子程序中的多个signal操作的执行顺序无关紧要非临界资源访问操作无需放到临界区中1414二月2023北京交通大学计算机学院基于AND信号量的生产/消费者子程序设计producer:beginrepeat

produceaniteminnextp;

Swait(empty,mutex);

buffer[in]nextp;in(in+1)modn;

Ssignal(mutex,full);

untilfalse;endconsumer:beginrepeat

Swait(full,mutex);

nextcbuffer[out];out(out+1)modn;Ssignal(mutex,empty);

consumetheiteminnextc;

untilfalse;end1514二月2023北京交通大学计算机学院2.4经典进程同步问题2.4.1生产者—消费者问题2.4.2哲学家进餐问题2.4.3读者—写者问题1614二月2023北京交通大学计算机学院哲学家进餐问题描述哲学家进餐问题是典型的同步问题五个哲学家共用一张圆桌,分别坐在环桌均匀摆放的五张椅子上,并全部执行同为交替地进行思考和进餐的生活方式圆桌上放有五支筷子,均匀排放在哲学家之间的位置上哲学家饥饿时便试图去取用圆桌上最靠近他左右两端的两支筷子,且只有在同时拿到两支筷子时方可进餐,进餐完毕则把筷子放回原处,并继续进行思考1714二月2023北京交通大学计算机学院哲学家进餐问题剖析(待续)筷子是临界资源信号量数组chopstick[0..4],初始值均为1第i个哲学家活动wait(chopstick[i]);wait(chopstick[(i+1)mod5]);Eat;signal(chopstick[i]);signal(chopstick[(i+1)mod5]);Think;03214043211814二月2023北京交通大学计算机学院哲学家进餐问题剖析(续)上述解决方案在五个哲学家同时饥饿且各自拿起左边筷子的情况下会引起死锁避免死锁的三种方法①至多允许四个哲学家同时进餐,以保证至少有一个哲学家可以同时拿到两支筷子而进餐②仅当哲学家左右两支筷子均可使用时,才允许他拿筷进餐③奇数号哲学家先拿左筷后拿右筷;而偶数号哲学家则相反03214043211914二月2023北京交通大学计算机学院哲学家进餐主程序设计Varchopstick:array[0..4]ofsemphore(1,1,1,1,1);beginparbeginphilosophy0;…;philosophyi

;…

philosophy4;parendend2014二月2023北京交通大学计算机学院基于AND信号量机制的

哲学家进餐子程序设计philosophyi:beginrepeatThink;

Swait(chopstick[(i+1)mod5],chopstick[i]);Eat;

Ssignal(chopstick[(i+1)mod5],chopstick[i]);untilfalse;end2114二月2023北京交通大学计算机学院2.4经典进程同步问题2.4.1生产者—消费者问题2.4.2哲学家进餐问题2.4.3读者—写者问题2214二月2023北京交通大学计算机学院读者写者问题描述读者—写者问题是指保证一个写者进程必须与其它进程互斥地访问共享数据对象(数据文件或记录)的同步问题。存在多个进程共享一个数据对象只要求读的进程称为读者进程拥有写或修改要求的进程称为写者进程允许多个读者进程同时执行读操作任何写者进程的执行具有排它性读者—写者问题常用于测试新同步原语2314二月2023北京交通大学计算机学院读者写者程序信号量及变量设计写者进程与其它进程的互斥执行写互斥信号量wmutex,初始值为1读者进程之间的并发执行读者进程计数变量readercount,表示正在执行的读者进程数量,其初始值为0读者进程计数变量的互斥访问readercount对于多个读者进程而言是临界资源,应为之设置读互斥信号量rmutex,其初始值为12414二月2023北京交通大学计算机学院读者-写者主程序设计Varreadercount:integer0;

rmutex,wmutex:semphore1,1;beginparbeginreader1;…;

readeri

;…;readerm;writer1;…;

writerj

;…;writern;parendend2514二月2023北京交通大学计算机学院读者子程序设计readeri:beginrepeatwait(rmutex);

ifreadercount=0thenwait(wmutex);readercountreadercount+1;

signal(rmutex);Performreadoperation;wait(rmutex);

readercountreadercount-1;ifreadercount=0thensignal(wmutex);signal(rmutex);

untilfalse;end2614二月2023北京交通大学计算机学院写者子程序设计writerj:beginrepeat

wait(wmutex);Performwriteoperation;

signal(wmutex);untilfalse;end2714二月2023北京交通大学计算机学院读者数限定的读者写者问题保持读者—写者基本要求……最多允许RN个读者同时读引入信号量rMax,并赋以初值RN;同时借助于Swait(rMax,1,1)来控制读者数量读者与写者之间的互斥引入互斥信号量wmutex读者执行Swait(wmutex,1,0)保证无写者写者检查Swait(wmutex,1,1,rMax,RN,0)保证既无写者在写又无读者在读2814二月2023北京交通大学计算机学院读者数限定的读者-写者主程序设计VarRN:integer:=10;

rMax,wmutex:semphoreRN,1;beginparbeginreader1;…;

readeri

;…;readerm;writer1;…;

writerj

;…;writern;parendend2914

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论