作業系統實驗報告 單處理機系統的程序排程

2021-08-05 20:14:34 字數 2641 閱讀 5576

實驗二單處理機系統的程序排程

一.實驗目的

(1)加深對程序概念的理解,明確程序與程式的區別。

(2)深入了解系統如何組織程序、建立程序。

(3)進一步認識如何實現處理機排程。

二.實驗內容

編寫程式完成單處理機系統中的程序排程,要求採用時間片輪轉排程演算法。

三.實驗原理

在早期的時間片輪轉法中,系統將所有的就緒程序按先來先服務的原則,排成乙個佇列,每次排程時,把cpu分配給隊首程序,並令其執行乙個時間片.時間片的大小從幾ms到幾百ms.當執行的時間片用完時,由乙個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行乙個時間片.

這樣就可以保證就緒佇列中的所有程序,在一給定的時間內,均能獲得一時間片的處理機執行時間.

四.實驗部分源程式

#include

#include

#include

以下是全域性資料結構和變數

/*pcb 結構*/

struct pcbpcb[7

struct pcb *running; /* 執行指標

struct pcb *hready; /*高優先順序就緒佇列頭指標*/

struct pcb *lready; /*低優先順序佇列頭指標

struct pcb*wait; /*等待佇列頭指標

int a=0

以下是函式說明void delay(); /*利用迴圈實現延遲

void proc(struct pcb *running); /*模擬程序3-9

void insertintoqueuetail(struct pcb **head,struct pcb *node); /*將node插入到head所指示的佇列的尾部*/

int proc_switch(); /*程序排程函式

void proc_wait(); /*程序等待函式

int proc_wakeup程序喚醒函式

以下是函式定義及注釋main() /*主函式*/

wait=null;

hready=null; /*等待佇列和高優先順序隊列為空

printf("\n模擬程序排程開始:\n模擬程序排程開始*/

for(;;)

/*功能:延遲乙個時間片*/

/*入口引數:無*/

/*出口引數:無*/

void delay()

/*功能:程序3-9*/

/*入口引數:執行指標*/

/*出口引數:無*/

void proc(struct pcb * running)

/*顯示時間片耗盡,程序轉為低優先順序就緒狀態*/

printf("程序%d時間片耗盡\n",running->pname);

insertintoqueuetail(&lready,running);

a=0;

return

/*功能:將乙個節點插入佇列尾部*/

/*入口引數:佇列頭指標位址head,待插入結點node*/

/*出口引數:無*/

void insertintoqueuetail(struct pcb **head,struct pcb *node)

{ struct pcb *p;

node->next=null;

/*被插入隊列為空*/

if(*head==null){

*head=node;

return

/*被插入佇列不為空*/

else{

p=*head;

/*找到佇列的最後乙個結點*/

while(p->next!=null)

p=p->next; p->next=node

/*功能:程序排程*/

/*入口引數:無*/

/*出口引數:若排程成功,返回1,否則返回0

int proc_switch

/*若高優先順序就緒佇列和低優先順序就緒佇列均為空,則迴圈執行程序喚醒*/

while(hready == null && lready == null)

if(!proc_wakeup()) return 0

/*若高優先順序就緒佇列非空,則執行其第乙個程序,分配2個時間片*/

if(hready!=null

running=hready

hready=hready->next

running->runtime=2

/*若高優先順序就緒隊列為空,則執行低優先順序就緒佇列的第乙個程序,分配5個時間片*/

else

running=lready

lready=lready->next

running->runtime=5

/*把排程程序的id賦給a*/

a=running->pname;

return 1

/*功能:程序等待。將當前執行程序置高優先順序,等待時間為20插入等待佇列尾部*/

/*入口引數:無*/

/*出口引數:無*/

void proc_wait()

{struct pcb *p;

running->pri=1;

running->waittime=10;

作業系統實驗報告

電腦科學與應用系 課程設計報告 作業系統原理 目錄1 題目簡述 2 2 需求分析 2 2.1設計思想 2 2.2要求 2 2.3任務 3 2.4執行環境 3 2.5開發工具 3 3 概要設計與詳細設計 3 3.1系統流程圖 3 3.2演算法流程圖 5 4 編碼與實現 10 4.1資料結構和演算法設計...

作業系統實驗報告

2014 2015 學年第 2 學期 系別計算機學院 專業電腦科學與技術 班級 2014級專公升本 姓名蔡圓圓 學號 1410211014 授課老師趙群禮 實驗一 熟悉linux基本命令及程式設計環境 實驗總結 編寫程式 gedit編輯器 編寫程式 c 存放 gcc linux c程式編譯工具 當前...

作業系統實驗報告

實驗名稱 哲學家就餐問題 班級 通訊1202班 學號 u201213584 姓名 趙越 指導老師 許毅平 一 實驗目的 1.熟練使用vc 6.0編譯環境,除錯並正確執行程式,更加熟練地利用c語言解決問題 2.了解哲學家就餐的基本原理,掌握死鎖的必要條件。3.理解源程式中產生和防止的演算法,及相關視窗...