操作系統(tǒng)實驗報告(進程調度算法)_第1頁
操作系統(tǒng)實驗報告(進程調度算法)_第2頁
操作系統(tǒng)實驗報告(進程調度算法)_第3頁
操作系統(tǒng)實驗報告(進程調度算法)_第4頁
操作系統(tǒng)實驗報告(進程調度算法)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統(tǒng)實驗報告實驗1 進程調度算法報告日期:2016-6-10姓 名:學 號:班 級:任課教師: 實驗1 進程調度算法一、實驗內容按優(yōu)先數(shù)調度算法實現(xiàn)處理器調度。二、實驗目的在采用多道程序設計的系統(tǒng)中,往往有若干個進程同時處于就緒狀態(tài)。當就緒進程個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進程優(yōu)先占用處理器。本實驗模擬在單處理器情況下的處理器調度,幫助學生加深了解處理器調度的工作。三、實驗原理設計一個按優(yōu)先數(shù)調度算法實現(xiàn)處理器調度的程序。 (1) 假定系統(tǒng)有五個進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式為:進程名指針要求運行時間優(yōu)先數(shù)狀態(tài)其中,進程名作為進程的標識,假

2、設五個進程的進程名分別為P1,P2,P3,P4,P5。指針按優(yōu)先數(shù)的大小把五個進程連成隊列,用指針指出下一個進程的進程控制塊的首地址,最后一個進程中的指針為“0”。要求運行時間假設進程需要運行的單位時間數(shù)。優(yōu)先數(shù)賦予進程的優(yōu)先數(shù),調度時總是選取優(yōu)先數(shù)大的進程先執(zhí)行。狀態(tài)可假設有兩種狀態(tài),“就緒”狀態(tài)和“結束”狀態(tài)。五個進程的初始狀態(tài)都為“就緒”,用“R”表示,當一個進程運行結束后,它的狀態(tài)為“結束”,用“E”表示。(2) 在每次運行你所設計的處理器調度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”和“要求運行時間”。(3) 為了調度方便,把五個進程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進

3、程,用指針指出隊列的連接情況。例: 隊首標志 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調度,所以,對被選中的進程并不實際的啟動運行,而是執(zhí)行:優(yōu)先數(shù)-1要求運行時間-1來模擬進程的一次運行。提醒注意的是:在實際的系統(tǒng)中,當一個進程被選中運行時,必須恢復進程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行結束。在這里省去了這些工作。(5) 進程運行一次后,若要求運行時間

4、5;0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且置隊首標志);若要求運行時間=0,則把它的狀態(tài)修改成“結束”(E),且退出隊列。(6) 若“就緒”狀態(tài)的進程隊列不為空,則重復上面(4)和(5)的步驟,直到所有進程都成為“結束”狀態(tài)。(7) 在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中進程的進程名以及運行一次后進程隊列的變化。(8) 為五個進程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設計的處理器調度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。四、實驗內容1.畫出算法流程圖2. 程序中使用的數(shù)據(jù)結構及符號說明。1>結構體typedef struct

5、 PCB /封裝進程結構體char name2;int time;int prior_num;char state;struct PCB *next;PCB,*pPCB; /結構體名為PCB,pPCB是指向結構體的指針2>鏈表pPCB CreateLink(PCB *arr)int i = 0;int j = 0;int pos = 0;int pos1 = 0;pPCB head = NULL;for (i = 0; i < N; i+) /先找出優(yōu)先級最高的進程,賦給頭結點if (arri.prior_num = N)pos = i;break;head = &arrp

6、os;for (i = N - 1; i > 0; i-) /按優(yōu)先級大小依次找到其他進程,鏈起來for (j = 0; j < N; j+)if (arrj.prior_num = i)pos1 = j;break;arrpos.next = &arrpos1;pos = pos1;return head; /返回頭結點3. 源程序#define _CRT_SECURE_NO_WARNINGS 1 #ifndef _SCHEDULING_H_#define _SCHEDULIHG_H_#define N 5#include<stdio.h>#include&l

7、t;stdlib.h>#include<time.h>#include<string.h>typedef struct PCB /封裝進程結構體char name2;int time;int prior_num;char state;struct PCB *next;PCB, *pPCB; /結構體名為PCB,pPCB是指向結構體的指針pPCB CreateLink(PCB *arr); /創(chuàng)建鏈表把5個進程鏈起來void InitPCB(PCB *arr,int *a); /初始化進程pPCB runPCB(PCB *arr, pPCB pcb); /進程運行v

8、oid printPCB(PCB *arr); /輸出進程的初始狀態(tài)void random(int a, int n); /將數(shù)組內容打亂順序void PrintRun(pPCB head); /輸出運行后的進程#endif#include"head.h"void random(int a, int n)int index, tmp, i;srand(unsigned int)time(NULL);for (i = 0; i <n; i+)index = rand() % (n - i) + i;if (index != i)tmp = ai;ai = aindex;

9、aindex = tmp;pPCB CreateLink(PCB *arr)int i = 0;int j = 0;int pos = 0;int pos1 = 0;pPCB head = NULL;for (i = 0; i < N; i+) /先找出優(yōu)先級最高的進程,賦給頭結點if (arri.prior_num = N)pos = i;break;head = &arrpos;for (i = N - 1; i > 0; i-) /按優(yōu)先級大小依次找到其他進程,鏈起來for (j = 0; j < N; j+)if (arrj.prior_num = i)pos

10、1 = j;break;arrpos.next = &arrpos1;pos = pos1;return head; /返回頭結點void InitPCB(PCB *arr,int *a)int i = 0;char *str = "p1", "p2", "p3", "p4", "p5" ;for (i = 0; i < N; i+) /將5個進程初始化strcpy(, stri);arri.prior_num = ai;arri.state = 'R&#

11、39;arri.next = NULL;arri.time = (rand() % 4) + 1; /這里將所需運行時間控制在4以內void printPCB(PCB *arr) /打印進程最初狀態(tài)int i = 0;for (i = 0; i < N; i+)printf("進程名稱:%sn", );printf("進程優(yōu)先級:%dn", arri.prior_num);printf("進程所需運行時間:%dn", arri.time);printf("進程當前狀態(tài):%cn", arri.

12、state);printf("n");pPCB runPCB(pPCB head, pPCB pcb) /進程執(zhí)行函數(shù)int i = 0;pPCB cur=head;pPCB prev = NULL;while (cur)cur->time-; /先讓進程的時間和優(yōu)先級減一cur->prior_num-;if (cur->time = 0) /判斷所需運行時間是否為0if (cur = head) /判斷是否是頭結點cur->state = 'E'head = head->next;cur = head;elsecur->

13、state = 'E'prev->next = cur->next;cur = cur->next;else /若時間不為0,指針向后移動prev = cur;cur = cur->next;return head;void PrintRun(pPCB head)pPCB cur = head;printf("進程運行:n");while (cur)printf("進程名稱:%sn", cur->name);printf("進程優(yōu)先級:%dn", cur->prior_num);pr

14、intf("所需運行時間:%dn", cur->time);printf("當前狀態(tài):%cn", cur->state);printf("n");cur = cur->next;#include"head.h"int main()PCB pcb;pPCB head;int a = 1, 2, 3, 4, 5 ;random(a, N);PCB arrN;InitPCB(arr,a);printPCB(arr);head = CreateLink(arr);printf("運行一次:n");head = runPCB(head, &pcb);PrintRun(head);printf("運行二次:n");head = runPCB(head, &pcb);PrintRun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論