计算机操作系统讲_第1页
计算机操作系统讲_第2页
计算机操作系统讲_第3页
计算机操作系统讲_第4页
计算机操作系统讲_第5页
已阅读5页,还剩34页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

课程主要内容操作系统引论(第1章)进程管理(第2-3章)存储管理(第4章)设备管理(第5章)文件管理(第6章)操作系统接口(第7章)Unix操作系统(第10章)第2章进程管理

ProcessManagement进程的基本概念与控制进程的基本概念进程控制线程的基本概念UNIX中进程的描述与控制进程同步与通信进程同步经典进程的同步问题管程机制进程通信UNIX中进程的同步与通信调度与死锁(第3章)2.3进程同步(3)进程同步的基本概念两种形式的制约关系临界资源、临界区同步机制应遵循的规则信号量机制整型信号量记录型信号量AND型信号量集、一般信号量集信号量的应用信号量实现进程互斥信号量描述进程间的前趋关系管程机制2、记录型信号量(1)基本思想1、设置一个代表资源数目的整型变量value(资源信号量)2、设置一链表L用于链接所有等待访问同一资源的等待进程记录型信号量的数据结构Typesemaphore=recordvalue:integer;L:listofprocess;endVarS:semaphore;2、记录型信号量(2)wait和signal操作描述:

wait(S):S.value:=S.value-1;

ifS.value<0thenblock(S.L);

signal(S):

S.value:=S.value+1;

ifS.value0thenwakeup(S.L);做到“让权等待”。

//调用阻塞原语将该进程状态置为//等待状态,将该进程的PCB插入//相应的等待队列S.L末尾;//调用唤醒原语唤醒相应等待队列//S.L中等待的一个进程,改变其状//态为就绪态,并将其插入就绪队列2、记录型信号量(3)在记录型信号量机制中S.value的初值表示系统中某类资源的数目。S.value的初值为1,S为互斥信号量;S.value的初值大于1,S为资源信号量;2、记录型信号量(3)在记录型信号量机制中每次wait(S)操作意味着进程请求一个单位的资源,资源数目减1。当S.value<0时表示资源已分配完毕,进程调用Block()原语进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。此时,|S.value|表示在该信号量链表中已阻塞进程的数目。2、记录型信号量(3)在记录型信号量机制中每次signal(S)表示执行进程释放一个单位资源,资源数目加1。若加1后仍有S.value<=0,则表示在该信号量链表中,还有等待该资源的进程,则调用Wakeup()原语,将链表中第一个进程唤醒。3、AND型信号量(了解)(1)AND型信号量的引入有些进程是需要获得两个或两个以上的共享资源后,才可以执行任务“死锁”ProcessA:Wait(Dmutex);Wait(Emutex);ProcessB:Wait(Emutex);Wait(Dmutex);3、AND型信号量(了解)(2)AND型信号量的基本思想将进程在整个运行过程中所需要的所有临界资源,一次性全部分配给进程,待进程使用完后再一起释放。只要有一个资源未能分配给进程,其它所有可能分配的资源也不分配给该进程。从而可避免死锁发生。在wait操作中,增加了一个“AND”条件,故称为AND同步。3、AND型信号量(了解)(3)因此在“wait”操作中,增加了一个“AND”条件,即SwaitSwait(S1,S2,S3,……Sn) ifSi>=1and…andSn>=1then fori:=1tondo Si:=Si–1; endfor else placetheprocessinthewaitingqueue

associatedwiththefirstSi<1….. endifSsignal(S1,S2,……Sn)Fori:=1tondo Si:=Si+1; Removetheprocesswaitinginthequeue……Endfor;4、一般信号量集(了解)一般信号量集的基本思想

一次可分配多个某种临界资源,而不需执行N次的P操作;每次分配前都测试该种资源数目是否大于测试值。当一次需要N个某类临界资源时,不需要进行N次wait(S)操作在有些情况下,当资源数量低于某一下限值,不予以分配Swait(S,t,d),S为信号量,d为需求值,t为下限值(测试值)三、信号量的应用(1)利用信号量实现进程互斥

利用信号量可以方便地解决临界区问题(进程互斥)(见后面的图)。为临界资源设置一互斥信号量lock,初值为1,则实现进程A、B、C互斥的描述:A进程:...wait(lock);criticalsection;signal(lock);...C进程:...wait(lock);criticalsection;signal(lock);...B进程:...wait(lock);criticalsection;signal(lock);...P(lock)V(lock)ABC临界区P(lock)P(lock)V(lock)V(lock)三、信号量的应用(2)利用信号量描述前趋关系(信号量可用来描述程序或语句间的前趋关系。)方法:

若图中存在结点S1指向结点S2的有向边,表示进程P1中的程序段S1应该先执行,而进程P2中的程序段S2后执行。设置一个信号量s,初值为0,将V(s)放在S1后面,而在S2前面先执行P(s)。进程P1的语句序列为:S1;V(s)进程P2的语句序列为:P(s);S2P2P1S1S1S2s三、信号量的应用(3)例利用信号量来描述前趋图关系S1S3S2S4S5S6S7S8三、信号量的应用(4)具有8个结点的前趋图。前趋图中共有有向边10条,可设10个信号量,初值均为0;有8个结点,可设计成8个并发进程,具体描述如下:S1S3S2S4S5S6S7S8agefbcdhij三、信号量的应用(5)structsemaphorea,b,c,d,e,f,g,h,i,j=0,0,0,0,0,0,0,0,0,0cobegin{S1;V(a);V(b);V(c);}{P(a);S2;V(d);}{P(b);S3;V(e);V(f);}{P(c);S4;V(g);}{P(d);P(e);S5;V(h);}{P(f);P(g);S6;V(i)}{P(h);P(i);S7;V(j);}{P(j);S8;}coend四、管程机制(1)信号量机制实现进程同步的问题

