版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)實驗報告(進程調(diào)度算SHAANXI UNIVERSITY OF SCIE忖CE & TECHNOLOGY操作系統(tǒng)實驗報告實驗1進程調(diào)度算法報告日期:2016-6-10姓 名:學(xué) 號:班 級: 任課教師:實驗1 進程調(diào)度算法一、實驗內(nèi)容按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度。二、實驗?zāi)康脑诓捎枚嗟莱绦蛟O(shè)計的系統(tǒng)中,往往有若干個 進程同時處于就緒狀態(tài)。當就緒進程個數(shù)大于處 理器數(shù)時,就必須依照某種策略來決定哪些進程 優(yōu)先占用處理器。本實驗?zāi)M在單處理器情況下 的處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的 工作。三、實驗原理設(shè)計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度 的程序。(1) 假定系統(tǒng)有五個
2、進程,每一個進程用一 個進程控制塊PCB來代表,進程控制塊的格式 為:進程名 指針要求運行時間優(yōu)先數(shù)狀態(tài)其中,進程名一一作為進程的標識,假設(shè)五個進 程的進程名分別為Pl, P2, P3, P4, P5。指針按優(yōu)先數(shù)的大小把五個進程連成隊 列,用指針指出下一個進程的進程控制塊的首地 址,最后一個進程中的指針為“ 0”要求運行時間一一假設(shè)進程需要運行的單位 時間數(shù)。優(yōu)先數(shù)一一賦予進程的優(yōu)先數(shù),調(diào)度時總是選 取優(yōu)先數(shù)大的進程先執(zhí)行。狀態(tài)一一可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個進程的初始狀態(tài)都為“就緒”, 用"R”表示,當一個進程運行結(jié)束后,它的狀 態(tài)為"結(jié)束”,用&
3、quot;E”表示。(2) 在每次運行你所設(shè)計的處理器調(diào)度程序 之前,為每個進程任意確定它的"優(yōu)先數(shù)”和"要 求運行時間”。(3) 為了調(diào)度方便,把五個進程按給定的優(yōu)先 數(shù)從大到小連成隊列。用一單元指出隊首進程, 用指針指出隊列的連接情況。例:隊首標志K2(4) 處理器調(diào)度總是選隊首進程運行。米用動 態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就 減“1”。由于本實驗是模擬處理器調(diào)度,所以, 對被選中的進程并不實際的啟動運行,而是執(zhí) 行:優(yōu)先數(shù)-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當一個進程 被選中運行時,必須恢復(fù)進程的現(xiàn)場,讓它占有 處理器運
4、行,直到出現(xiàn)等待事件或運行結(jié)束。 在 這里省去了這些工作。(5) 進程運行一次后,若要求運行時間 0,則 再將它加入隊列(按優(yōu)先數(shù)大小插入,且置隊首 標志);若要求運行時間=0,則把它的狀態(tài)修改 成“結(jié)束”(E),且退出隊列。(6) 若“就緒”狀態(tài)的進程隊列不為空,則重 復(fù)上面(4)和(5)的步驟,直到所有進程都成 為“結(jié)束”狀態(tài)。(7) 在所設(shè)計的程序中應(yīng)有顯示或打印語句, 能顯示或打印每次被選中進程的進程名以及運 行一次后進程隊列的變化。(8) 為五個進程任意確定一組“優(yōu)先數(shù)”和“要 求運行時間”,啟動所設(shè)計的處理器調(diào)度程序, 顯示或打印逐次被選中進程的進程名以及進程 控制塊的動態(tài)變化過程
5、。四、實驗內(nèi)容1畫出算法流程圖2.程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明。1結(jié)構(gòu)體typedef struct PCB /圭寸裝進程結(jié)構(gòu)體 char n ame2;int time;int prior_num;char state;structPCB* next;PCEJ* pPCB/結(jié)構(gòu)體名為PCB pPCB是指向結(jié)構(gòu)體的指針2鏈表 pPCBCreateLink( PCB* arr )int i = 0;int j = 0;int pos = 0;int posl = 0;pPCBhead = NULLfor (i =0; i <N; i+)頭結(jié)點/先找出優(yōu)先級最高的進程,賦給if ( arr
6、 i.prior_num =pos = i;break;head=& arr pos;for (i=N- 1; i > 0; i-)他進程,鏈起來/按優(yōu)先級大小依次找到其for (j = 0; j < N j+)if ( arr j.prior_num = i)pos1 = j;break;arr pos.next = & arr posl;pos = posl;return head;/返回頭結(jié)點3.源程序#defi ne _CRT_SECURE_NO_WARN1NGS#ifndef _SCHEDULING_H_#defi ne _SCHEDULIHG_H_#de
7、fi ne N5#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>typedef struct PCB /圭寸裝進程結(jié)構(gòu)體char n ame2;int time;int prior_num;char state;struct PCB* next;PCB * pPCB /結(jié)構(gòu)體名為PCB pPCB是指向結(jié)構(gòu)體的指針pPCBCreateLink( PCharr);/創(chuàng)建鏈表把5個進程鏈起來void InitPCB( PCB*arr, int *a);/
8、初始化進程pPCBrunPCB(PCB*arr, pPCBpcb); / 進程運行 void printPCB( PCB*arr);/輸出進程的初始狀態(tài)void random( int a, int n);/將數(shù)組內(nèi)容打亂順序void PrintRun( pPCEhead);/ 輸出運行后的進程#en dif#include "head.h"void random( int a, int n) | int index, tmp, i;srand( unsigned int )time( NULL); for (i = 0; i < n; i+) in dex = ra
9、n d() % (n - i) + i;if (index != i)tmp = ai; ai = ai ndex; ai ndex = tmp;pPCBCreateLink( PCB* arr) |int i = 0;int j = 0;int pos = 0;int posl = 0;pPCBhead = NULLfor (i = 0; i <N; i+)/先找出優(yōu)先級最高的進程,賦給頭結(jié)點if ( arr i.prior_num =N _pos = i;break;head = & arr pos;for (i = N- 1; i > 0; i-)/按優(yōu)先級大小依次找
10、到其他進程,鏈起來for (j = 0; j <N; j+)if ( arr j.prior_num = i) posl = j;break;arr pos.next = & arr posl; pos = posl;retur n head;/返回頭結(jié)點cur->time-;/先讓進程的時間和優(yōu)先級減一void InitPCB( PCB* arr , int * a) | int i = 0;char *str = "p1" , "p2" , "p3" , "p4" , "p5&qu
11、ot; ;for (i = 0; i <N; i+)/將5個進程初始化strcpy( arr , stri);arr i.prior_num =ai;arr i.state ='R'arr i.next =NULLarr i.time = (rand() % 4) + 1;/這里將所需運行時間控制在4以內(nèi)void printPCB( PCB* arr)/打印進程最初狀態(tài) |int i = 0;for (i = 0; i <N; i+)printf("進程名稱:%sn", arr );printf("進程優(yōu)先級:%
12、dn", arr i.prior_num);printf("進程所需運行時間:%dn", arr i.time); printf("進程當前狀態(tài):%cn", arr i.state);printf( "n");while (cur) cur->prior_ nu m-;if (cur->time = 0)/判斷所需運行時間是否為0if (cur = head) /判斷是否是頭結(jié)點cur->state ='E'head = head- >n ext; cur = head;prev-&g
13、t;n ext = cur->n ext; cur = cur->n ext;else/若時間不為0,指針向后移動prev = cur;cur = cur->n ext;retur nhead; void PrintRun( pPCBhead) IpPCBur = head;printf("進程運行:n");while (cur)printf("進程名稱:%sn", cur->name);printf("進程優(yōu)先級:%dn", cur->prior_num);printf("所需運行時間:%dn
14、", cur->time);printf("當前狀態(tài):%cn", cur->state);printf( "n");cur = cur- >n ext; #include "head.h" int main() PCBpcb; pPCEhead;int a = 1,2, 3, 4, 5 ; random(a, N);PCBarr N|;In itPCB(arr,a); prin tPCB(arr); head = CreateL in k(arr); printf("運行一次:n"); head = run PCB(head, & pcb); Prin tRu n(head);printf("運行二次:n"); head = run PCB(head, & pcb);Prin tRu n(head);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自制水囊在剖宮產(chǎn)宮縮乏力出血中的臨床應(yīng)用
- 應(yīng)急響應(yīng)的統(tǒng)一指揮
- 二零二五年度道路設(shè)施更新改造合同3篇
- 二零二五年度個人鄉(xiāng)村旅游消費貸款合同示范文本2篇
- 二零二五年度屋頂防水隔熱節(jié)能改造合同4篇
- 2025年度新能源儲能系統(tǒng)采購與安裝合同范本3篇
- 2025版高層建筑消防系統(tǒng)改造合同協(xié)議書3篇
- 二零二五年度個人股權(quán)代持與公司解散合同3篇
- 不良反應(yīng)上報流程
- 二零二五年度大學(xué)生創(chuàng)業(yè)項目融資借款合同
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計算方法
- 運動競賽學(xué)課件
- 2022年上海市初中畢業(yè)數(shù)學(xué)課程終結(jié)性評價指南
- DIC診治新進展課件
- 公路工程施工現(xiàn)場安全檢查手冊
- 1汽輪機跳閘事故演練
- 禮品(禮金)上交登記臺賬
- 高考作文備考-議論文對比論證 課件14張
- 普通高中英語課程標準詞匯表
- 新華師大版七年級下冊初中數(shù)學(xué) 7.4 實踐與探索課時練(課后作業(yè)設(shè)計)
- 2023高中物理步步高大一輪 第五章 第1講 萬有引力定律及應(yīng)用
評論
0/150
提交評論