實驗二:處理機排程
一、實驗目的:
1、了解linux下emacs編輯器的使用方法,掌握各種常用的鍵盤操作命令;
2、理解並掌握處理機排程演算法。
二、實驗內容及要求:
在採用多道系統的設計程式中,往往有若干程序同時處於就緒狀態。當就緒狀態程序數大於處理機數時,就必須按照某種策略來決定哪些程序優先占用處理機。本實驗模擬在單處理機情況下處理機排程。
1、優先排程演算法實現處理機的排程:
設計思路:
1每個程序用乙個程序控制塊pcb來代表,程序控制塊包括程序名(程序的標識、指標(按優先數的大小把程序連成佇列,用指標指出下乙個程序的程序控制塊首位址,最後乙個程序中的指標為"0"、要求執行時間、優先數、狀態(就緒、結束;
2每次執行處理機排程程式前,為每個程序確定它的"優先數"和"要求執行時間";
3把給定的程序按優先數的大小連成佇列,用一單元指出隊首程序;
4每模擬執行一次程序,優先數減一,要求執行時間減一;
5如果要求執行的時間》=0,再將它加入佇列(按優先數的大小插入,重置隊首標誌);如果要求執行的時間=0,那麼把它的狀態修改為結束,且推出佇列;
6若就緒佇列不為空,重複上述,直到所有的程序都結束;
7程式有顯示和列印語句,每次執行後顯示變化。
2、按時間片輪轉法實現處理機排程:
設計思路:
1每個程序用乙個程序控制塊pcb來代表,程序控制塊包括程序名(程序的標識、指標(把程序連成迴圈佇列,用指標指出下乙個程序的程序控制塊首位址,最後乙個程序中的指標指出第乙個程序的程序控制塊首位址、已執行時間、狀態(就緒、結束;
2每次執行處理機排程程式前,為每個程序確定它的"要求執行時間";
3用指標把給定的程序按順序排成迴圈佇列,用另一標誌單元記錄輪到的程序;
4每模擬執行一次程序,已執行時間加一;
5程序執行一次後,把該程序控制塊的指標值送到標誌單元,以指示下乙個輪到的程序。若該程序要求執行時間≠已執行時間,未執行結束,待到下一輪再執行;若要求執行時間=已執行時間,狀態改為結束,退出佇列;
6若就緒佇列不為空,重複步驟四和五;
7程式有顯示和列印語句,每次執行後顯示變化。
3、程式設計:
1、優先數排程演算法:
/*我的思路:先主函式輸入要進行排程的程序數,然後呼叫函式create(,把程序的資訊輸入,再呼叫函式insert(,把輸入的函式按照優先數的大小排成鍊錶,然後呼叫函式prio(實現優先數排程*/
#include
#include
#include
typedef struct node
pcb;
pcb *ready,*run,*finish; /*就緒執行結束指標*/
int n;
void prt( /*輸出函式,可以方便看到程序執行的演示*/
p=finish;
while(p!=null
getchar(; } /*使用getchar(函式可以讓輸出時停留畫面,等待人按回車繼續*/
void insert(pcb *q /*插入新程序,把程序按優先數大小排序*/
/*新程序的優先數小,則p1
else b=0; 指向下乙個程序繼續比*/
if(r!=p1 /*新程序找到位置,插在r和p1之間*/
else } /*新程序的優先數最大,插在隊首,並
void create( 修改就緒隊首ready指標*/
} /*否則先插在null前*/
printf(" display is going to start: \n";
printfn";
prt(;
run=ready; /*佇列排好,run指向就緒佇列隊首*/
ready=ready->next; /*ready指向下乙個程序,這樣當程序執行時如果優先數小於其他的程序,應該先進行優先數最大的程序*/
run->state='r'; } /*隊首程序的狀態為就緒*/
void prio(
}else
if((ready!=null&&(run->prio prio
/*隊首程序的優先數比它下乙個小,且下乙個程序不為null時執行*/
prt(; } }
void main(
/*優先數排程演算法*/
2、時間片輪轉法:
#include
#include
#include
typedef struct node
pcb;
pcb *ready,*run,*finish,*tail; /*就緒執行結束尾指標*/
int n,round;
void prt( /*輸出函式,可以方便看到程序執行的演示*/
void insert(pcb *q /*在隊尾插入新的程序*/
void create(
{ pcb *p;
int i;
ready=null; run=null; finish=null;
printf("please enter the name and time of pcb:\n";
/*輸入程序名、和*/
for(i=0;i
{ p=malloc(sizeof(pcb; /*為新程序開闢空間*/
scanf("%s",p->name; /*輸入程序名*/
scanf("%d",&p->needtime; /*輸入程序要求執行時間*/
Linux作業系統實驗
計算機與資訊工程系實驗報告 課程名稱 linux作業系統任課教師 李小芳2014 2015學年第1學期班級實驗名稱實驗地點 學號程序管理 二 文理樓a507 姓名實驗日期成績評定ab c實驗內容 一 程序與作業的前後臺操作 1 利用vi手工啟動兩個程序在後台執行 2 用vi編輯乙個檔案,並轉入到後台...
Linux作業系統介紹
作業系統介紹 作者 王長青 商情 2008年第45期 摘要 文章從unix minix系統的產生引出了linux作業系統,詳細介紹了linux作業系統的產生過程,分析了linux的網路集市式開發模式,並通過研究linux的發展過程,分析並介紹了linux的主要特點及功能。關鍵詞 linux作業系統網...
Linux 作業系統 基礎操作 教學
福州大學資訊學院計算機系劉延華 2003.2 目錄前言 2 第一講 linux基礎 2 一 什麼是linux?2 二 安裝linux的好處?3 三 如何得到linux?3 四 如何得到linux的最新訊息?3 五 linux作業系統上有什麼應用?4 六 在那裡可以找到討論區?5 七 安裝過程 5 第...