- 图书馆为师生提供了论文查重服务。在查重室有一个技术人员专门进行查重工作,有一张椅子给正在查重的师生坐(称为查重椅),有10张椅子供师生坐下等待(称为等候椅)。如果没有查重任务,则技术人员休息;当有查重任务时马上进行查重工作。当师生来到查重室时,如果有空的等候椅就坐下来,如果查重椅也空着,则离开等候椅坐到查重椅上并请技术人员进行查重;如果没有空的等候椅就在室外等待,直到有空的等候椅再进来坐下;查重完成后从查重椅上站起并离开查重室。试用信号量实现师生与查重技术人员之间的同步关系。
老师给的答案:
所用信号量设置如下:
1) 查重椅为空信号量 check_empty,初值为 1
2) 查重椅有人信号量 check_full,初值为 0
3) 查重完毕信号量 check_over,初值为 0
4) 等候椅资源信号量 waitting_chair,初值为 10
semaphore check_empty = 1;
semaphore check_full = 0;
semaphore check_over = 0;
semaphore waitting _chair = 10;
cobegin
program student(i)
{
P(waitting_chair);
P(check_empty);
V(waitting_chair);
V(check_full);
请技术人员进行查重;
P(check_over);
离开查重椅子;
V(check_empty);
}
program checker
{
while(1)
{
P(check_full);
为学生查重;
V(check_over);
}
}
coend
我自己照着书上代码写的:
int waiting;//坐在等候椅上的师生人数
semaphore cust_ready; //查重椅上是否有师生在等待,并用作阻塞技术人员进程
semaphore finished;//师生是否已完成查重
semaphore mutex;//用于师生互斥访问waiting
semaphore chair;//查重椅
void main() {
waiting=0;
cust_resdy=finished=0;
mutex=chair=1;
parbegin(technician,customer-i);
}
void technician() {
do{
wait(cust_ready);
进行查重工作
signal(finished);
}while(1);
}
void customer-i() {
wait(mutex);
if(waiting<10) {
waiting=waiting+1;
signal(mutex);
}
else {
signal(mutex);
室外等待
return 0;
}
wait(chair);
wait(mutex);
waiting=waiting-1;
signal(mutex);
signal(cust_ready);
wait(finished);
signal(chair);
}
室外等待部分应该要写代码的,但是我不想写了。
-
有5个任务A、B、C、D、E,它们几乎同时到达系统,预计它们的运行时间为10min,6min,2min,4min,8min,其优先级分别为3,5,2,1,4,这里5为最高优先级。对于下列每一种调度算法,说明调度顺序,并计算其平均周转时间(不考虑进程切换开销):
(1) 优先级调度算法;
(2) 时间片轮转算法(时间片长度假设为2min)
老师给的答案:
我自己写的(考虑优先级):
-
某系统的进程出现如下图所示的状态变化:
请问:
(1)分析该系统采用的是何种进程调度算法?
从图中可以看出在⑤、⑥和就绪队列之间存在一个环路,有的进程在
执行中被剥夺处理机,并被排入就绪队列的末尾,等待下一次调度,同时进
程调度程序又调度就绪队列的队首进程到处理机上运行,因此是典型的时间
片轮转调度算法。
(2)写出图中所标示的6种状态变化及原因。
① 运行→阻塞:等待磁盘读操作的完成;
② 运行→阻塞:等待打印操作的完成;
③ 阻塞→就绪:所等待的打印操作已经完成;
④ 阻塞→就绪:所等待的磁盘读操作已经完成;
⑤ 就绪→运行:处理机调度;
⑥ 运行→就绪:当前进程时间片到。 -
某系统的进程状态变迁图如下图所示(设该系统的进程调度方式为非剥夺方式)。
(1) 说明一个进程发生变迁3的原因是什么?发生变迁2、变迁4的原因又是什么?
(2) 下述因果变迁是否会发生,如果有可能的话,在什么情况下发生?
①2→5;②2→1;③4→5;④4→2;⑤3→5
(3) 根据此进程状态变迁图叙述该系统的调度策略、调度效果。
(1) 答:
发生变迁3的原因:当运行进程在执行过程中,需要等待某事件的发生才能继续向
下执行时会发生变迁3。
发生变迁 2 的原因:运行进程在分得的时间片 100ms 或 500ms 内未完成,当其时
间片到时将发生变迁 2。
发生变迁4的原因:当等待进程等待的事件发生了,将会发生变迁4。
(2) 答:
①2→5的因果变迁可能发生。条件是:高优先就绪队列非空。
②2→1的因果变迁可能发生,当运行进程的时间片到时发生的变迁2,若此时高优
先就绪队列为空,必然引起低优先就绪队列中的一个就绪进程被调度执行而发生变
迁1。
③4→5的因果变迁不可能发生,因为采用的是非剥调度夺式。
④4→2的因果变迁不可能发生。
⑤3→5 的因果变迁可能发生,条件是:高优先就绪队列非空。
(3) 答:
调度策略:首先调度高就绪队列中的进程(一般是I/O 型进程) 投入运行,给高优先
就绪队列中的进程分配的时间片大小为100ms。只有当高就绪队列中的所有进程全
部运行完或因等待某事件发生处于阻塞状态,高就绪队列中没有进程可运行时,才
调度低优先就绪队列中的进程(一般是计算型进程) ,给低优先就绪队列中的进程分
配的时间片大小为500ms。若一个运行进程时间片100ms 或500ms到时未完成就进
入低优先就绪队列。若某进程在运行期间因等待某事件发生而进入阻塞队列,则当
所等待事件完成后,它将进入高优先就绪队列。
调度效果:这种算法优先照顾了 I/O 量大的进程(高优先级) ,但通过给计算型进程
分配更长的时间片也适当照顾了计算型进程。