sjf调度算法c语言_处理机调度算法

  • 先来先服务FCFS调度算法

  • 短作业优先SJF算法

  • 优先级调度算法PSA

  • 高响应比优先调度算法HRRN

  • 轮转调度算法RR

  • 多级反馈队列调度算法

  • 实现实时调度的基本条件

    • 1. 提供必要的信息

    • 2. 系统处理能力强

    • 3. 采用抢占式调度机制

    • 4. 具有快速切换机制

  • 最早截止时间优先算法EDF

  • 最低松弛度优先算法LLF

  • 优先级倒置问题

    • 解决方法

低级进程调度算法

先来先服务FCFS调度算法

FCFS是最简单的调度算法,既可以用于作业调度,也可用于进程调度。挡在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度。

FCFS很少作为主调度算法了,但经常把它与其它调度算法相结合使用,形成一种更为有效的调度算法。

短作业优先SJF算法

在实际情况中,短作业占有很大比例,为了能使它们比长作业优先执行,而产生了短作业优先调度算法。SJF算法是以作业要求的运行时间来衡量的,处理机会在外存中选择若干个运行时间最短的作业,优先将它们调入内存。

优先级调度算法PSA

基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法是根据优先级进行调度的,这样就可以保证紧迫性作业优先运行。系统会在外存的后备队列中选择若干个优先级最高的作业装入内存

高响应比优先调度算法HRRN

高响应比即考虑了作业的等待时间,又考虑了作业运行时间的调度算法。通过设立一个动态优先级保证所有作业都有机会获得处理机。

优先权等待时间要求服务时间要求服务时间响应时间要求服务时间

轮转调度算法RR

系统中所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每隔一定时间便产生一次中断,去激活进程调度程序进行调度。保证就绪队列中所有进程在确定的时间段内,都能获得一个时间片的处理机时间。

多队列调度算法

由于系统中仅设置一个进程的就绪队列,即低级调度算法是固定的、单一的,无法满足系统中不同用户对进程调度策略的不同要求。多队列调度算法能够一定程度上弥补这一缺点。

该算法将系统中的就绪队列从一个拆分成若干个,将不同类型或性质的进程固定分配在不同的就绪队列。

多级反馈队列调度算法

上述的STF和诸多基于进程长度的抢占式算法在未指明进程长度时无法使用,而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间。

多级反馈队列调度算法的调度机制描述如下:

  1. 设置多个就绪队列。为每个队列赋予不同的优先级,第一个最高,后面逐个降低。算法为不同队列分配的执行时间片时间也不一样。
  2. 每个队列都采用FCFS算法。当新进程进入内存后,首先将它放入第一队列的末尾,到它执行时如果能在时间片内完成就将其撤离系统。如果一个时间片结束时尚未完成,就将其转入第二队列的末尾等待调度;然后重复这一操作,当降到n队列之后,便采取RR方式运行。
  3. 按队列优先级调度。调度程序首先调度最高优先级队列中的诸进程运行,仅当前一个队列空时,才调度后面队列的进程运行。
5e5ff5d805997d58d69f6a215c7b520d.png
多级反馈调度算法

实时系统中的调度算法

实现实时调度的基本条件

1. 提供必要的信息

  1. 就绪时间
  2. 开始截止时间和完成截止时间
  3. 处理时间
  4. 资源要求
  5. 优先级

2. 系统处理能力强

不至于因为处理机处理能力不够强而导致某些实时任务得不到处理

3. 采用抢占式调度机制

方便执行关键性程序和临界区

4. 具有快速切换机制

  1. 对中断的快速响应能力
  2. 快速的任务分派能力

实时任务的调度都十分简单,这里不做细致讲解

最早截止时间优先算法EDF

任务的截止时间愈早,其优先级愈高,具有最早截止时间的任务排在队列的队首

最低松弛度优先算法LLF

根据任务的紧急程度,确定任务的优先级。即松弛时间截止时间处理时间

优先级倒置问题

这里重点说一说优先级倒置的问题——高优先级进程被低优先级进程延迟或阻塞。

假设有三个完全独立的进程P1、P2、P3。下面是一段代码:

P1:  ...P(mutex); CS-1; V(mutex);...;
P2:  ...program2...;
P3:  ...P(mutex); CS-3; V(mutex);...;

假如P3最先执行,在执行了P(mutex)操作之后,进入到临界区CS-3。在时刻a,P2就绪,因为优先级比P3高,P2就抢占了P3的处理机时间。在时刻b,P1就绪因为优先级比P2高,P1就抢占了处理机,但是因为临界资源被P3占用,因此,P1被阻塞。出现了高优先级进程被低优先级进程阻塞的情况。这是非常不正常的,而且对系统是有害的。

498ce7e23bf4a22ee5f09b536c7546aa.png
优先级倒置

解决方法

  1. 当进程进入临界区之后不允许处理机被抢占。
  2. 当高优先级进程P1要进入临界区,去使用临界资源R,如果有一个低优先级进程P3正在使用该资源,P3就继承了P1的优先级,不会被P2这个不可变因素影响
0de4955b735c49285b95e40820ca4c1f.png
动态继承优先级方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FCFS算法C语言代码: #include <stdio.h> int main() { int n, bt[20], wt[20], tat[20], avwt = 0, avtat = 0, i; printf("Enter total number of processes(maximum 20): "); scanf("%d", &n); printf("\nEnter Process Burst Time\n"); for(i = 0; i < n; i++) { printf("P[%d]: ", i+1); scanf("%d", &bt[i]); } wt[0] = 0; // waiting time for first process is 0 for(i = 1; i < n; i++) { wt[i] = wt[i-1] + bt[i-1]; } printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time"); for(i = 0; i < n; i++) { tat[i] = bt[i] + wt[i]; avwt += wt[i]; avtat += tat[i]; printf("\nP[%d]\t%d\t\t%d\t\t%d", i+1, bt[i], wt[i], tat[i]); } avwt /= i; avtat /= i; printf("\n\nAverage Waiting Time: %d", avwt); printf("\nAverage Turnaround Time: %d", avtat); return 0; } SJF算法C语言代码: #include <stdio.h> int main() { int n, bt[20], wt[20], tat[20], avwt = 0, avtat = 0, i, j, temp; printf("Enter total number of processes(maximum 20): "); scanf("%d", &n); printf("\nEnter Process Burst Time\n"); for(i = 0; i < n; i++) { printf("P[%d]: ", i+1); scanf("%d", &bt[i]); } for(i = 0; i < n; i++) { for(j = i+1; j < n; j++) { if(bt[i] > bt[j]) { temp = bt[i]; bt[i] = bt[j]; bt[j] = temp; } } } wt[0] = 0; // waiting time for first process is 0 for(i = 1; i < n; i++) { wt[i] = wt[i-1] + bt[i-1]; } printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time"); for(i = 0; i < n; i++) { tat[i] = bt[i] + wt[i]; avwt += wt[i]; avtat += tat[i]; printf("\nP[%d]\t%d\t\t%d\t\t%d", i+1, bt[i], wt[i], tat[i]); } avwt /= i; avtat /= i; printf("\n\nAverage Waiting Time: %d", avwt); printf("\nAverage Turnaround Time: %d", avtat); return 0; }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值