计算机操作系统资源java3第2章进程管理_第1页
计算机操作系统资源java3第2章进程管理_第2页
计算机操作系统资源java3第2章进程管理_第3页
计算机操作系统资源java3第2章进程管理_第4页
计算机操作系统资源java3第2章进程管理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 进程管理互斥 和 同步 的区别2.4.32.4.3信号量机制信号量机制1. 1. 整型信号量整型信号量最初由最初由Dijkstra把整型信号量定义为一个用于把整型信号量定义为一个用于表示资源数目的整型量表示资源数目的整型量S,它与一般整型量不同,它与一般整型量不同,除初始化外,仅能通过两个标准的原子操作除初始化外,仅能通过两个标准的原子操作(Atomic Operation) wait(S)和和signal(S)来访问。来访问。很长时间以来,这两个操作一直被分别称为很长时间以来,这两个操作一直被分别称为P、V操作。操作。 wait(S) while(S=0); S-;signal(S)

2、 S+;2.4.42.4.4信号量的应用信号量的应用1. 1. 利用信号量实现进程互斥利用信号量实现进程互斥为使多个进程能互斥地访问某临界资源,为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量只需为该资源设置一互斥信号量mutex,并,并设其初始值为设其初始值为1,然后将各进程访问该资源的,然后将各进程访问该资源的临界区临界区CS置于置于wait(mutex)和和signal(mutex)操作之间即可。操作之间即可。 在一个只允许单向行驶的十字路口,分别有若干由东向西,由南向北的车辆在等待通过。为了安全,每次只允许一辆车通过。当有车辆通过时其他车辆必须等候,当无车辆在路口行驶时

3、则允许一辆车通过。请用PV操作来设计一个十字路口安全行驶的自动管理系统。设互斥信号量S=1,表示临界资源十字路口,其初值为1int s=1;main()pew();psn();pew()p(s)由东向西通过十字路口;V(S);psn()p(s)由南向北通过十字路口;V(S);说明:互斥信号量是根据临界资源的类型设置的,有几种类型的临界资源就设置几个互斥信号量。它代表该类临界资源的数量,或表示是否可用,其初值一般为1。2 记录型信号量机制(1)记录型信号量的出现 尽管整型信号能够实现进程之间的同步,但是,代价是巨大的,缺陷是进程出现了“忙等”的现象,原因是该机制不能完全遵循同步机制应遵循的规则。

4、 以此为思路,提出记录型信号量机制,解决进程“忙等”问题,从而使得该机制能够完全遵循同步机制应遵循的规则。 2.4.3 信号量机制(2)记录型信号量的P、V操作1)P原语操作的主要动作是:sem减1;若sem减1后仍大于或等于零,则进程继续执行;若sem减1后小于零,则该进程被阻塞到与该信号相对应的阻塞队列中,然后转向进程调度。2.4.3 信号量机制(2)记录型信号量的P、V操作2)V原语操作的主要动作是:sem加1;若相加结果大于零,则进程继续执行;若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转向进程调度。2.4.3 信号量机制2 记录型信号量机制

5、(3)记录型信号量的实现 在记录型信号量机制中,1)需要一个用于代表资源数目的整型变量value(资源信号量)。2)需要一个用于链接上述的所有等待进程的进程链表L。 记录型信号量是由于它采用了记录型的数据结构而得名的。 2.4.3 信号量机制Procedure wait(S)var S: semaphore;beginS.value:=S.value-1;if S.value0 then block(S,L);endProcedure signal(S)var S: semaphore;beginS.value:=S.value+1;i f S . v a l u e 0 t h e n wa

6、keup(S,L);end2.4.3 信号量机制(4)(4)记录型信号量机制的记录型信号量机制的wait()wait()和和signal()signal()操作操作一般地,把各进程之间发送的消息作为信号量看待。与进程互斥不同的是,这里的信号量只与制约进程及被制约进程有关,而不是与整组 并发进程有关。因此,该信号量为私用信号量。与私用信号量相对应,互斥时使用的信号量为公用信号量。1 从下面对临界区的论述中,选出一条正确的论述。( D )A 临界区是指进程中用于实现进程互斥的那段代码B 临界区是指进程中用于实现进程通信的那段代码C 临界区是指进程中用于访问共享资源的那段代码D 临界区是指进程中用于

7、访问临界资源的那段代码2 用信号量S实现对系统中4台打印机的互斥使用,S.value的初值应设置为( 4 ),若S.value的当前值为-1,则表示S.L队列中有( 1 )个等待进程。3 设有10个进程共享一个互斥段,如果最多允许有1个进程进入互斥段,则所采用的互斥信号量初值应设置为( 1 ),而该信号量的取值范围为(1-9),如果最多允许有3个进程同时进入互斥段,则所采用的互斥信号量初值应设置为( 3 )。2.4.42.4.4信号量的应用信号量的应用1. 1. 利用信号量实现进程互斥利用信号量实现进程互斥为使多个进程能互斥地访问某临界资源,只需为为使多个进程能互斥地访问某临界资源,只需为该资

