操作系统第2章习题分析

合集下载

操作系统 第二章 习题

操作系统 第二章 习题

第二章练习题及参考答案一、单项选择题1.用户作业可以通过()方式由用户自己按照作业来进行操作。

A.脱机B.自动控制C.在线处理D.联机处理2.()是操作系统提供的一种专门语言,它由操作系统的专门机制解释处理。

A.C语言B.JCL语言C.Ada语言D.Pascal语言3.作业调度算法中()调度算法最有利于提高资源利用率。

A.先来先服务B.优先数C.响应比最高优先D.均衡4.终端用户在终端上控制作业的执行要经历四个阶段,最初阶段是()。

A.用户注册B.终端连接C.作业控制D.用户退出5.在下面作业调度算法中()调度算法最有利于小作业,从而提高系统吞吐能力。

A.先来先服务B.计算时间短的作业优先C.优先数D.响应比最高者优先6.当中央处理器处于目态时,它可以执行的指令是()。

A.计算机系统中的全部指令B.仅限于非特权指令C.仅限于防管指令D.仅限于特权指令7.作业调度算法常考虑因素之一是使系统有最高的吞吐率,为此应()。

A.不让处理机空闲B.能够处理尽可能多的作业C.使各类用户满意D.不使系统过于复杂8. 分时操作系统环境下运行的作业通常称为()。

A.后台作业B.长作业C.批量型作业D.终端型作业9.在作业调度算法中,若所有作业同时到达,则平均等待时间最短的算法是()。

A.先来先服务B.优先数C.响应比最高优先D.计算时间段的作业优先10.作业调度程序从处于()状态的作业队列中选取适当的作业投入运行。

A.执行B.提交C.完成D.后备11.既考虑作业等待时间,又考虑作业执行时间的调度算法是()。

A. 先来先服务B.优先数C.响应比最高优先D.均衡12.()是指从作业提交给系统到作业完成的时间间隔。

A.周转时间B.响应时间C.等待时间D.执行时间13.作业从进入后备队列到被调度程序选中的时间间隔称为()。

A.周转时间B.响应时间C.等待时间D.触发时间二、多项选择题1.响应比最高者优先调度算法是()调度算法的折衷。

操作系统练习题 第2章进程管理

操作系统练习题 第2章进程管理

第二章进程管理练习题(一)单项选择题1.多道程序设计系统中,让多个计算问题同时装入计算机系统的主存储器( )。

A.并发执行B.顺序执行 C.并行执行D.同时执行2. 引入多道程序设计技术后,处理器的利用率( )。

A.无改善B.极大地提高 C.降低了D.无变化,仅使程序执行方便3.计算机系统采用多道程序设计技术后,()。

A.缩短了每个程序的执行时间B.系统效率随并行工作道数成比例增长C.提高了系统效率D.使用设备时不会发生冲突4.进程是( )。

A.一个系统软件B.与程序概念等效C.存放在内存中的程序D.执行中的程序5.进程的( )和并发性是两个很重要的属性。

A.动态性B.静态性C.易用性D.顺序性6.已经获得除( )以外所有运行所需资源的进程处于就绪状态。

A.主存储器B.打印机C.C PU D.磁盘空间7.在一个单处理器系统中,处于运行态的进程( )。

A.可以有多个B.不能被打断C.只有一个D.不能请求系统调用8.对于一个单处理器系统来说,允许若干进程同时执行,轮流占用处理器.称它们为()的。

A. 顺序执行B. 同时执行C. 并行执行D. 并发执行9.操作系统根据( )控制和管理进程,它是进程存在的标志。

A.程序状态字B.进程控制块C.中断寄存器D.中断装置10.若干个等待占有CPU并运行的进程按一定次序链接起来的队列为( )。

A.运行队列B.后备队列C.等待队列D.就绪队列11.临界区是指( )。

A. 并发进程中用于实现进程互斥的程序段B.并发进程中用于实现进程同步的程序段C.并发进程中用户实现进程通信的程序段D.并发进程中与共享变量有关的程序段12.对于记录型信号量,在执行一次P操作时,信号量的值应( )。

A.不变B.加1 C.减1D.减指定数值13.在执行signal操作时,当信号量的值( )时,应释放一个等待该信号量的进程。

A.0 B.<0 C.>=0 D.<=014.wait、signal操作必须在屏蔽中断下执行,这种不可变中断的过程称为( )。

