作業系統四種排程演算法

2021-09-14 05:11:47 字數 4285 閱讀 3206

一、 實驗目的:

1、掌握程序排程的任務、機制和方式。

2、熟練掌握程序程序排程的演算法的原理。

二、實驗內容:

1、 實現 短作業優先排程演算法

2、 實現 先到先服務排程演算法

3、 實現 非搶占式高響應比優先排程演算法

4、 實現 搶占式高響應比優先排程演算法

三、實驗**

實驗全部**見附件code.txt

實驗的主要**如下:

//程序結構體

struct task

task[n], tp_task[n];

//短作業優先演算法

void sjf()

putchar('\n');

//sleep(1000 * task[i].turn_time); // 程式暫停時間(單位:ms)

task[i].start_time = countt;

countt += task[i].turn_time;

task[i].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

print();//先來先服務演算法

void fcfs()

putchar('\n');

//sleep(1000 * task[i].turn_time); // 程式暫停時間(單位:ms)

task[i].start_time = countt;

countt += task[i].turn_time;

task[i].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

print();// 非搶占 高響應比 優先排程演算法

void hrrn()

putchar('\n');

//sleep(1000 * task[0].turn_time); // 程式暫停時間(單位:ms)

task[0].start_time = countt;

countt += task[0].turn_time;

task[0].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

sort(task, task + num, cmp4); // 按照開始執行的時間從小到大排序

print();// 搶占式 高響應比 優先排程演算法

void preemptivehrrn()

putchar('\n');

//sleep(1000); // 程式暫停時間(單位:ms)

countt++; //執行乙個時間片 (1 s)

task[0].turn_time--;

if (task[0].turn_time <= 0 && task[0].end_time < 0)

task[0].end_time = countt;

}printf("所有程序全部執行完畢!!!\n\n");

//恢復每個程序的服務時間

for (int i = 0; i < num; i++)

task[i].turn_time = shift[task[i].name];

sort(task, task + num, cmp5); // 按照開始執行的時間從小到大排序

print();四、實驗結果

實驗測試資料如下:

5a 0 9

b 1 3

c 2 8

d 3 2

e 4 5

資料輸入:

(1) 短作業優先排程演算法

(2) 先到先服務排程演算法

(3) 非搶占式高響應比優先排程演算法

(4) 搶占式高響應比優先排程演算法

五、實驗總結

本次實驗的內容為實現了四中程序排程的演算法:短作業排程演算法、先來先服務程序排程演算法、非搶占試高響應比優先排程演算法、搶占式高響應比優先排程演算法。通過對四中程序排程演算法的實現,熟練地掌握了排程演算法的原理,同時也對作業系統當中關於排程方面的內容有了更加深刻的了解。在演算法實現方面,覺得自己構建的那個結構體裡面的變數有些不足之處,例如程序相關的時間可能不是整數,而我卻為了簡化操作,用了整型來表示和程序相關的時間資訊

#include #include #include #include #include #include using namespace std;

const int n = 1000;

struct task

task[n], tp_task[n];

int num;//程序數目

void sleep(int n)

void getdata()

printf("程序資訊輸入完畢!!!\n");

}void backdata()

printf("程序資訊還原成功!!!\n");

}void print()

}bool cmp1(const struct task &a, const struct task &b)

//短作業優先演算法

void sjf()

putchar('\n');

//sleep(1000 * task[i].turn_time); // 程式暫停時間(單位:ms)

task[i].start_time = countt;

countt += task[i].turn_time;

task[i].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

print();

}bool cmp2(const struct task &a, const struct task &b)

//先來先服務演算法

void fcfs()

putchar('\n');

//sleep(1000 * task[i].turn_time); // 程式暫停時間(單位:ms)

task[i].start_time = countt;

countt += task[i].turn_time;

task[i].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

print();

}bool c***(const struct task &a, const struct task &b)

else

return a.end_time < b.end_time;

}bool cmp4(const struct task &a, const struct task &b)

// 非搶占 高響應比 優先排程演算法

void hrrn()

putchar('\n');

//sleep(1000 * task[0].turn_time); // 程式暫停時間(單位:ms)

task[0].start_time = countt;

countt += task[0].turn_time;

task[0].end_time = countt;

}printf("\n所有程序全部執行完畢!!!\n\n");

sort(task, task + num, cmp4); // 按照開始執行的時間從小到大排序

print();

}bool cmp5(const struct task a, const struct task b)

// 搶占式 高響應比 優先排程演算法

void preemptivehrrn()

putchar('\n');

//sleep(1000); // 程式暫停時間(單位:ms)

countt++; //執行乙個時間片 (1 s)

task[0].turn_time--;

if (task[0].turn_time <= 0 && task[0].end_time < 0)

task[0].end_time = countt;

}printf("所有程序全部執行完畢!!!\n\n");

//恢復每個程序的服務時間

for (int i = 0; i < num; i++)

task[i].turn_time = shift[task[i].name];

sort(task, task + num, cmp5); // 按照開始執行的時間從小到大排序

print();

}void menu()

int main()

backdata();

}return 0;

}

作業系統排程演算法

include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...

作業系統排程演算法

在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...

作業系統 排程演算法

fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...