作業系統實驗二(程序排程之先來先服務)

2022-05-04 16:09:09 字數 1687 閱讀 5675

一. 實驗目的

理解程序執行的併發性

理解程序各種狀態及其之間的轉換

理解程序管理中pcb的結構

掌握fcfs程序排程演算法

二. 實驗內容

要求

根據相關資料結構和演算法流程,按

fcfs非搶占式排程演算法實現程序排程

原理

多道環境中程序數一般多於處理機數目,系統需按照某種演算法動態地把處理機分配給就緒佇列中的乙個程序使之執行,

系統將所有程序按狀態組織成不同佇列:就緒、執行和阻塞。

本程式在實現時要求採用非剝奪式先來先服務進行排程:即按照程序進入就緒佇列的先後次序來分配處理器,

先進入就緒佇列的程序優先被選擇,一旦占有處理器就一直執行下去直到結束。

實現中應分別設計三個鍊錶      佇列表示執行、就緒和阻塞程序佇列。

相關資料結構

程序的標識為pcb,

pcb結構可自行設計也可採用如下結構:

typedef struct node

pcb;

演算法流程

//pri基礎上:pcb的定義簡單化只需要到來時間項;就緒佇列按照到來時間從小到大排序;fcfs排程時採用非搶占式,即每個程序只執行一次就可執行完成。

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

typedef struct node

pcb;

pcb *ready, *finish, * run;

void insert(pcb *p);

void firstin();

void print();

/*優先數建立初始程序pcb資訊*/

void creatp()

printf(" 優先數演算法輸出資訊:\n");

printf("**********************************\n");

print();

if(run==null) firstin();

return;

}/*程序就緒鍊錶的插入演算法,就緒鍊錶按到來時間從小到大排列*/

void insert(pcb *p)

else

if(q!=p1) //在鍊錶中間或鏈尾插入結點

else //在鍊錶的表頭插入結點

return;

}

}/*將就緒佇列的第乙個程序投入執行*/

void firstin()

/*先來先服務排程演算法*/

void fcfsschedule() }

/*程序pcb的輸出*/

void print1()

void print2(pcb *p)

void print()

q1=finish;

while(q1!=null)

//getchar();

}/*主函式*/

void main()

實驗二 程序排程之先來先服務

實驗二 程序排程之先來先服務 include stdio.h include stdlib.h include string.h typedef struct node pcb pcb ready,finish,run void insert pcb p void firstin void prin...

0512 作業系統程序排程實驗

1.目的和要求 1.1.實驗目的 用高階語言完成乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解。1.2.實驗要求 1.2.1例題 設計乙個有 n個程序併發執行的程序排程模擬程式。程序排程演算法 採用最高優先順序優先的排程演算法 即把處理機分配給優先順序最高的程序 和先來先服務 若優先順序...

作業系統之程序排程

世界上很多問題都是跟資源分配和任務排程有關,而學會了作業系統的程序排程演算法,我覺得也會給你在做事的時候帶來一些啟發吧。在現代的作業系統中,有很多程序在記憶體中。有的正在執行,有的正等待某個事件的發生 比如等待使用者敲擊鍵盤 那麼作業系統作為乙個大佬,就必須管理這些程序,讓它們按照規則來,不能亂了套...