【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);: 哲学家释放了一个"房间"的位置,允许其他哲学家进入。

相关推荐
灰勒塔德5 分钟前
Linux文件IO
linux·运维·服务器
花姐夫Jun1 小时前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
是店小二呀2 小时前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化
BUG 4042 小时前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea2 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
深海的鲸同学 luvi2 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
dowhileprogramming3 小时前
Python 中的迭代器
linux·数据库·python
过过过呀Glik3 小时前
在 Ubuntu 服务器上添加和删除用户
linux·服务器·ubuntu
Tesseract_95275 小时前
ioctl回顾
linux
Java小白中的菜鸟5 小时前
centos7的磁盘扩容
linux·运维·服务器