短进程优先的调度算法详解
发布时间:2020-05-17 04:52:01
来源:51CTO
阅读:293
作者:张立达
一、SPF算法简介
SJF算法SJF(shortest job first)是以进程的运行时间长度作为优先级,进程运行时间越短,优先级越高。
SJF算法的缺点必须预知进程的运行时间。即使是程序员也很难准确估计进程运行时间。如果估计过低,系统就可能按估计的时间终止进程的运行,但此时进程并未完成,故一般都会偏长估计
对长进程不利。长进程的周转时间会明显地增长。可怕的是,SJF算法完全忽视进程等待时间,可能使进程等待时间过长,出现饥饿现象。
人机无法实现交互。
完全未考虑进程的紧迫程度。不能保证紧迫性进程得到及时处理。
二、算法流程图
我做的流程图:http://www.processon.com/diagraming/5835692de4b086d1e79f81af
三、源代码
1. 变量声明与结构体定义
1 #include 2 #include 3 #include 4 5 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 6 7 8 struct pcb{ 9 char name[10]; //进程名 10 int arrival_time; //进程到达时间() 11 int start_time; //进程开始时间 12 int need_time; //进程运行所需时间 13 int finish_time; //运行结束时间 14 struct pcb * link; //链接下一个pcb的指针 15 };16 17 18 int num = 0; //输入的进程数 19 typedef struct pcb PCB; //定义结构体变量 20 /*21 结构体指针p指向 每新建的一个进程22 ready指针指向链表的第一个pcb
23 finish指针指向完成队列的第一个pcb结构体
24 */25 struct pcb *p = NULL, *ready = NULL, *finish = NULL;
2. 输入函数
1 //用来测试链表建立,输入链表结构体数据 2 void print_test(){ 3 int i; 4 struct pcb * test = ready; 5 for(i=0;inam