操作系统--习题课1-第二章

操作系统--习题课1-第二章

第二章进程的描述与控制-习题【例1】我们为某临界区设置一把锁W,当W=1时,表示关锁;W=0时表示锁已经打开。

试写出开锁和关锁原语,并利用他们实现互斥。

分析:在用锁实现互斥时,必须为每个临界资源设置一把锁W,值得注意的是锁W只能有开或关两种状态,相应地W只能取0或1两个值。

进行关锁操作时,若W处于开的状态,则表示相应的临界资源空闲,进程只需将锁的状态置为关,便可直接进入临界区;否则,若W已处于关状态,则表示其他进程正在使用临界资源,故执行关锁操作的进程必须等待。

进行开锁操作时,则必须将锁的状态置为开状态,以允许其他进程使用临界资源。

答:相应的关锁原语lock(W)和开锁原语unlock(W)可描述为:lock(W): while(W==1);W=1;unlock(W): W=0;在利用关锁原语和开锁原语实现进程互斥时,可将临界区CS放在其间,即:lock(W);CS;unlock(W);【例2】在所示图中,有一计算进程和打印进程,他们共享一个单缓冲区,计算进程不断地计算出一个整型结果并将它放入单缓冲区中,打印进程则负责从单缓冲区中取出每一个结果进行打印,请用信号量来实现它们的同步关系。

分析1:可从临界资源的角度来思考,先找临界资源,并为每种资源设置信号量,在访问临界资源之前加wait操作来申请资源,访问完临界资源后加signal操作来释放临界资源。

本题中有两类临界资源,第一类是计算进程争用的空闲缓冲区,初始状态下有一个缓冲区可供使用,故可为它设置初值为1的信号量empty;第二类是打印进程争用的已放入缓冲中的打印结果,初始状态下缓冲中无结果可供打印,故可为它设置初值为0的信号量full。

答1:具体的同步算法可描述为:semaphore full=0, empty=1;int buffer;cp(){int nextc;while(1){compute the next number in nextc;wait(empty);buffer=nextc;signal(full);}}pp(){int nextp;while(1){wait(full);nextp=buffer;signal(empty);print the number in nextp;}}main(){cobegincp(); pp();coend}其实,本题是一个n=1的生产者—消费者问题,与常规的生产者—消费者问题的算法比较一下,可以发现:单缓冲的情况下,缓冲区只需要简单变量来描述,而不必再用数组;另外,也不再需要in(out)指针来指示产品放到(取自)哪个缓冲区,而且,由于此时生产者、消费者不可能同时访问缓冲区,所以原来的mutex信号量也不再需要。

《操作系统精髓与设计原理·第五版》练习题及答案

《操作系统精髓与设计原理·第五版》练习题及答案

《操作系统精髓与设计原理·第五版》练习题及答案第1章计算机系统概述1.1、图1.3中的理想机器还有两条I/O指令:0011 = 从I/O中载⼊AC0111 = 把AC保存到I/O中在这种情况下,12位地址标识⼀个特殊的外部设备。

请给出以下程序的执⾏过程(按照图1.4的格式):1.从设备5中载⼊AC。

2.加上存储器单元940的内容。

3.把AC保存到设备6中。

假设从设备5中取到的下⼀个值为3940单元中的值为2。

答案:存储器(16进制内容):300:3005;301:5940;302:7006步骤1:3005->IR;步骤2:3->AC步骤3:5940->IR;步骤4:3+2=5->AC步骤5:7006->IR:步骤6:AC->设备 61.2、本章中⽤6步来描述图1.4中的程序执⾏情况,请使⽤MAR和MBR扩充这个描述。

答案:1. a. PC中包含第⼀条指令的地址300,该指令的内容被送⼊MAR中。

b. 地址为300的指令的内容(值为⼗六进制数1940)被送⼊MBR,并且PC增1。

这两个步骤是并⾏完成的。

c. MBR中的值被送⼊指令寄存器IR中。

2. a. 指令寄存器IR中的地址部分(940)被送⼊MAR中。

b. 地址940中的值被送⼊MBR中。

c. MBR中的值被送⼊AC中。

3. a. PC中的值(301)被送⼊MAR中。

b. 地址为301的指令的内容(值为⼗六进制数5941)被送⼊MBR,并且PC增1。

c. MBR中的值被送⼊指令寄存器IR中。

4. a. 指令寄存器IR中的地址部分(941)被送⼊MAR中。

