1. 程式人生 > >C語言寫的作業系統短作業優先演算法

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