【常用进程调度算法】

常用进程调度算法

考虑5个进程P1、P2、P3、P4、P5,它们的创建时间、运行时间及优先数如下表所示。规定进程的优先数越小,优先级越高。试描述在采用下述几种调度算法时各个进程运行过程,并计算采用每种算法时的进程平均周转时间。假设忽略进程的调度时间。
① 先来先服务调度算法。
② 短进程优先调度算法。
③时间片轮转调度算法(时间片为1ms)。
④非剥夺式优先级调度算法。
⑤剥夺式优先级调度算法。
⑥最高响应比优先调度算法。

进程创建时间运行时间(ms)优先数
P1033
P2265
P3441
P4652
P5824

①先来先服务调度算法

按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务调度算法是一种非抢占式的算法,先进入就绪队列的进程,先分配处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件发生而不能继续运行时才释放处理机。

进程进入时间运行时间(ms)开始执行时间完成时间周转时间
P103033
P226397
P3449139
P465131812
P582182012

平均周转时间:T=(3+7+9+12+12)/ 5=8.6ms
平均带权周转时间:W=(3/3+7/6+9/4+12/5+12/2) / 5=2.56

②短进程优先
进程进入顺序:P1,P2,P5,P3,P4

进程进入时间运行时间(ms)开始执行时间完成时间周转时间
P103033
P226397
P344111511
P465152014
P5829113

平均周转时间T=(3+7+11+14+3)/ 5=7.6ms
平均带权周转时间W=(3/3+7/6+11/4+14/5+3/2) / 5=1.84

③时间片轮转调度算法(时间片为1ms)
当时间片q=1时,列出下表,找出运行序列:
在这里插入图片描述

进程进入时间运行时间(ms)完成时间周转时间
P10344
P2261816
P3441713
P4652014
P582157

平均周转时间T=(4+16+13+14+7)/ 5=10.8ms
平均带权周转时间W=(4/3+16/6+13/4+14/5+7/2) / 5=2.15

④非剥夺式优先级调度算法

进程创建时间运行时间(ms)优先数完成时间周转时间
P103333
P226597
P3441139
P46521812
P58242012

平均周转时间T=(3+7+9+12+12)/ 5=8.6ms
平均带权周转时间W=(3/3+7/6+9/4+12/5+12/2) / 5=2.56

⑤剥夺式优先级调度算法
在这里插入图片描述

进程创建时间运行时间(ms)优先数完成时间周转时间
P103333
P22652018
P344184
P4652137
P5824157

平均周转时间T=(3+18+4+7+7)/ 5=7.8ms
平均带权周转时间W=(3/3+18/6+4/4+7/5+7/2) / 5=1.98

⑥最高响应比优先调度算法

响应比:Rp =1+W/T
在时刻9时全部作业进入:在时刻9计算响应比:
P3的响应比:R3=1+(9-4)/4=2.25
P4的响应比:R4=1+(9-6)/5=1.6
P5的响应比:R5=1+(9-8)/2=1.5
选择P3进入运行,直到13时结束,在时刻13时进行调度
在时刻13时计算响应比:
P4的响应比:R4=1+(13-6)/5=2.4
P5的响应比:R5=1+(13-8)/2=3.5
选择P5进入运行,直到16时结束,最后P4进入

进程创建时间运行时间(ms)优先数完成时间周转时间
P103333
P226597
P3441139
P46522115
P5824168

平均周转时间T=(3+7+9+15+8)/ 5=8.4ms
平均带权周转时间W=(3/3+7/6+9/4+15/5+8/2) / 5=2.28

关于几个时间概念的解释

服务时间:作业需要运行的时间
完成时间 = 开始时间 + 服务时间
等待时间 = 开始时间 - 提交时间
周转时间 = 完成时间 - 提交时间
带权周转时间 = 周转时间 / 服务时间
响应比 = (等待时间 + 服务时间) / 服务时间 = 等待时间/服务时间 + 1

几种算法比较

在这里插入图片描述

  • 17
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
非常好的问题!让我来为您解答。 1. 进程和程序的区别: 程序是静态的代码和数据的集合,是一个文件,是计算机执行某种功能的指令集合。而进程是程序在执行时的一个实例,是程序运行时的活动状态,是计算机为了完成程序运行而设置的执行环境,包括程序计数器、寄存器、内存、打开的文件等。 可以这么说,程序是静态的,进程是动态的。在计算机中,程序需要被加载到内存中才能运行,一个程序可以对应多个进程,而一个进程只对应一个程序。 2. 系统如何组织进程: 在操作系统中,进程是由进程控制块(PCB)来描述的。每个进程都有一个唯一的进程标识符(PID),操作系统会为每个进程分配一个PCB,PCB中记录了进程的状态、程序计数器、寄存器、内存使用情况、打开文件等信息。 操作系统会通过调度算法来管理进程,按照优先级、时间片轮转等方式来分配CPU时间片,使得每个进程都能得到执行的机会。当一个进程需要等待某些资源(如IO操作)时,操作系统会将该进程挂起,进入等待状态,直到资源可用时再唤醒进程。 3. 常用进程调度算法的实现: 常用进程调度算法有先来先服务、最短作业优先、优先级调度、时间片轮转等。其中,动态优先级调度算法属于优先级调度的一种变体,它根据进程的优先级来分配时间片,优先级高的进程会获得更多的CPU时间片。 下面是一个简单的C程序,用来模拟动态优先级调度算法: ``` #include <stdio.h> #include <stdlib.h> // 进程控制块 typedef struct { int pid; // 进程ID int priority; // 进程优先级 int burst_time; // 进程执行时间 int remaining_time; // 进程剩余执行时间 } Process; // 初始化进程 void init_process(Process *p, int pid, int priority, int burst_time) { p->pid = pid; p->priority = priority; p->burst_time = burst_time; p->remaining_time = burst_time; } // 动态优先级调度算法 void dynamic_priority_scheduling(Process *processes, int n) { int current_time = 0; // 当前时间 int completed = 0; // 已完成的进程数 int i, j; while (completed < n) { int highest_priority = -1; int highest_priority_index = -1; for (i = 0; i < n; i++) { if (processes[i].remaining_time > 0 && processes[i].priority > highest_priority) { highest_priority = processes[i].priority; highest_priority_index = i; } } if (highest_priority_index == -1) { printf("Idle at time %d\n", current_time); current_time++; continue; } processes[highest_priority_index].remaining_time--; current_time++; if (processes[highest_priority_index].remaining_time == 0) { completed++; printf("Process %d completed at time %d\n", processes[highest_priority_index].pid, current_time); } for (j = 0; j < n; j++) { if (j != highest_priority_index && processes[j].remaining_time > 0) { processes[j].priority--; } } } } int main() { int n = 5; // 进程数 Process processes[n]; init_process(&processes[0], 1, 3, 4); init_process(&processes[1], 2, 1, 3); init_process(&processes[2], 3, 4, 2); init_process(&processes[3], 4, 5, 1); init_process(&processes[4], 5, 2, 5); dynamic_priority_scheduling(processes, n); return 0; } ``` 以上就是一个简单的动态优先级调度算法的模拟程序,它可以用来模拟多个进程的调度过程。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值