P2 P3 P4 P5
(3)等待时间: P1 P2 P3 P4 P5 11 13 14 19 1 4 2 9 1 18 19 6 2 7 4 14 FCFS 0 10 11 13 14 SJF 9 0 2 1 4 非抢占优先级 6 0 16 18 1 RR 9 1 5 3 9 2.考虑下面一个系统在某一个时刻的状态。
Allocation Max Available A B C D A B C D A B C D P0 0 0 1 2 0 0 1 2 1 5 2 0 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6 P3 0 6 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6 使用银行家算法回答下面的问题: (1) Need矩阵的内容
(2) 系统是否处于安全状态
(3) 如果从进程P1发来一个请求(0,4,2,0),这个请求是否可以立即满足? 解:
(1)Need矩阵 P0 P1 P2 P3 P4 A 0 0 1 0 0 B 0 7 0 0 6 C 0 5 0 2 4 D 0 0 2 0 2 (2)处于安全状态,先是P0完成,之后P3,之后P2,之后P1,之后P4。 (3)可以立即满足,满足后仍处于安全状态。 补充作业 判断对错
在RR调度中,上下文切换的时间应该小于时间片的长度。 SJF调度算法是最适合分时系统的调度算法。 FCFS调度算法只能是非抢占式的。 如果资源分配图中有环,那么就一定有死锁。 死锁的时候系统一定处于非安全状态。
X X
√
X
√
第三次作业
一、基础作业
1.什么是忙等待?
持续地检测一个变量直到它具有某一个特定值称为忙等待。
2.吸烟者问题:有3个吸烟者和一个供应者。第一个吸烟者有自己的烟草;第二个吸 烟者有自己的纸;第三个吸烟者有自己的火柴。供应者每次随机放两样东西到桌子上 提供给3个吸烟者之中的一个以完成吸烟。请用信号量为吸烟者和供应者进程编写程 序。
Semaphore n[2]={0}; Semaphore s=1;
0代表烟草,1代表纸,2代表火柴. //供应者程序 Void procucer() {
While(1) {
随机生成一个在0~2之间的数i; Wait(s);
将除了i表示的另外两件东西放在桌子上; Signal(n[i]); }
//吸烟者程序 Void smoker(int i) {
While(1) {
Wait(n[i]); Somke(); Signal(s); }
}
二、 补充作业
1.假设有三个进程R、W1、W2共享缓冲区B。B中只能存放一个数。R每次从输入设备中读一个整数放入B中。如果这个整数是奇数,由W1取出打印。如果这个整数是偶数,则由W2取出打印。规定仅当B中没有数据或数据已经被打印才会启动R去读数。W1、W2对B中的数据不能重复打印,当B中没有数据时也不能打印。要求用信号量操作写出R、W1、W2三个进程的程序。(请详细描述所使用变量的含义)
Semaphore s=1;//进程R可以存入缓冲区B的数据个数信号量
Semaphore n[2]={0};//n[0]/n[1]表示进程W1/W2可以从缓冲区B中取出的数据个数; //进程R Void R()
{
While(1) {
读入一个正数m; Wait(s);
将m放入B中; if(m/2!=0) Signa([n[0]); Else
Signal(n[1]); } }
Void w1() {
While(1); {
Wait(n[0]);
从缓冲区B 取数据k; Signal(s); 打印K; } }
Void w1() {
While(1); {
Wait(n[1]);
从缓冲区B 取数据k; Signal(s); 打印K; } }
2.有一个铁笼子,猎手放入老虎,农民放入猪,动物园等待取走老虎,饭店等待取走猪。笼子中只能放入一个动物。请使用信号量方法为猎手、农民、动物园、饭店进程编写程序。
Semaphore cage=1;//可以放入笼子中的动物数量
Semaphore tiger=0;//动物园从笼子中取出老虎的数量 Semaphore pig=0;//饭店从笼子中取出猪的数量 ////////////////////猎手进程 Void hunter() {
While(1)
{
Wait(cage);
将老虎放入笼子; Signal(tiger); } }
Void farmer() {
While(1) {
Wait(cage); 将猪放入笼子; Signal(pig); } }
Void zoo() {
While(1) {
wait(tiger);
从笼子中取出老虎; signal(cage); } }
Void restaurant() {
While(1) {
waitl(pig);
从笼子中取出猪; signal(cage); } }
3.某寺庙,有小、老和尚若干。有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水。水取自一个井中,水井窄,每次只能容一个水桶。水桶总数为3。水缸每次进出也仅1桶水,不可以同时进行。请设置合适的信号量描述小和尚、老和尚取水、入水的算法。
Semaphore bucket=3;//水桶的数量
Semaphore tank=1;//水缸每次能容水桶的数量; Semaphore s=10;//水缸容水桶水量;
Semaphore well=1;//井每次能容水桶的数量; Semaphore empty=0;//水缸中现有的水量; Void youngmonk() {
While(1) {
Wait(bucket); 获得水桶; Wait(well); 井中取水; signal(well); Wait(s); Wait(tank); 倒水入水缸; Signal(tank); Signal(bucket); Signal(empty); } }
Void oldmonk() {
While(1) {
Wait(empty); Wait(bucket); 获得水桶; Wait(tank);
从水缸中取水; Signal(tank); Signal(s);
Signal(bucket); } }
4. 判断对错
(1)一个系统中进程之间可能是独立的也可能是合作的。√ (2)如果用锁来保护临界区可以防止竞争条件。√ (3)一个计数信号量的值只能 取0或者1. X (4)在管程中本地变量只能由本地过程来访问。√ 5. 选择题
(1)关于竞争条件那句话是对的? B A. 几个线程要并发访问同样的数据
B. 几个线程要并发访问并修改同样的数据 C. 只有在执行结果与执行顺序无关的时候发生
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库北工大 操作系统 作业合集(2)在线全文阅读。
相关推荐: