C語言寫的作業系統短作業優先演算法
短作業優先的演算法思想:
通過對執行時間的排序然後比較,執行時間短的程序優先執行,第一個程序的開始時間等於到達時間,完成時間=開始時間+服務時間,當下一個程序的開始時間>=該程序的完成時間時,下一個程序的開始時間=上一個程序的完成時間,週轉時間和帶權週轉時間根據公式可以得出
一下是演算法的原始碼:
#include <stdio.h> //定一個結構體 struct sjf{ char name[10]; //程序名 float arrivetime; //到達時間 float servicetime;//服務時間 float starttime; //開始時間 float finishtime;//完成時間 float zztime;//週轉時間 float dqzztime;//帶權週轉 }; //定義一個結構體陣列 sjf a[100]; //定義一個輸入函式 void input(sjf *p,int N) { int i; printf("intput the process's name & arrivetime & servicetime:\nfor exmple: a 0 100\n"); for(i=0;i<=N-1;i++) { printf("input the %dth process's information:\n",i+1); scanf("%s%f%f",&p[i].
name,&p[i].arrivetime,&p[i].servicetime); } } //定義一個輸出函式 void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) { int k; printf("run order:");//執行順序 printf("%s",p[0].name); for(k=1;k<N;k++) { printf("-->%s",p[k].name); } printf("\nthe process's information:\n"); printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n"); for(k=0;k<=N-1;k++) { printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } } //按到達時間排序 void sort(sjf *p,int N) { for(int i=0;i<=N-1;i++) for(int j=0;j<=i;j++) if(p[i].arrivetime<p[j].arrivetime) { sjf temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } //執行階段 void deal(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 { if(p[k-1].finishtime>=p[k].arrivetime) { p[k].starttime=p[k-1].finishtime;} else { p[k].starttime =p[k].arrivetime;} p[k].finishtime=p[k].starttime+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 sjff(sjf *p,int N) { float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; //初始化 sort(p,N);//呼叫sort函式 for(int m=0;m<N-1;m++) { if(m==0) p[m].finishtime=p[m].arrivetime+p[m].servicetime; else { if(p[m-1].finishtime >=p[m].arrivetime ) { p[m].starttime=p[m-1].finishtime;} else { p[m].starttime =p[m].arrivetime;} p[m].finishtime=p[m].starttime+p[m].servicetime; } int i=0; for(int n=m+1;n<=N-1;n++) { if(p[n].arrivetime<=p[m].finishtime) i++; } //按服務時間排序 float min=p[m+1].servicetime; int next=m+1;//m+1=n for(int k=m+1;k<m+i;k++) { if(p[k+1].servicetime<min) { min=p[k+1].servicetime; next=k+1; } } sjf temp; temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); } void main() { int N; printf("------短作業優先排程演算法------\n"); printf("input the process's number:\n");
sjf *b=a;
scanf("%d",&N); input(a,N); sjff(b,N);//呼叫sjff函式 }
相關推薦
C語言寫的作業系統短作業優先演算法
短作業優先的演算法思想: 通過對執行時間的排序然後比較,執行時間短的程序優先執行,第一個程序的開始時間等於到達時間,完成時間=開始時間+服務時間,當下一個程序的開始時間>=該程序的完成時間時,下一個程序的開始時間=上一個程序的完成時間,週轉時間和帶權週轉時
短作業優先演算法c++版
#include "stdafx.h" #include "iostream" #include "string" using namespace std; struct JOB//作業結構體 { string name; //程序名
用java語言模擬短作業優先演算法
package two; public class Job { private String name;//作業名稱(ID) private int execTime; //執行時間 private long startTime;//開始時間 private int endTime;//
計算機作業系統排程演算法——短作業優先演算法簡單實現
//排程演算法的模擬 //1.SJF 短作業優先演算法 #include<stdio.h> #include <malloc.h> #include <string> #include <string.h> #include
作業系統短作業優先(SJF)排程演算法
一,演算法程式碼
短作業優先演算法c++實現
短作業優先:短作業優先(SJF, Shortest Job First)又稱為“短程序優先”SPN(Shortest Process Next);這是對FCFS演算法的改進,其目標是減少平均週轉時間.定義對預計執行時間短的作業(程序)優先分派處理機.通常後來的短作業不搶先正在
作業系統——實驗一(先來先服務演算法和短作業優先演算法)
作業系統實驗報告一[實驗題目]先來先服務FCFS和短作業優先SJF排程演算法[實驗目的]通過本次實驗,加深對程序概念的理解,進一步掌握對程序狀態轉變、程序排程策略及對系統性能的評價方法。[實驗內容]程式設計實現如下內容:1.先來先服務演算法; 2.短程序優先演算法;3.根據排
【作業系統】C語言模擬作業系統實現磁碟排程演算法——電梯排程演算法
#include<stdio.h> #include<stdlib.h> #include<time.h> int *Init(int arr[]) { int
先來先服務演算法(FCFS)和 短作業優先演算法(SJF)
先來先服務演算法(FCFS) FCFS是最簡單的排程演算法,既可以用作作業排程,也可以用作程序排程 這種演算法優先考慮系統中等待時間最長的作業(程序),而不管作業所需執行時間長短, 做法是從後備佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源和建
最短作業優先演算法
public class Operating { public static String dealTime(String time, int parMinutes) { StringTokenizer tokenizer = new StringTokenizer(time,":"); String h
排程演算法之最短作業優先演算法
最短作業優先演算法又叫做短程序優先演算法 寫此博文目的: 1.方便自己複習 2.給正在學習此演算法的人一點參考 單道(一次只能執行一個程序) 分析: 先將程序按照到達時間升序排序,第一個程序到達的時候不等待,直接執行,因為他是第一個到達的程序,在他之前沒有程序在執行,當有程序到達但是有其他程序在執行的時候,到
java_實現先來先服務(FCFS)短作業優先演算法(SJF)
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.ut
最短作業優先演算法(不完善)
最短作業優先(SJF) 問題描述: 最短作業優先(SJF)是一種除錯任務請求的除錯策略。每個任務請求都含有請求時間(即向系統提交請求的時間)和持續時間(即完成任務所需時間)屬性。當前任務完成後,SJF策略選擇最短持續時間的任務執行;如果多個任務具有相
先來先服務和短作業優先演算法
先來先服務演算法(FCFS) FCFS是最簡單的排程演算法,既可以用作作業排程,也可以用作程序排程 這種演算法優先考慮系統中等待時間最長的作業(程序),而不管作業所需執行時間長短, 做法是從後備佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分
用C語言寫的一個最短作業優先排程演算法
#include <stdio.h> //定義一個結構體 struct sjf{ char name[10]; //程序名 float arrivetime; //到達時間 float servicetime;//服務時間 float starttime; //開
作業優先排程演算法 先來先服務、短作業排程演算法(c語言描述)
/*先來先服務排程演算法*/ #include<stdio.h> #define N 10 int Arival[N]={0}; int Go[N]={0}; int Start[N]={0}; int End[N]={0}; int Timer[N]={0};
c語言模擬短作業優先排程演算法和時間片轉輪排程演算法
陣列模擬短作業,隊咧模擬時間片轉輪,註釋很清楚,就不贅述程式碼:#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include&
作業系統:先來先服務FCFS和短作業優先SJF程序排程演算法
目的:陸續整理近一年的學習收穫 先來先服務FCFS和短作
【作業系統 】先來先服務FCFS和短作業優先SJF程序排程演算法
1.先來先服務FCFS和短作業優先SJF程序排程演算法 2.時間片輪轉RR程序排程演算法 3.預防程序死鎖的銀行家演算法 4.動態分割槽分配演算法 5.虛擬記憶體頁面置換演算法 6.磁碟排程演算法 void FCFS() { /* 1. 找
《作業系統》 先來先服務FCFS和短作業優先SJF程序排程演算法相關計算及實驗
為了和FCFS排程演算法進行比較,我們仍利用FCFS演算法中所使用的例項,並改用SJ(P)F演算法重新排程,再進行效能分析。由上圖中的(a)和(b)可以看出,採用SJ(P)F演算法後,不論是平均週轉時間還是平均帶權週轉時間,都有較明顯的改善,尤其是對短作業D,其週轉時間由原來的(用FCFS演算法時)1