8、源设置一互斥信号量该资源设置一互斥信号量mutex,并设其初始值为,并设其初始值为1,然后将各进程访问该资源的临界区然后将各进程访问该资源的临界区CS置于置于wait(mutex)和和signal(mutex)操作之间即可。操作之间即可。 在利用信号量机制实现进程互斥时应该注意,在利用信号量机制实现进程互斥时应该注意,wait(mutex)wait(mutex)和和signal(mutex)signal(mutex)必须成对地出现。缺少必须成对地出现。缺少wait(mutex)wait(mutex)将会导致系统混乱,不能保证对临界资源将会导致系统混乱,不能保证对临界资源的互斥访问,缺少的互斥访

9、问,缺少signal(mutex)signal(mutex)将会是临界资源永远将会是临界资源永远不被释放,从而使因等待该资源而阻塞的进程不能被不被释放,从而使因等待该资源而阻塞的进程不能被唤醒。唤醒。2. 2. 利用信号量实现前趋关系利用信号量实现前趋关系还可利用信号量来描述程序或语句之间的前趋关系。设有还可利用信号量来描述程序或语句之间的前趋关系。设有两个并发执行的进程两个并发执行的进程P1和和P2。P1中有语句中有语句S1;P2中有语句中有语句S2。我们希望在我们希望在S1执行后再执行执行后再执行S2。为实现这种前趋关系,只需使。为实现这种前趋关系,只需使进程进程P1和和P2共享一个公用信

10、号量共享一个公用信号量S,并赋予其初值为,并赋予其初值为0,将,将signal(S)操作放在语句操作放在语句S1后面,而在后面,而在S2语句前面插入语句前面插入wait(S)操操作,即作,即在进程在进程P1中,用中,用S1;signal(S);在进程在进程P2中,用中,用wait(S);S2;由于由于S被初始化为被初始化为0,这样,若,这样,若P2先执行必定先执行必定阻塞,只有在进程阻塞,只有在进程P1执行完执行完S1; signal(S);操作;操作后使后使S增为增为1时,时,P2进程方能成功执行语句进程方能成功执行语句S2。S1Signal(S)S2wait(S)橘子苹果问题橘子苹果问题

11、桌子上有一个空盘子,只允许放一个水果。爸爸可桌子上有一个空盘子,只允许放一个水果。爸爸可以向盘中放苹果,也可以向盘中放桔子,儿子专等吃盘以向盘中放苹果,也可以向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果,请用次只能放一个水果,请用waitwait、signalsignal操作实现爸爸、儿操作实现爸爸、儿子、女儿三个并发进程的同步。子、女儿三个并发进程的同步。semaphore Sp=1;semaphore So=0;semaphore Sa=0;father();son();daughter();fa

12、ther() while(1) wait(Sp); if (放入的是苹果) signal(Sa); else signal(So); daughter( ) while(1) wait(Sa); 从盘中取出苹果; signal(Sp); son( ) while(1) wait(So); 从盘中取出桔子; signal(Sp); 同步信号量是根据进程的数量设置的,一般情况同步信号量是根据进程的数量设置的,一般情况下,有几个进程就应设置几个同步信号量,用以表下,有几个进程就应设置几个同步信号量,用以表示该进程是否可以执行,或表示该进程是否执行结示该进程是否可以执行,或表示该进程是否执行结束,其初

13、值一般为束,其初值一般为0.0.经典经典IPCIPC问题问题-生产者生产者- -消费者问题消费者问题 假定在生产者和消费者之间的公用缓冲池中具有假定在生产者和消费者之间的公用缓冲池中具有n个缓冲个缓冲区,这时可利用互斥信号量区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互实现诸进程对缓冲池的互斥使用;利用信号量斥使用;利用信号量empty和和full分别表示缓冲池中空缓冲分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲只要缓冲池未满,生产者便可将消息送入

14、缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。池未空,消费者便可从缓冲池中取走一个消息。 #define k 100 /假设缓冲区大小为100semaphore mutex=1; /mutex是对缓冲区的互斥信号量semaphore empty=k; /empty是空缓冲个数,同步信号量semaphore full=0; /full是有产品的缓冲个数,同步信号量int arrayk,i=0,j=0; /定义缓冲区,i是生产者指针,j是消费者指针void producer( ) produce a product x; /制造数据 wait(empty); /申请空缓冲区 wait(mutex); /申请对缓冲区的读写控制权,互斥操作 arrayi=x; /将数据放入缓冲区 i=(i+1)% k; /在循环队列中计算下一次正确位置 sign

温馨提示

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

评论

0/150

提交评论