用C語言模擬Linux作業系統下處理機排程實驗報告

2023-02-11 03:00:03 字數 2683 閱讀 1834

實驗二:處理機排程

一、實驗目的:

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 第...