用信号量机制实现进程间的同步和互斥,既方便又有效。但存在以下两个问题:每个访问临界资源的进程都必须自备同步操作(P、V操作),这使大量的同步操作分散在各个进程中,给系统的管理带来麻烦。会因同步操作使用不当而导致系统死锁。四、管程机制(2)解决方法----管程(Monitors)Dijkstra于1971年提出:为每个共享资源设立一个“秘书”来管理对它的访问。一切来访者都要通过秘书,而秘书每次仅允许一个来访者(进程)来访问共享资源。这样既便于系统管理共享资源,又能保证进程的互斥访问和同步。1973年,Hanson和Hoare又把“秘书”概念发展为管程概念。管程的基本概念(1)※基本思想

系统中的各种软硬件资源,其特性都可用数据结构抽象地描述,把对该共享数据结构实施的操作定义为一组过程。进程对共享资源的访问都是通过这组过程对共享数据结构的操作来实现的,这组过程可以根据资源的使用情况,接受或阻塞进程的访问,确保每次只有一个进程使用共享资源,实现进程的互斥。管程的基本概念(2)※管程的定义

一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。如下图所示。由四部分组成管程的名称局部于管程内部的共享数据结构说明对该数据结构进行操作的一组过程对局部于管程内部的共享数据设置初始值的语句管程的基本概念(3)※管程的结构TYPE

<管程名>=MONITOR<共享变量说明>;

procedure

<过程名>(<形式参数表>);begin<过程体>;end;

……

procedure<过程名>(<形式参数表>);

begin<过程体>;

end;begin<管程的局部数据初始化语句序列>;end;局部于管程内部的数据结构,只能被局部于管程内部的过程所访问;反之,局部于管程内部的过程也只能访问管程内的数据结构管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而实现进程互斥。管程的特性模块化是一个基本程序单位,可单独编译抽象数据类型管程中不仅有数据,而且有对数据的操作信息隐蔽数据结构和过程的具体实现外部不可见管程的基本概念(4)管程的基本概念(5)管程与进程作比较管程定义的是公用数据结构,而进程定义的是私有数据结构PCB;管程把共享变量上的同步操作集中起来,而临界区却分散在每个进程中;管程是为管理共享资源而建立的,进程主要是为占有系统资源和实现系统并发性而引入的;管程的基本概念(6)管程与进程作比较管程是被要使用共享资源的进程所调用的,管程和调用它的进程不能并发工作,而进程之间能并发工作,并发性是进程的固有特性;管程是OS中一个资源管理模块,供进程调用;而进程有生命周期,由创建而产生、由撤销而消亡管程的基本概念(7)※条件变量

在管程机制中,当某进程通过管程请求临界资源未能满足时,管程便调用wait原语使该进程等待,但等待的原因可能有多个,为了加以区别,在P,V操作前,引入条件变量加以说明。条件变量也是一种抽象数据类型,每个条件变量保存了一个链表,用于记录因该条件变量而阻塞的所有进程。

(1)条件变量的定义格式varx,y:condition;管程的基本概念(8)※条件变量(2)对条件变量执行的两种操作wait操作(如x.wait):用来阻塞正在调用管程的进程并将其插入到与条件变量x相应的等待队列上,并释放管程,直到x条件变化。此时其它进程可以使用该管程。signal操作(如x.signal):用来唤醒与条件变量x相应的等待队列的一个进程(因x条件而阻塞)。如果没有这样的进程,则继续执行原进程,不产生任何结果。2.4经典进程的同步问题在多道程序环境下,进程同步问题十分重要,出现一系列经典的进程同步问题,其中有代表性有:生产者—消费者问题哲学家进餐问题读者—写者问题一、“生产者—消费者”问题问题描述:

“生产者---消费者”问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个缓冲池(有n个缓冲区),生产者向其中投放产品,消费者从中取得产品。它是许多相互合作进程的抽象,如输入进程与计算进程;计算进程与打印进程等。一、“生产者—消费者”问题一个生产者,一个消费者,公用一个缓冲区

定义两个同步信号量:empty——表示缓冲区是否为空,初值为n。full——表示缓冲区中是否为满,初值为0。生产一个产品取出一个产品生产者缓冲区一、“生产者—消费者”问题生产者进程:while(TRUE){生产一个产品;P(empty);把产品送往Buffer;V(full);}消费者进程:while(TRUE){P(full);从Buffer取出一个产品;V(empty);消费产品;}一、“生产者—消费者”问题M个生产者,K个消费者,公用有n个缓冲区的缓冲池设缓冲池的长度为n(n>0),一群生产者进程P1,P2,…,Pm,一群消费者进程C1,C2,…,Ck,如图所示。假定生产者和消费者是相互等效,只要缓冲池未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲池未空,消费者便可以从缓冲区取走产品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲池输送产品,也禁止消费者从空的缓冲池提取产品。一、“生产者—消费者”问题M个生产者,K个消费者,公用有n个缓冲区的缓冲池

设置两个同步信号量及一个互斥信号量empty:说明空缓冲区的数目,其初值为缓冲池的大小n,表

温馨提示

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

最新文档

评论

0/150

提交评论