习题1.4
程序A | CPU 20ms | IO2 30ms | CPU 30ms | IO2 20ms | CPU 30ms | IO1 20ms 2023年高速免费时间日期最新 | |
程序B | IO2 30ms | CPU 30ms | IO1 40ms | 冰箱压缩机不启动CPU 30ms | IO1 20ms | ||
程序C | IO1 20ms | CPU 50ms | IO1 30ms | CPU 20ms | IO2 30ms | ||
歌手第五季单位ms10018014015060709017011013030020
程ACPU X
程B
CPU Y程C
I/O1
I/O2
假定在具有2个CPU为X和Y的多机系统中,以多道程序设计方式,按如下条件执行上述3个程序,条件如下:
(1)X和Y运算速度相同,整个系统可以同时执行2个程序,并且在并行处理程序时速度也不下降。
(2)X的优先级比Y高,即当X、Y均能执行程序时,由X去执行。
(3)当多个程序同时请求CPU或I/O设备时,按程序A、B、C的次序分配所请求的资源。
(4)除非请求输入输出,否则执行中的程序不会被打断,也不会把控制转给别的CPU。而且因输入输出而中断的程序再重新执行时,不一定仍在同一借方和贷方CPU上执行。
(5)控制程序的介入时间可忽略不计。
(6)程序A、B、C同时开始执行。
求:(1)程序A、B、C同时开始执行到执行完毕为止的时间。(2)X和Y的使用时间。
由上图可以看出
(1)A 170ms B 150ms C 180ms
90ms
的使用时间Y 120ms 的使用时间(2)X.
习题3.4
1)引起各种状态转换的典型原因有哪些?
运行态→就绪态 时间片到或被更高优先级的进程抢占
就绪态→运行态 被调度
运行态→阻塞态 等待某一事件的发生而事件未发生
阻塞态→就绪态 等待的事件已发生
2)当观察系统中某些进程时,能够看到某一进程的一次状态转换能引起另一个进程的
一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换2?
就绪队列中只有一个进程
3)如图315,说明是否会发生下述因果转换: .2→1 会,在抢占式调度的情况下,更高优先级的进程到达,或时间片到
3→2 会,一个正在运行的进程因等待某一事件的发生而转入阻塞态,而就绪队列中有进程在等待运行
4→1 不会
(3)挂起状态和阻塞状态有何区别?在具有挂起操作的系统中,进程的状态有哪些?如何变迁?
被挂起进程处于静止状态,不能参与竞争CPU,直到被激活,但被挂起进程可能并不缺少资源;而阻塞进程是由于等待某一事件的发生,处于缺乏资源的状态。
(4)在创建一个进程时需要完成的主要工作是什么?在撤消一个进程时需要完成的主要工作又是什么?
创建进程的主要工作是为被创建进程创建一个PCB,并填入相应的初始值。并把该进程插入就绪队列。
撤消该进程的所有子孙进程。在撤消的过程中,被撤消进程的所有系统资源(内存、外设)应全部释放出来归还给系统,并将它们从所有队列中移出。如果被撤消进程正在处理器上运行,则要调用进程调度程序将处理器分配给其它进程。
习题4.5
5.应用题
(1)有三个并发进程R、W和W,共享两个各可存放一个数的缓冲区B、B。进程2121R每次从输入设备读入一个数,若读入的是奇数,则将它存入B中,若读入的是偶数,将1它存入B中;当B中有数,由进程W将其打印输出;当B中有数,进程W将其打印输22112出。试编写保证三者正确工作的程序。
struct semaphone B1_Empty, B1_Full, B2_Empty, B2_Full;
B1_Empty.value=1;
B1_Full.value=0;
B2_Empty.value=1;
B2_Full.value=0;
void R( )
{ int a;
While(1)
{ read a number a;
if (a%2)
{ wait(B1_Empty);
put a in B1;
signal(B1_Full);
}
else
{ wait(B2_Empty);
put a in B2;
signal(B2_Full);
}
}
} 国庆作文300字作文
void W1( )
{ while(1)
{ wait(B1_Full);
print a number from B1;
signal(B1_Empty);
}
}
void W2( )
{ while(1)
{ wait(B2_Full);
print a number from B2;
signal(B2_Empty);
}
}
void main( )
{ parbegin(R, W1, W2);
}
(4)桌上有一空盘,可放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子;儿子专等吃盘中的桔子;女儿专等吃盘中的苹果。规定一次只能放一只水果,试写出爸爸、儿子、女儿正确同步的程序。
struct semaphone plate, apple, orange;
plate.value=1;
apple.value=0;
orange.value=0;
void father( )
{ while(1)
{ prepare an apple or orange;
wait(plate);
put the apple or orange in plate;
if() signal(apple); //如果放的是苹果 Apple放入的是else signal(orange); //如果放的是桔子
}
}
void son( )
{ while(1)
{ wait(orange);
get an orange from the plate;
signal(plate);
}
}
void daughter( )
{ while(1)
{ wait(apple);
get an apple from the plate;
signal(plate);
}
}
Void main( )
{
parbegin(father, son, daughter);
}
互斥与同步区别:互斥是为了保证资源一次只能由一个进程使用;而同步是为了实现进程通信,即传递资源当前的状态是否适合另一个进程进行使用。
(5)三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用prodcuce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述(2009年全国硕士研究生入学考试题)。
定义信号量full_odd控制P1与P2之间的同步;full_even控制P1会议礼仪与P3之间的同步;empty控制生产者与消费者之间的同步(是否可生产);mutex控制进程间互斥使用缓冲区。
struct semaphone full_odd, full_even, mutex, empty;
full_odd.value=0;
full_even.value=0;
mutex.value=1;
empty.value=N;
void P1( )
{ int x;
while(1)
{ x=produce( );
wait(empty);
wait(mutex);
put( );
if(x%2==0) signal(full_even);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论