b. 地址941中的值被送⼊MBR中。

c. AC中以前的内容和地址为941的存储单元中的内容相加,结果保存到AC中。

5. a. PC中的值(302)被送⼊MAR中。

b. 地址为302的指令的内容(值为⼗六进制数2941)被送⼊MBR,并且PC增1。

第2章习题分析解析(可编辑修改word版)

第2章习题分析解析(可编辑修改word版)

第二章习题一、判断题1.计算机的性能指标完全由CPU 决定。

2.RAM 中的信息在计算机断电后会全部丢失。

3.存储地址是存储器存储单元的编号,CPU 要存取某个存储单元的信息,一定要知道这个存储单元的地址。

4.通常把计算机的运算器、控制器及内存储器称为主机。

5.由于硬盘的外部传输速率要小于内部传输速率,所以外部传输速率的高低是评价一个硬盘整体性能的决定性因素。

6.存储容量是数码相机的一项重要性能,不论拍摄质量如何,存储容量大的数码相机可拍摄的相片数量肯定比存储容量小的相机多。

7.计算机硬件从逻辑上讲包括CPU、内存储器、外存储器、输入设备和输出设备等,它们通过系统总线互相连接。

8.PC 机主板上有一个集成电路芯片是CMOS 存储器,主要存放着计算机硬件工作时所设置的一些参数,这个存储器是非易失性存储器。

9.CD-R 光盘是一种能够多次读出和反复修改已写入数据的光盘。

10.计算机的性能主要由CPU 决定,CPU 的运算速度又与CPU 的工作频率密切相关。

因此,主频为2GHz Pentium4 作为CPU 的一台PC 机,比使用主频为1GHz Pentium4 作为CPU 的PC机速度高一倍。

11.PC 机的主板上有电池,它的作用是在计算机断电后,给CMOS 芯片供电,保持该芯片中的信息不丢失。

12.大部分数码相机采用CCD 成像芯片,芯片中像素越多,可拍摄的图像最高分辨率(清晰度)就越高。

13.计算机中总线的重要指标之一是带宽,它指的是总线中数据线的宽度,用二进位数目来表示(如16 位,32 位总线)。

14.计算机常用的输入设备为键盘、鼠标,常用的输出设备有显示器、打印机。

15.目前市场上有些PC 机的主板已经集成了许多扩充卡(如声卡、以太网卡、显示卡)的功能,因此不再需要插接相应的适配卡。

16.I/O 操作的启动需要CPU 通过指令进行控制。

17.为了提高CPU 访问硬盘的工作效率,硬盘通过将数据存储在一个比其速度快得多的缓冲区来提高与CPU 交换的速度,这个区就是高速缓冲区,它是由DRAM 芯片构成的。

操作系统第二章练习题与答案

操作系统第二章练习题与答案

C.DCT D.FCB5.一个进程被唤醒,意味着该进程 D 。

A.重新占有CPU B.优先级变为最大C.移至等待队列之首 D.变为就绪状态6.由各作业JCB形成的队列称为 C 。

A.就绪作业队列 B.阻塞作业队列C.后备作业队列 D.运行作业队列7.既考虑作业等待时间,又考虑作业执行时间的作业调度算法是 A 。

A.响应比高者优先B.短作业优先C.优先级调度D.先来先服务8.作业调度程序从处于 D 状态的队列中选取适当的作业投入运行。

A.就绪 B.提交C.等待 D.后备9. A 是指从作业提交系统到作业完成的时间间隔。

A.周转时间 B.响应时间C.等待时间 D.运行时间10.计算机系统在执行 C 时,会自动从目态变换到管态。

A.P操作 B.V操作C.系统调用 D.I/O指令三、问答1.在多道程序设计系统中,如何理解“内存中的多个程序的执行过程交织在一起,大家都在走走停停”这样一个现象?答:在多道程序设计系统中,内存中存放多个程序,它们以交替的方式使用CPU。

因此,从宏观上看,这些程序都开始了自己的工作。

但由于CPU只有一个,在任何时刻CPU只能执行一个进程程序。

所以这些进程程序的执行过程是交织在一起的。

也就是说,从微观上看,每一个进程一会儿在向前走,一会儿又停步不前,处于一种“走走停停”的状态之中。

2.什么是“原语”、“特权指令”、“系统调用命令”和“访管指令”?它们之间有无一定的联系?答:特权指令和访管指令都是CPU指令系统中的指令,只是前者是一些只能在管态下执行的指令,后者是一条只能在目态下执行的指令。

原语和系统调用命令都是操作系统中的功能程序,只是前者执行时不能被其他程序所打断,后者没有这个要求。

操作系统中有些系统调用命令是以原语的形式出现的,例如创建进程就是一条原语式的系统调用命令。

但并不是所有系统调用命令都是原语。

因为如果那样的话,整个系统的并发性就不可能得到充分地发挥。

3.操作系统是如何处理源程序中出现的系统调用命令的?答:编译程序总是把源程序中的系统调用命令改写成为一条访管指令和相应的参数。

第2章 进程管理课后习题解答

第2章 进程管理课后习题解答

第题中,如果修改问题中的同步算法,要求 对写进程优先,即一旦写进程到达,后续的读者进程必须等待, 而无论是否有读者进程在读文件。写出相应进程的程序段。 semaphore fmutex=1, rmutex=1, wmutex=1;que=1;
int rcount=0, wcount=0; void main() { parbegin(reader, writer); }
12
void reader { while(1) { wait(que); wait(rmutex); if(0==readcount) wait(fmutex); readcount++; signal(rmutex); signal(que); …. begin to read wait(rmutex); readcount--; if(readcount==0) signal (fmutex); signal(rmutex); } }
读者—写者问题(读优先) 读者 写者问题(读优先) 写者问题 semaphore rmutex=1,wmutex=1; int readcount=0; = void main() { parbegin(reader,writer); }
读者进程: 读者进程: void reader() { while(1) { wait(rmutex); if (readcount==0) wait(wmutex); readcount++; signal(rmutex); … 读操作 wait(rmutex); readcount--; if (readcount==0) signal(wmutex); signal(rmutex); } }
18
chopstick[ ={1 semaphore chopstick[5]={1,1,1,1,1}; viod main() { parbegin(P0(),P1(),P2(),P3(),P4()); parbegin(P0(),P1(),P2(),P3(),P4()); } Pi() /*i=0,1,2,3,4*/ { while(1) { wait(chopstick[i]); [ ] wait(chopstick[(i+1)%5]); [ ] eating; … signal(chopstick[i]); [ ] signal(chopstick[(i+1) %5]); [ ] thinking; } }

操作系统复习资料全第二章 进程管理(3)-经典同步问题

操作系统复习资料全第二章 进程管理(3)-经典同步问题
的进程数,即系统中因请求该类资源而被阻塞的进程数目。
信号量S的值除初始化(为资源数目)外,其值只能通过原
语wait和signal,也称P、V操作来改变。
整型信号量的P、V操作描述
wait和signal
wait(S): while S≤0 do no-op S∶=S-1; signal(S): S∶=S+1; 解释:P或wait操作:当S≤0时,说明无资源可用,一直测试直到其他进程 释放该类资源。
1. 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少 有一位哲学家能够进餐。(增加一个总资源信号量S=4)
2. 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐 (AND型信号量)。
3. 规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子; 而偶数号哲学家则相反。按此规定,将是1、 2号哲学家竞争1号 筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数 号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家 能获得两只筷子而进餐。
1. 利用记录型信号量解决读者 为实现Reader与Writer进程间在读或写时的互斥而设置了一个互 斥信号量Wmutex; 设置一个整型变量Readcount表示正在读的进程数目; 当 Readcount=0 时,表示尚无 Reader 进程在读时, Reader 进 程才需要执行 Wait(Wmutex) 操作。若 wait(Wmutex) 操作成功, 做Readcount+1和读文件操作; 当Reader进程在执行了Readcount减1操作后其值为0时,才须 执行signal(Wmutex)操作,以便让Writer进程写; 又因为Readcount是一个可被多个 Reader进程访问的临界资源, 因此,应该为它设置一个互斥信号量rmutex。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法实现这个控制。
2.公交车行驶问题
void Driver () { do { 启动开车; 正常行车; 到站停车; } while(TRUE); }
void Conductor () { do { 开车门; 关车门; 卖票; } while(TRUE); }
信号量设置:用两个信号量s1、s2,分别表示可以 开门和可以开车,其初始值都为0。
1.单行隧道问题
分析:解决p2“饥饿”现象的方法:再设一个信号量k,让p1、p2排队,可 以做到p1方向比p2方向晚来的车辆被k阻止。 int c=0,m=1,sd=1,k=1; 问题: cobegin 1. 若P1过隧道,则后续车辆可以跟进; P1() // P2() 2. 若p2过隧道,一次只能过一辆 。 P1() coend P2() { P(k); P(sd); 通过隧道; V(sd); V(k); } { P(k); /* 与P2一起排队 */ P(m); /* m1控制计数器c */ if (c== 0 ) P(sd); /*P1第一辆车通过时占有隧道*/ c=c+1; V(m); V(k); 通过隧道; P(m); c=c-1; if(c==0) V(sd); /*P1最后一辆车通过后释放隧道 */ V(m); }
返回
2.公交车行驶问题
Semaphore s1=0, s2=0;
void Driver () { do { wait (s2); 启动开车; 正常行车; 到站停车; signal (s1); } while(TRUE); } void Conductor () { do { wait (s1); 开车门; 关车门; signal (s2); 卖票; } while(TRUE); }
单行隧道问题再分析
例:单行隧道问题。对一个单行的隧道进行模拟,为了避免 死锁,必须防止汽车同时从两端进入隧道。如果一次只允 许一辆车通过隧道,两个方向按车辆到达的先后顺序依次 通过,请用pv操作设计一个算法实现这个控制。
P1() { 通过隧道; }
P2() { 通过隧道; }
单行隧道问题再分析
分析:解决p2可以过多辆车的方法:按照读者-读者问题处理。即:p1 问题: 为读者,p2为读者,但两个读者不能同时读 。 int若 c1=c2=0,m1=m2=1,sd=1; //c1、c2为计数器,m1、m2 为互斥信 1. P1过隧道,则后续车辆可以跟进,有可能使 p2“ 饥饿” 号量 2. 若 P2过隧道,则后续车辆也可以跟进,有可能使p1“饥饿” cobegin P1() // P2() coend P1() P2() { { P(m1); P(m2); if (c1== 0 ) P(sd); if (c2== 0 ) P(sd); c1=c1+1; c2=c2+1; V(m1); V(m2); 通过隧道; 通过隧道; P(m1); P(m2); c1=c1-1; c2=c2-1; if(c1==0) V(sd); if(c2==0) V(sd); V(m1); V(m2); } }
返回
3. 和尚挑水问题
寺庙里有多个大、小和尚,一水缸。小和
尚取水,大和尚饮水。水缸容积 10 桶水,水取
自同一水井,水井每次只容一个桶取水,桶总
数3个,每次只能一个桶在水缸中入、取水。试
用 P 、 V 操作描述小和尚取水、大和尚饮水的过
程。
3. 和尚挑水问题
void shaveling() { do { 从水井打水; 往缸中放水 }while(TRUE); } void bonze() { do { 从缸中取水; 饮水; }while(TRUE); }
一方向等待的车辆进入隧道行驶。请用PV操作设计一个算
法实现这个控制。
1.单行隧道问题
例:单行隧道问题。对一个单行的隧道进行模拟,为了避免 死锁,必须防止汽车同时从两端进入隧道。如果一次只允 许一辆车通过隧道,两个方向按车辆到达的先后顺序依次 通过,请用pv操作设计一个算法实现这个控制。
P1() { 通过隧道; }
1.单行隧道问题
int countab=0,countba=0; Semaphore s=1, mutexab=1,mutexba=1; void Pab() { do { wait(mutexab);countab++; if (countab==1) then wait(s); signal(mutexab); 从A端驶入,到B端驶出; wait(mutexab); countab- -; if (countab==0) then signal(s) signal(mutexab); } while(TRUE); }
单行隧道问题再分析
假设:问题改为:一旦一辆车进入,则同一方向的车可以立即跟进,隧道最多只能过4辆 问题: 车,如何修改算法? 是p1优先或p2优先的方法。 int 1. c1=c2=0,m1=m2=1,sd=1,k1=4,k2=4 ;//c1、c2为计数器,m1、m2为互斥信号量 cobegin //k1 、 k2为控制各自方向上通过的车辆数 2. p1后续车辆可以跟进, p2 后续车辆也能跟进。 P1() // P2() 3. P1会产生“饥饿”的现象,p2也会产生“饥饿”的现象。 coend
1.单行隧道问题
分析:解决p2可以过多辆车的方法:按照读者-读者问题处理。即:p1 为读者,p2为读者,但两个读者不能同时读 。 int c1=c2=0,m1=m2=1,sd=1; //c1、c2为计数器,m1、m2、sd为互 斥信号量 cobegin P1() // P2() coend P1() P2() { { P(m1); P(m2); if (c1== 0 ) P(sd); if (c2== 0 ) P(sd); c1=c1+1; c2=c2+1; V(m1); V(m2); 通过隧道; 通过隧道; P(m1); P(m2); c1=c1-1; c2=c2-1; if(c1==0) V(sd); if(c2==0) V(sd); V(m1); V(m2); } }
mutex1=mutex2=1;分别代表可以用水井和水缸 empty=10; 水缸的容量 full=0; 水缸中的水量 count=3;水桶个数
4. 哲学家问题
对教程描述的哲学家问题,规定奇数号的哲
学家先拿起他左边的筷子,然后再去拿他右边的筷
子;而偶数号的哲学家则相反。按此规定,用P、
V操作设计一个算法实现这个控制。
进程同步与互斥习题分析
解题步骤: 1. 确定进程的个数及每个进程的工作; 2. 确定关键工作步(需要控制的); 3. 确定信号量表示的含义(开始或结束); 4. 写出伪代码。
1.单行隧道问题
对一个单行的隧道进行模拟,为了避免碰撞,必须
防止汽车同时从两端(A、B端)进入隧道。现要设计一个 自动管理系统,管理规则如下:当隧道中有车辆在行驶时 同方向的车可以驶入隧道,但另一方向的车必须在隧道外 等待;当隧道中无车时,到达 A 端(或 B 端)的车辆可以 进入隧道,但不能从A、B端同时驶入隧道;当某方向在隧 道中行驶的车辆使出了隧道且无车辆进入隧道时,应让另
P2() { 通过隧道; }
1.单行隧道问题
分析:本题涉及两个进程: P1和P2。隧道是一个临界资源 问题: ,一次只能被一辆车占有,可以把它看作互斥问题。 两个方向车辆通过隧道的交换比较平凡,系统效率不高。 设:一个互斥信号量sd=1,表示隧道是否可用。 int sd=1; cobegin P1() // P2() coend
P1() { P(sd); 通过隧道; V(sd); } } P2() { P(sd); 通过隧道; V(sd);
1.单行隧道问题
问题: 分析:为了提高效率,把问题改为:一旦一辆车进入,则同一方向的车 1. 若 P1过隧道,则后续车辆可以跟进; 可以立即跟进。写出用信号量解决此问题的代码,不考虑“饥饿”的 情况。 (按照读者-写者问题处理) 2. 若 p2过隧道,一次只能过一辆; 3个信号量:c表示计数器,m表示对临界资源计数器的控制, sd表 3.设: P1不会产生“饥饿”的现象,而 p2会产生“饥饿”的现象。
示对临界资源隧道的控制,即隧道是否可用。 int c=0,m=1,sd=1; P1() cobegin { P(m); /* m控制计数器c*/ P1() // P2() if (c== 0 ) P(sd); /*p1第一辆车通过时占有隧道*/ coend c=c+1; P2() V(m); { 通过隧道; P(m); P(sd); c=c-1; 通过隧道; if(c==0) V(sd); /*p1最后一辆车通过后释放隧道 */ V(sd); V(m); } }
1.单行隧道问题
void Pab() { do { 从A端驶入,到B端驶出; } while(E); }
void Pba () { do { 从B端驶入,到A端驶出; } while(TRUE); }
计数器:countab、countba分别表示A->B、B->A的车辆数; 信号量:s、mutexab、mutexba;
4. 哲学家问题
semaphore chopstick[5]={1,1,1,1,1}; void philosopher(int i) { do { think(); eat(); } while(true); }
4. 哲学家问题
semaphore chopstick[5]={1,1,1,1,1}; void philosopher(int i) { while(true) { think(); if(i%2 == 0) {//偶数哲学家,先右后左。 wait (chopstick[ i + 1 ] mod 5) ; wait (chopstick[ i]) ; eat(); signal (chopstick[ i + 1 ] mod 5) ; signal (chopstick[ i]) ; } else {//奇数哲学家,先左后右。 wait (chopstick[ i]) ; wait (chopstick[ i + 1 ] mod 5) ; eat(); signal (chopstick[ i]) ; signal (chopstick[ i + 1 ] mod 5) ; } }
相关文档
最新文档