實驗二單處理機系統的程序排程
一.實驗目的
(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.理解源程式中產生和防止的演算法,及相關視窗...