操作系统作业二

  1. 图书馆为师生提供了论文查重服务。在查重室有一个技术人员专门进行查重工作,有一张椅子给正在查重的师生坐(称为查重椅),有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);
}

室外等待部分应该要写代码的,但是我不想写了。

  1. 有5个任务A、B、C、D、E,它们几乎同时到达系统,预计它们的运行时间为10min,6min,2min,4min,8min,其优先级分别为3,5,2,1,4,这里5为最高优先级。对于下列每一种调度算法,说明调度顺序,并计算其平均周转时间(不考虑进程切换开销):
    (1) 优先级调度算法;
    平均周转时间:(6+14+24+26+30)/ 5 = 20(min)
    (2) 时间片轮转算法(时间片长度假设为2min)
    老师给的答案:
    在这里插入图片描述我自己写的(考虑优先级):
    在这里插入图片描述

  2. 某系统的进程出现如下图所示的状态变化:
    在这里插入图片描述
    请问:
    (1)分析该系统采用的是何种进程调度算法?
    从图中可以看出在⑤、⑥和就绪队列之间存在一个环路,有的进程在
    执行中被剥夺处理机,并被排入就绪队列的末尾,等待下一次调度,同时进
    程调度程序又调度就绪队列的队首进程到处理机上运行,因此是典型的时间
    片轮转调度算法。
    (2)写出图中所标示的6种状态变化及原因。
    ① 运行→阻塞:等待磁盘读操作的完成;
    ② 运行→阻塞:等待打印操作的完成;
    ③ 阻塞→就绪:所等待的打印操作已经完成;
    ④ 阻塞→就绪:所等待的磁盘读操作已经完成;
    ⑤ 就绪→运行:处理机调度;
    ⑥ 运行→就绪:当前进程时间片到。

  3. 某系统的进程状态变迁图如下图所示(设该系统的进程调度方式为非剥夺方式)。
    在这里插入图片描述
    (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 量大的进程(高优先级) ,但通过给计算型进程
分配更长的时间片也适当照顾了计算型进程。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值