采用最高优先数优先与按时间片轮转调度结合算法优缺点
时间: 2024-05-27 20:09:16 浏览: 94
最高优先数优先与按时间片轮转调度结合算法的优缺点如下:
优点:
1. 能够充分利用CPU资源,优先处理紧急任务。
2. 时间片轮转可以保证长时间等待的任务得到及时处理。
3. 在紧急任务较少时,可以避免优先级反转问题。
缺点:
1. 在高优先级的任务存在时,低优先级的任务可能一直得不到处理,导致饥饿问题。
2. 时间片轮转可能会增加上下文切换的开销,导致系统耗费更多的CPU资源。
3. 在高优先级的任务较多时,时间片轮转的优势可能被抵消,导致紧急任务得不到及时处理。
相关问题
FIFO算法,优先数调度算法,时间片轮转调度算法
FIFO算法(先进先出算法)是一种简单的调度算法,它按照作业提交的先后顺序进行调度。当一个进程完成后,才会调度下一个进程。
优先数调度算法是按照进程的优先级进行调度的算法。每个进程有一个优先级数,优先数越大的进程被调度的机会越高。如果多个进程的优先级相同,则按照FIFO算法进行调度。
时间片轮转调度算法是一种基于时间片的调度算法。每个进程被分配一个时间片,当时间片用完后,进程会被挂起,并且被放到队列的末尾等待下一轮调度。这种算法可以避免长时间运行的进程占用CPU资源,同时也可以提高系统响应速度。
FIFO算法,优先数调度算法,时间片轮转调度算法进程调度代码
FIFO算法的进程调度代码:
```c
#include <stdio.h>
int main()
{
int n, bt[20], wt[20], tat[20], avwt = 0, avtat = 0, i, j;
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;
for(i = 1; i < n; i++)
{
wt[i] = 0;
for(j = 0; j < i; j++)
wt[i] += bt[j];
}
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;
}
```
优先数调度算法的进程调度代码:
```c
#include <stdio.h>
int main()
{
int n, bt[20], wt[20], tat[20], p[20], pr[20], i, j, temp;
float avwt = 0, avtat = 0;
printf("Enter total number of processes (maximum 20): ");
scanf("%d", &n);
printf("\nEnter Burst Time and Priority\n");
for(i = 0; i < n; i++)
{
printf("P[%d]: ", i+1);
scanf("%d %d", &bt[i], &pr[i]);
p[i] = i+1;
}
for(i = 0; i < n; i++)
{
for(j = i+1; j < n; j++)
{
if(pr[i] > pr[j])
{
temp = pr[i];
pr[i] = pr[j];
pr[j] = temp;
temp = bt[i];
bt[i] = bt[j];
bt[j] = temp;
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
wt[0] = 0;
for(i = 1; i < n; i++)
{
wt[i] = 0;
for(j = 0; j < i; j++)
wt[i] += bt[j];
avwt += wt[i];
}
avwt /= i;
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time");
for(i = 0; i < n; i++)
{
tat[i] = bt[i] + wt[i];
avtat += tat[i];
printf("\nP[%d]\t%d\t\t%d\t\t%d", p[i], bt[i], wt[i], tat[i]);
}
avtat /= i;
printf("\n\nAverage Waiting Time: %f", avwt);
printf("\nAverage Turnaround Time: %f", avtat);
return 0;
}
```
时间片轮转调度算法的进程调度代码:
```c
#include <stdio.h>
int main()
{
int n, bt[20], wt[20], tat[20], rt[20], i, j, time, remain, flag=0, tq;
float avwt = 0, avtat = 0;
printf("Enter total number of processes (maximum 20): ");
scanf("%d", &n);
remain = n;
printf("\nEnter Burst Time\n");
for(i = 0; i < n; i++)
{
printf("P[%d]: ", i+1);
scanf("%d", &bt[i]);
rt[i] = bt[i];
}
printf("Enter Time Quantum: ");
scanf("%d", &tq);
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time\n");
for(time = 0, i = 0; remain != 0;)
{
if(rt[i] <= tq && rt[i] > 0)
{
time += rt[i];
rt[i] = 0;
flag = 1;
}
else if(rt[i] > 0)
{
rt[i] -= tq;
time += tq;
}
if(rt[i] == 0 && flag == 1)
{
remain--;
wt[i] = time - bt[i];
tat[i] = time;
avwt += wt[i];
avtat += tat[i];
printf("P[%d]\t%d\t\t%d\t\t%d\n", i+1, bt[i], wt[i], tat[i]);
flag = 0;
}
if(i == n-1)
i = 0;
else if(time >= i+1)
i++;
}
avwt /= n;
avtat /= n;
printf("\nAverage Waiting Time: %f", avwt);
printf("\nAverage Turnaround Time: %f", avtat);
return 0;
}
```
阅读全文