欢迎来到天天文库
浏览记录
ID:46872419
大小:907.50 KB
页数:110页
时间:2019-11-28
《计算机操作系统教案_第02章 进程管理(2进程同步)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、计算机操作系统教案第2章 进程管理郭霞12.3进程互斥与同步2.3.1进程同步的基本概念1.程序执行并发性的产生环境单CPU的多道批处理系统多CPU系统22.3进程互斥与同步2.3.1进程同步的基本概念2.并发引起的问题失去封闭性,进程间临界资源的竞争,称为间接制约。结果的不可再现性,进程间数据合作,称为直接制约临界资源:硬临界资源、软临界资源临界区3分析下列活动属于什么制约关系若干同学去图书馆借书两队举行篮球比赛流水线生产的各道工序之间商品的生产和社会的消费42.3进程互斥与同步2.3.1进程同步的基本概念3.进程同步的概念指多个相关进程在执行次序上的协调,用于保证这种关系的相应
2、机制称为同步机制52.3进程互斥与同步2.3.1进程同步的基本概念4.进程同步的技术互斥机制:解决临界资源的竞争问题。会引起另外两个问题进程的死锁进程饿死:P1,P2,P3都需要访问资源R,那么有可能只在P1P3之间轮流,P2永远都不能执行。62.3进程互斥与同步2.3.1进程同步的基本概念4.进程同步的技术(2)进程间合作的技术共享数据(变量、文件、数据库)通信75.同步机制应遵循的设计规则空闲让进:临界资源空闲,应允许请求进入。(2)忙则等待:临界资源忙,其余程序等待。(3)有限等待:要求访问临界资源的进程,不能饿死(4)让权等待:不能进入临界区的进程,释放CPU82.3.2信
3、号量(Semaphores)机制1.整型信号量最初由Dijkstra把整型信号量定义为一个整型量,除初始化外,仅能通过两个标准的原子操作(AtomicOperation)wait(S)和signal(S)来访问。这两个操作一直被分别称为P、V操作。wait和signal操作可描述为:wait(S):whileS≤0dono-opS∶=S-1;signal(S):S∶=S+1;92.记录型信号量在整型信号量机制中的wait操作,只要是信号量S≤0,就会不断地测试。因此,该机制并未遵循“让权等待”的准则,而是使进程处于“忙等”的状态。记录型信号量机制,则是一种不存在“忙等
4、”现象的进程同步机制。但在采取了“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。为此,在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,还应增加一个进程链表L,用于链接上述的所有等待进程。记录型信号量是由于它采用了记录型的数据结构而得名的。它所包含的上述两个数据项可描述为:10typesemaphore=recordvalue:integer;L:listofprocess;end相应地,wait(S)和signal(S)操作可描述为:procedurewait(S)varS:semaphore;beginS.value∶=S
5、.value-1;ifS.value<0thenblock(S,L)endproceduresignal(S)varS:semaphore;beginS.value∶=S.value+1;ifS.value≤0thenwakeup(S,L);end11在记录型信号量机制中,S.value的初值表示系统中某类资源的数目,因而又称为资源信号量,对它的每次wait操作,意味着进程请求一个单位的该类资源,因此描述为S.value∶=S.value-1;当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到信号量
6、链表S.L中。可见,该机制遵循了“让权等待”准则。此时S.value的绝对值表示在该信号量链表中已阻塞进程的数目。对信号量的每次signal操作,表示执行进程释放一个单位资源,故S.value∶=S.value+1操作表示资源数目加1。若加1后仍是S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,故还应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。如果S.value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量。12说明如何在消费者和生产者中的应用133.AND型信号量在两个进程中都要包含两个对Dmutex和Emutex的
7、操作,即processA:processB:wait(Dmutex);wait(Emutex);wait(Emutex);wait(Dmutex);若进程A和B按下述次序交替执行wait操作:processA:wait(Dmutex);于是Dmutex=0processB:wait(Emutex);于是Emutex=0processA:wait(Emutex);于是Emutex=-1A阻塞processB:wait(Dmutex);于是Dmutex=-1
此文档下载收益归作者所有