【SCAU操作系统】期末复习应用题例题解析

1、

5 个作业 A~E 同时到达一个单 CPU 系统,且以 A~E 的顺序进入就绪队列。估计运行
时间分别为 10,6,2,4 和 8 分钟,优先级分别为 3,5,2,1 和 4(其中 5 为最高优先级)。
假设它们都是纯计算型作业,系统开销时间忽略不计。对下面的调度算法,计算平均周转
时间。
1)优先级调度。
2)短作业优先。
3)时间片为 1 分钟的轮转法。

答:评分标准:每个 3 分。

  1. 优先级调度:调度顺序 BEACD,平均周转时间=20 分钟。
  2. 短作业优先:调度顺序 CDBEA,平均周转时间=14 分钟。
  3. 时间片为 1 分钟的轮转法:周转时间 C-8,D-17,B-23,E-28,A-30。平
    均周转时间=21.2 分钟。
    周转时间是指作业从提交到完成所经历的时间。
    1)优先级调度:
    优先级从高到低:B(5),E(4),A(3),C(2),D(1)
    计算周转时间:
    B 的周转时间 = B 的运行时间 = 6 分钟
    E 的周转时间 = B 的运行时间 + E 的运行时间 = 6 + 8 = 14 分钟
    以此类推
    A 24
    C 26
    D 30
    平均周转时间=100/5=20分钟

2)短作业优先:
即 C(2),D(4),B(6),E(8),A(10)。
计算周转时间:
C 的周转时间 = C 的运行时间 = 2 分钟
D 的周转时间 = C 的运行时间 + D 的运行时间 = 2 + 4 = 6 分钟
以此类推
平均周转时间=70/5=14分钟

3)时间片为 1 分钟的轮转法:
按照时间片轮转,每个作业先运行 1 分钟,直到完成或时间片用完。
计算周转时间:
C 第二轮完成,周转时间 = 8 分钟
D 剩下四个作业,17分钟
B 剩下三个作业,23分钟
E 28分钟
A 30分钟
平均周转时间=106/5=21.2分钟

2、

不死锁的哲学家进餐问题。五支叉子放在五位哲学家之间,进餐前哲学家必须先拿起左边叉子,再拿起右边叉子,吃完后放下两支叉子。为防止死锁,只允许四位哲学家同时拿起一支或两支叉子。用信号量方法实现此不死锁的哲学家进餐问题。

答:设信号量:评分标准:每个信号量 1.5 分,共 3 分

semaphore fork[5] = {1};//每把叉子就是一个临界资源。
semaphore room = {4};//至多允许四人同时拿起叉子
int i;
void philosopher (int i)
{
    while (true) {
        think();
        wait (room); 评分标准:每个 wait(), signal() 1 分,共 6 分
        wait (fork[i]);
        wait (fork [(i+1) mod 5]);
        eat();
        signal (fork [(i+1) mod 5]);
        signal (fork[i]);
        signal (room);
    }
}

semaphore fork[5] = {1};: 定义了一个数组,其中每个元素都是一个信号量,表示一把叉子。初始值都是1,表示每把叉子都是可用的。
semaphore room = {4};: 这是另一个信号量,用于控制同时拿起叉子的哲学家数量。初始值为4,意味着最多可以有4个哲学家同时拿起叉子(因为第五个哲学家需要两把叉子,所以同时只能有4个哲学家拿起叉子)。

void philosopher (int i): 这是一个函数,表示第i个哲学家的行为。
while (true): 哲学家不断地重复思考和吃饭的过程。
think();: 哲学家在思考。
wait (room);: 哲学家等待有足够的叉子可用。如果room的值大于0,则room减1,哲学家可以进入;否则,哲学家需要等待。
wait (fork[i]); 和 wait (fork [(i+1) mod 5]);: 哲学家等待他左边和右边的叉子。只有当两把叉子都可用时(即信号量的值大于0),哲学家才能拿起它们并开始吃饭。
eat();: 哲学家在吃饭。
signal (fork [(i+1) mod 5]); 和 signal (fork[i]);: 哲学家吃完饭后,释放他左边和右边的叉子。这通过增加相应信号量的值来实现。
signal (room);: 哲学家释放了一个"房间"的位置,允许其他哲学家进入。

相关推荐
blessing。。34 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
运维&陈同学2 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
周末不下雨2 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
哎呦喂-ll3 小时前
Linux进阶:环境变量
linux
Rverdoser3 小时前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
PigeonGuan3 小时前
【jupyter】linux服务器怎么使用jupyter
linux·ide·jupyter
东华果汁哥4 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
咖喱鱼蛋4 小时前
Ubuntu安装Electron环境
linux·ubuntu·electron