1有一个CPU和两合外设口,D2,且在能够实现抢占式优先级调度算法的多道程序环境中,同时进入优先级由高到低的P,P2, B三个作业,每个作业的处理顺序和使用资源的时间如下: Pi: Dz (30ms) , CPU (10ms) , D, (30ms) , CPU (10ms) P2:D, (20ms),CPU (20ms), Dz(40ms) P3: CPU (30ms) ,D, (20ms) -候设忽略不计其他铺助探作的时间,每个作业的周转时问工八、工z 和工g分别为多少?CPU和口,的利用率各是多少?
时间: 2024-04-05 16:32:01 浏览: 137
根据抢占式优先级调度算法,进程优先级由高到低为P1、P2、P3。如果有多个进程具有相同的优先级,那么按照时间片轮转的方式进行调度。
首先,计算每个进程的完成时间、周转时间和带权周转时间。
P1: 完成时间 = 30 + 10 + 30 + 10 = 80ms,周转时间 = 完成时间 - 到达时间 = 80 - 0 = 80ms,带权周转时间 = 周转时间 / 作业长度 = 80 / (30 + 10 + 30 + 10) = 0.8
P2: 完成时间 = 20 + 20 + 40 = 80ms,周转时间 = 完成时间 - 到达时间 = 80 - 0 = 80ms,带权周转时间 = 周转时间 / 作业长度 = 80 / (20 + 20 + 40) = 0.8
P3: 完成时间 = 30 + 20 = 50ms,周转时间 = 完成时间 - 到达时间 = 50 - 0 = 50ms,带权周转时间 = 周转时间 / 作业长度 = 50 / (30 + 20) = 0.8333
因此,工8为80ms,工2为80ms,工3为50ms。
CPU的利用率为:(10+10+20+30) / 80 = 75%
D2口的利用率为:(30+30+20) / 80 = 87.5%
相关问题
. 有一个 CPU 和两台外设 D1、D2,且在能够实现抢占式优先级调度算法的多道程序环境中, 同时进入优先级由高到低的 P1、P2、P3 三个作业每个作业的处理顺序和使用资源的时 间如下:完成甘特图绘制。 P1:D2(30ms),CPU(10ms),D1(30ms),CPU(10ms) P2:D1(20ms),CPU(20ms),D2(40ms) P3:CPU(30ms),D1(20ms)
以下是完成甘特图绘制:
```
P1: |D2 30ms|CPU 10ms|D1 30ms|CPU 10ms|
P2: |D1 20ms|CPU 20ms|D2 40ms|
P3: |CPU 30ms|D1 20ms|
```
其中,`|` 表示一个作业的开始和结束,作业名称后面的数字表示该作业使用资源的时间。优先级由高到低,也就是说,P1 的优先级最高,P3 的优先级最低。在抢占式优先级调度算法中,如果一个作业的优先级高于正在运行的作业,那么就会抢占 CPU 资源,将正在运行的作业挂起,转而执行优先级更高的作业。
请设计一个两级调度系统,在多道批处理环境下实现最小作业优先算法和最短进程优先算法,并计算系统的平均周转时间。
在设计多道批处理系统中的两级调度时,我们首先需要考虑作业调度阶段和进程调度阶段的具体实现。作业调度阶段负责将待处理的作业根据最小作业优先算法(SJF)排序并分配至主存和外设,例如磁带机;而进程调度阶段则采用最短进程优先算法(PSNF),在进程就绪队列中选择执行时间最短的进程进行处理。
参考资源链接:[多道批处理系统两级调度实战设计:作业与进程调度分析](https://wenku.csdn.net/doc/1wz3sy10si?spm=1055.2569.3001.10343)
为了实现这样的系统,你可以选择C或C++编程语言进行编码。以下是一个简化的实现方案:
1. **作业调度模块**:
- 维护一个作业表,记录每个作业的到达时间、所需运行时间、磁带机数量等信息。
- 根据SJF算法,选择运行时间最短的作业进入系统。
- 分配主存和磁带机资源给选定的作业,确保不会超过系统允许的最大资源使用量。
- 当作业完成或被阻塞时,从作业表中移除,并更新系统的可用资源。
2. **进程调度模块**:
- 维护一个就绪队列,记录所有进入系统的进程信息。
- 使用PSNF算法,当有进程完成或阻塞时,从队列中选取下一个执行时间最短的进程进行处理。
- 如果有新作业到来,可以抢占当前正在执行的进程,以保证系统整体效率。
3. **计算平均周转时间**:
- 周转时间指的是作业从提交到完成的总时间。
- 计算每个作业的周转时间,并累加所有作业的周转时间。
- 平均周转时间等于所有作业周转时间的总和除以作业总数。
4. **代码实现**(示例):
```c
// 假设有一个作业结构体和相关函数,如selectJob()、allocateResources()、calculateTurnaroundTime()等。
// 主函数中调用这些函数来实现两级调度逻辑和计算平均周转时间。
int main() {
// 初始化资源和作业表
// 作业调度循环
while (hasJobs()) {
Job *selectedJob = selectJob(SJF);
if (allocateResources(selectedJob)) {
// 进入进程调度逻辑
while (hasProcesses()) {
Process *nextProcess = selectProcess(PSNF);
executeProcess(nextProcess);
updateTurnaroundTime(nextProcess);
}
}
}
// 计算平均周转时间并输出
printf(
参考资源链接:[多道批处理系统两级调度实战设计:作业与进程调度分析](https://wenku.csdn.net/doc/1wz3sy10si?spm=1055.2569.3001.10343)
阅读全文