操作系统短作业优先(SJF)调度算法
生活随笔
收集整理的這篇文章主要介紹了
操作系统短作业优先(SJF)调度算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一,算法代碼
#include<stdio.h>struct sjf { //定義進程的結構體??? char name[10];//進程名??? float arrivetime;//到達時間??? float servicetime;//服務時間??? float starttime;//開始時間??? float finishtime;//完成時間??? float zztime; //周轉時間??? float dqzztime;//帶權周轉時間};struct sjf b[100];//定義短作業優先算法進程的最大數量void Sinput(struct sjf *p,int N) { //輸入函數??? int i;??? printf("輸入進程的名稱、到達時間、服務時間:(例如?? : x 0 100)\n");??? for(i=0; i<=N-1; i++) {??????? printf("輸入第%d進程的名稱、到達時間、服務時間:",i+1);??????? scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);??? }}//輸出函數void SPrint( struct sjf *p,float arrivetime,float servicetime,???????????? float starttime,float finishtime,float zztime,float dqzztime,int N) {??? int k;??? printf("\n執行順序:\n");??? printf("%s",p[0].name);??? for(k=1; k<N; k++) {??????? printf("-%s",p[k].name);??? }??? printf("\n進程名\tarrive\tservice\tstart\tfinish\tzhouzhuan\tdaiquanzz\n");??? for(k=0; k<=N-1; k++) {??????? printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n\n",??????? p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,??????? p[k].zztime,p[k].dqzztime);??? }??? printf("\n");??? } ??? void Ssort(struct sjf *p,int N) ??? { //按短作業優先算法排序??????? int i,j;??????? for( i=1; i<=N-1; i++)??????????? for( j=1; j<=i; j++)??????????????? if(p[i].servicetime<p[j].servicetime) {??????????????????? struct sjf temp;??????????????????? temp=p[i];??????????????????? p[i]=p[j];??????????????????? p[j]=temp;??????????????? }??? }//運行結果??? void Sdeal(struct sjf *p,float arrivetime,float servicetime,??? float starttime,float finishtime,float zztime,float dqzztime,int N)??? {??????? int k;??????? for(k=0; k<=N-1; k++) {??????????? if(k==0) {??????????????? p[k].starttime=p[k].arrivetime;??????????????? p[k].finishtime=p[k].arrivetime+p[k].servicetime;??????????? } else {??????????????? p[k].starttime=p[k-1].finishtime;??????????????? //開始時間 =??? 前一個進程的完成時間??????????????? p[k].finishtime=p[k-1].finishtime+p[k].servicetime;??????????????? //結束時間=前一個進程的完成時間? + 現在進程的服務時間??????????? }??????? }??? for(k=0; k<=N-1; k++) {??????? p[k].zztime=p[k].finishtime-p[k].arrivetime;??????? //? 周轉時間 =完成時間 -到達時間??????? p[k].dqzztime=p[k].zztime/p[k].servicetime;??????? //帶權周轉時間=周轉時間 /服務時間??? }}void SJF(struct sjf *p,int N){??? float arrivetime=0,servicetime=0,starttime=0,??? finishtime=0,zztime=0,dqzztime=0;??? Ssort(p,N);??? Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);??? SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);}void main() { //主函數??? int M;??? printf("-----------短作業優先調度算法-----------\n");??? printf("輸入進程數:");??? scanf("%d",&M);??? Sinput(b,M);??? SJF(b,M);}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
二,算法截圖
本算法轉自:https://wenku.baidu.com/view/c38baaf3fad6195f302ba668.html
???????????再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
總結
以上是生活随笔為你收集整理的操作系统短作业优先(SJF)调度算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java代码操作数据库(上)——JDBC
- 下一篇: 从一个Android码农视角回顾2018