操作系统进程的相关内容 关于先来先服务 短进程优先 想知道这些代码都是什么意思 看不太懂 上网查的也看不太懂(语言-c语言)
先简述一下实现的过程吧
就是用结构体代表一个个的进程,然后通过链表来实现调度过程中的排序
其实优先级调度就是从那么多个进程里面选出一个优先级最高的进程放入CPU中运行,运行完一个时间片后更改此进程相应的变量,再把优先级减8,最后判断此进程是否完成,然后把此进程放到相应队列的队尾。
轮转调度和优先级调度十分相似,只是它的结构体中的变量和优先级调度不一样,然后把选择最高优先级改成选择就绪队列中的第一个进程就可以了。
所以其实拿到其中的一个代码就再稍微改一下就可以得到两种不同的调度方法了,所以不要像我一开始还打算写两个完全不一样的……
好了话不多说,直接进入代码解析好了
针对操作系统进程相关的问题,先来解释一下先来先服务和短进程优先的概念: - 先来先服务 (First Come First Serve, FCFS):采用先到先服务的策略,即先提交的进程先执行,队列中的进程按照到达时间的顺序依次获取CPU资源。 - 短进程优先(Shortest Job First, SJF):针对进程要求的初始处理时间进行优化,使得初始处理时间短的进程先获得CPU资源。当一个进程需要CPU资源时,先检查整个就绪队列中的所有进程的估计运行时间,将需要运行时间最短的进程先分配到CPU中执行。
在代码示例方面,由于进程调度的实现是由操作系统负责的,因此无法提供涉及到操作系统的示例代码。不过,以下是一个简单的C语言程序示例,用于模拟SJF进程调度:
#include<stdio.h>
float sjf(float a[], int n, float wtime[])
{
int i, j;
float b[n], sum = 0, wait_avg;
for(i = 0; i < n; i++)
{
b[i] = a[i];
}
for(i = 0; i < n; i++)
{
for(j = i+1; j < n; j++)
{
if(b[i] > b[j])
{
float temp = b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
wtime[0] = 0;
for(i = 1; i < n; i++)
{
wtime[i] = 0;
for(j = 0; j < i; j++)
{
wtime[i] += b[j];
}
sum += wtime[i];
}
wait_avg = sum/n;
return wait_avg;
}
int main(){
float a[20], wtime[20], wait_avg = 0;
int i, n;
printf("Enter the no of process :");
scanf("%d", &n);
printf("\nEnter the CPU time : \n");
for(i = 0; i < n; i++)
{
printf("Process [%d]: ", i+1);
scanf("%f", &a[i]);
}
wait_avg = sjf(a, n, wtime);
printf("\n\nWait time: \n");
printf("%f",wait_avg);
return 0;
}
对于第二个问题,关于将函数转化为宏的问题,个人认为并不是什么好的做法。具体来说,宏定义不能像函数调用一样进行类型
这些不要上网查,找一本操作系统教材,其中进程调度一章都有。这些C代码,就是模拟了进程调度