版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、南通大學計算機學院操作系統(tǒng)課程設計報告書設計題目處理器調(diào)度算法模擬專業(yè)班級軟嵌161學生姓名候玉權學號1613072015指導教師二紅日期 2018.07.05實驗報告正文內(nèi)容1、課程設計的目的在采用多道程序設計的系統(tǒng)中,往往有若干個進程同時處于就緒狀態(tài)。當就緒狀態(tài)進程 個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進程優(yōu)先占用處理器。本實驗模擬在 單處理器情況下處理器調(diào)度,幫助學生加深了解處理器調(diào)度的工作。2、課程設計的要求用C+語言編寫程序完成單處理機的進程調(diào)度3、課程設計的環(huán)境在機房完成,運行環(huán)境vs20174、問題描述對cpu調(diào)度算法進行模擬實現(xiàn),包含先來先服務,短作業(yè)優(yōu)先,響應比最
2、高優(yōu)先,時間片 輪轉等算法。5、算法分析數(shù)據(jù)結構struct efchar name10;進程名稱int number;進程編號float daodatime;到達時間float kaishitime;/開始運行時間float yunxingtime;/運行時間float jieshutime;/運行結束時間int shengyutime;/剩余時間int fuwutime;服務時間int order;/運行次序int run_flag;調(diào)度標志int priority;/優(yōu)先級struct ef *next;先來先服務算法int fcfs()/先來先服務float tp = 0;int i;
3、int zx;tp = ef0.daodatime;for (i = 0; ic; i+)efi.kaishitime = tp;efi.jieshutime = efi.kaishitime + efi.yunxingtime;efi.run_flag = 1;tp = efi.jieshutime;zx = i;efzx.order = i + 1;return 0;2,青輸入第1個進程的名字多法度先 先目 算務調(diào)先優(yōu) 來數(shù) 度先程 調(diào)先也比級 S 2,青輸入第1個進程的名字多法度先 先目 算務調(diào)先優(yōu) 來數(shù) 度先程 調(diào)先也比級 S 擇來間費先出程人 選先時短進輸 請 L
4、卜青輸入第1個進程的到達時間:2請輸入第1個進程的運行時間:2,青輸入第2個進程的名字b卜青輸入第功個進程的編號:3,青輸入第N個進程的到達時間:3卜青輸入第2個進程的運行時間:3進程名編號到達時間運行時間開始時間結束時間平均周轉時間平均帶權周轉時間a1222410. 5b3334731. 16667h青按任意鍵繼續(xù). . . .短作業(yè)優(yōu)先int sjf()/短作業(yè)優(yōu)先float temp_time = 0;int i = 0, j;int zx, tc;float yunxingtime;yunxingtime = efi.yunxingtime;j = 1;while (jc) & (ef
5、i.daodatime = efj.daodatime)if (efj.yunxingtimeefi.yunxingtime)yunxingtime = efj.yunxingtime;i = j;j+;查找第一個被調(diào)度的進程對第一個被調(diào)度的進程求相應的參數(shù)zx = i;efzx.kaishitime = efzx.daodatime;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.run_flag = 1;temp_time = efzx.jieshutime;efzx.order = 1;tc = 1;while (tcc
6、)for (j = 0; jc; j+)if (efj.daodatime = temp_time) & (!efj.run_flag)yunxingtime = efj.yunxingtime; zx = j; break;for (j = 0; jc; j+)if (efj.daodatime = temp_time) & (!efj.run_flag) if (efj.yunxingtimeyunxingtime)yunxingtime = efj.yunxingtime;zx= j;查找下一個被調(diào)度的進程對找到的下一個被調(diào)度的進程求相應的參數(shù)efzx.kaishitime = temp
7、_time;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.run_flag = 1;temp_time = efzx.yunxingtime;tc+;efzx.order = tc;return 0;C:WI N DOWSsystem 32cmd.exe2X度調(diào)度先 畀務調(diào)先優(yōu) 先也比級 來間隹先出 先時短 ltL.6.ccl先C:WI N DOWSsystem 32cmd.exe2X度調(diào)度先 畀務調(diào)先優(yōu) 先也比級 來間隹先出 先時短 ltL.6.ccl先優(yōu): 業(yè)目 1 8 程次進輸響應比高優(yōu)先i
8、nt hrrf() /響應比高優(yōu)先int j, zx, tc;float temp_time, respond_rate, max_respond_rate;第一個進程被調(diào)度ef0.kaishitime = ef0.daodatime;ef0.jieshutime = ef0.kaishitime + ef0.yunxingtime;temp_time = ef0.jieshutime;ef0.run_flag = 1;ef0.order = 1;tc = 1;/調(diào)度其他進程while (tcc)max_respond_rate = 0;for (j = 1; jc; j+)if (efj.d
9、aodatime max_respond_rate)max_respond_rate = respond_rate;zx = j;找響應比高的進程efzx.kaishitime = temp_time;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;temp_time = efzx.jieshutime;efzx.run_flag = 1;tc+= 1;efzx.order = tc;return 0;2447130. 51. 16667a 21b 2E氣青按任意鍵繼續(xù). .:3進程名編號到達時間運行時間開始時間結束時間平均周轉時間平均
10、帶權周轉時間3請輸入第2個進程的運行時間:2請輸入第2個進程的到達時間:冒輸入第2個進程的編號:;2請輸入第2個進程的名字2請輸入第1個進程的運行時間:2請輸入第1個進程的到達時間:請輸入第1個進程的編號:2請輸入第1個進程的名字I 遍 C:WI N DOWSsystem 3 2cm d.exe1BLI2戶蟲15.16.4 I-.度先 畀務調(diào)先優(yōu) 調(diào)先也比級 擇來間費先出 先時短時間片輪struct ef *input()int N, i;/定義隊首、隊尾struct ef *head, *rear;/ p是隊尾指針,q是隊首指針,t是執(zhí)行時間 struct ef *p, *q, *t;/初始
11、化隊首和隊尾為空head = rear = NULL;cout ”請輸入進程數(shù)目: N;for (i = 0; i N; i+)/初始化一個空間給進程p = (struct ef *)malloc(sizeof(struct ef);cout ”請輸入第” i+1 個進程的名字n p-name;cout ”請輸入第” i + 1 個進程的編號:n p-number;cout ”請輸入第” i + 1 個進程的到達時間:n p-daodatime;cout ”請輸入第” i + 1 個進程的服務時間:n p-fuwutime;p-shengyutime = p-fuwutime;p-next =
12、 NULL;/當輸入結束時,把p的數(shù)據(jù)放到隊首,以便下一步執(zhí)行if (rear = NULL)head = p;p-next = NULL;rear = p;/否則執(zhí)行時間為空,隊首變成qelset = NULL;q = head;/當q和q的到達時間小于p的到達時間時,把執(zhí)行時間給qwhile (q & q-daodatime daodatime)t = q;q = q-next;/當q是隊首時,則下一個隊首變成p,以便每個進程都能夠得到時間片if (q = head)p-next = head;head = p;/當執(zhí)行時間片到達隊尾時(執(zhí)行完成),返回給隊首pelse if (t = r
13、ear)rear-next = p;p-next = NULL;rear = p; /否則給隊首p占用執(zhí)行時間,P執(zhí)行完后到q elset-next = p; p-next = q;/返回隊首 return head;void run(struct ef *head)struct ef *p, *t, *r;int num;/運行過程vector vec_out;cout”請輸入時間片:num;/當隊首不為空時,把p給隊首 while (head != NULL)r = p = head;/ 把執(zhí)行時間給隊首 while (p != NULL) t = head;/ p的剩余時間=剩余時間-時
14、間片 p-shengyutime = p-shengyutime - num;p-jieshutime = p-kaishitime + p-fuwutime; string s = p-name;vec_out.push_back(s);/當p運行完,即剩余時間小于0時,仍然把它當做0處理 if (p-shengyutime shengyutime = 0;cout進程編號到達時間服務時間剩余時間完成時間nendl;/時間不為空時,輸出當前進程的信息,并把時間片交給下一個進程 while (t != NULL) cout name number ” daodatime fuwutime sh
15、engyutime ”jieshutime next;/當隊首的剩余時間為0時,先把隊首改成p的下一個,然后釋放內(nèi)存,刪除隊 首節(jié)點if (p-shengyutime = 0) if (p = head)head = p-next;free(p);p = head;否則返回執(zhí)行,把隊尾的下一個指針變成p的下一個指針,隊尾的位置移 動到隊首elser-next = p-next;p = r-next;r = p;否則把隊首的位置給隊尾,把隊首的狀態(tài)顯示為“就緒”狀態(tài)else r = p;p = p-next;cout執(zhí)行順序:nendl;cout vec_out0.c_str()endl;for
16、 (int i = 1; ivec_out.size(); i+) cout vec_outi.c_str()endl;void yunxing()定義時間片的隊首結構體 struct ef *head;/隊首執(zhí)行的時間head =input();run(head);7、程序源代碼#include stdafx.h”#include#include using namespace std;#define MAX 10/實際進程個數(shù)/實際進程個數(shù)/先來先服務短作業(yè)優(yōu)先/響應比高優(yōu)先優(yōu)先級調(diào)度進程參數(shù)輸入/調(diào)度結果輸出int fcfs();int sjf();int hrrf();int yxj(
17、);int in();int out();struct ef進程名稱進程編號到達時間進程名稱進程編號到達時間/開始運行時間/運行時間/運行結束時間/剩余時間/服務時間/運行次序調(diào)度標志/優(yōu)先級int number;float daodatime;float kaishitime;float yunxingtime;float jieshutime;int shengyutime;int fuwutime;int order;int run_flag;int priority;struct ef *next;efMAX;int fcfs()/先來先服務float tp = 0;int i;int
18、 zx;tp = ef0.daodatime;for (i = 0; ic; i+) efi.kaishitime = tp;efi.jieshutime = efi.kaishitime + efi.yunxingtime;efi.run_flag = 1;tp = efi.jieshutime;zx = i;efzx.order = i + 1;return 0;int yxj() /優(yōu)先級調(diào)度float temp_time = 0;int i = 0, j;int zx, tc;int max_priority;max_priority = efi.priority;j = 1;whil
19、e (jefi.priority)max_priority = efj.priority;i = j;j+;查找第一個被調(diào)度的進程對第一個被調(diào)度的進程求相應的參數(shù)zx = i;efzx.kaishitime = efzx.kaishitime;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.run_flag = 1;temp_time = efzx.jieshutime;efzx.order = 1;tc = 1;while (tcc)max_priority = 0;for (j = 0; jc; j+)if (efj.da
20、odatime max_priority)max_priority = efj.priority;zx = j;查找下一個被調(diào)度的進程/對找到的下一個被調(diào)度的進程求相應的參數(shù)efzx.kaishitime = temp_time;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.run_flag = 1;temp_time = efzx.jieshutime;tc+;efzx.order = tc;return 0;int sjf()/短作業(yè)優(yōu)先float temp_time = 0;int i = 0, j;int zx, t
21、c;float yunxingtime;yunxingtime = efi.yunxingtime;j = 1;while (jc) & (efi.daodatime = efj.daodatime)if (efj.yunxingtimeefi.yunxingtime)yunxingtime = efj.yunxingtime;i = j;j+;查找第一個被調(diào)度的進程對第一個被調(diào)度的進程求相應的參數(shù)zx = i;efzx.kaishitime = efzx.daodatime;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.r
22、un_flag = 1;temp_time = efzx.jieshutime;efzx.order = 1;tc = 1;while (tcc)for (j = 0; jc; j+)if (efj.daodatime = temp_time) & (!efj.run_flag)yunxingtime = efj.yunxingtime; zx = j; break;for (j = 0; jc; j+)if (efj.daodatime = temp_time) & (!efj.run_flag) if (efj.yunxingtimeyunxingtime)yunxingtime = ef
23、j.yunxingtime;zx= j;查找下一個被調(diào)度的進程對找到的下一個被調(diào)度的進程求相應的參數(shù)efzx.kaishitime = temp_time;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;efzx.run_flag = 1;temp_time = efzx.yunxingtime;tc+;efzx.order = tc;return 0;int hrrf() /響應比高優(yōu)先int j, zx, tc;float temp_time, respond_rate, max_respond_rate;第一個進程被調(diào)度ef0.k
24、aishitime = ef0.daodatime;ef0.jieshutime = ef0.kaishitime + ef0.yunxingtime;temp_time = ef0.jieshutime;ef0.run_flag = 1;ef0.order = 1;tc = 1;/調(diào)度其他進程while (tcc)max_respond_rate = 0;for (j = 1; jc; j+)if (efj.daodatime max_respond_rate)max_respond_rate = respond_rate;zx = j;找響應比高的進程efzx.kaishitime = t
25、emp_time;efzx.jieshutime = efzx.kaishitime + efzx.yunxingtime;temp_time = efzx.jieshutime;efzx.run_flag = 1;tc+= 1;efzx.order = tc;return 0;int in() 進程參數(shù)輸入int i;cout ”請輸入進程數(shù)目:nc;for (i = 0; ic; i+)cout ”請輸入第” i+1 個進程的名字n ;cout ”請輸入第” i + 1 個進程的編號:n efi.number;cout ”請輸入第” i + 1 個進程的到達時間:n efi
26、.daodatime;cout ”請輸入第” i + 1 個進程的運行時間:n efi.yunxingtime;efi.kaishitime = 0;efi.jieshutime = 0;efi.order = 0;efi.run_flag = 0;return 0;int out() /*調(diào)度結果輸出*/int i;float turn_round_time = 0, fl, w = 0;cout進程名編號到達時間運行時間開始時間結束時間平均周轉時間平均帶權周 轉時間nendl;for (i = 0; ic; i+) f1 = efi.jieshutime - efi.daodatime;t
27、urn_round_time += f1;w += (f1 / efi.yunxingtime);cout efi.number efi.daodatime efi.yunxingtime efi.kaishitime ” efi.jieshutime turn_round_time / c w / cendl;/cout 平均周轉時間=nturn_round_time / cendl;/cout 帶權周轉時間=n w / cendl;return 0;struct ef *input()int N, i;/定義隊首、隊尾 struct ef *head, *rear;/ p
28、是隊尾指針,q是隊首指針,t是執(zhí)行時間 struct ef *p, *q, *t;/初始化隊首和隊尾為空 head = rear = NULL;cout ”請輸入進程數(shù)目: N;for (i = 0; i N; i+) /初始化一個空間給進程 p = (struct ef *)malloc(sizeof(struct ef);cout ”請輸入第” i+1 個進程的名字n p-name;cout ”請輸入第” i + 1 個進程的編號:n p-number;cout ”請輸入第” i + 1 個進程的到達時間:n p-daodatime;cout ”請輸入第” i + 1 個進程的服務時間:n
29、 p-fuwutime;p-shengyutime = p-fuwutime;p-next = NULL;/當輸入結束時,把p的數(shù)據(jù)放到隊首,以便下一步執(zhí)行if (rear = NULL)head = p;p-next = NULL;rear = p;/否則執(zhí)行時間為空,隊首變成qelset = NULL;q = head;/當q和q的到達時間小于p的到達時間時,把執(zhí)行時間給qwhile (q & q-daodatime daodatime)t = q;q = q-next;/當q是隊首時,則下一個隊首變成p,以便每個進程都能夠得到時間片if (q = head)p-next = head;h
30、ead = p;/當執(zhí)行時間片到達隊尾時(執(zhí)行完成),返回給隊首pelse if (t = rear)rear-next = p;p-next = NULL;rear = p;/否則給隊首p占用執(zhí)行時間,p執(zhí)行完后到qelset-next = p;p-next = q;/返回隊首 return head;void run(struct ef *head)struct ef *p, *t, *r;int num;/運行過程vector vec_out;cout”請輸入時間片:num;/當隊首不為空時,把p給隊首while (head != NULL)r = p = head;/把執(zhí)行時間給隊首w
31、hile (p != NULL)t = head;/ p的剩余時間=剩余時間-時間片 p-shengyutime = p-shengyutime - num;p-jieshutime = p-kaishitime + p-fuwutime;string s = p-name;vec_out.push_back(s);/當p運行完,即剩余時間小于0時,仍然把它當做0處理if (p-shengyutime shengyutime = 0;cout進程編號到達時間服務時間剩余時間完成時間nendl;/時間不為空時,輸出當前進程的信息,并把時間片交給下一個進程 while (t != NULL)cout name number ” daodatime fuwutime shengyutime ”jieshutime next;/當隊首的剩余時間為0時,先把隊首改成p的下一個,然后釋放內(nèi)存,刪除隊首節(jié)點if (p-shengyutime = 0)if (p = head)head = p-next;free(p);p = head;否則返回執(zhí)行,把隊尾的下一個指針變成p的下一個指針,隊尾的位置移動到隊首elser-next = p-next;p = r-n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)環(huán)保渣土資源化利用承包合同4篇
- 2025年農(nóng)業(yè)大棚租賃與蔬菜種植一體化服務合同4篇
- 2025年度照明燈具代加工服務合同模板4篇
- 2025年度校園食堂炊事員職務聘用合同書3篇
- 2025年度智慧城市基礎設施大包工程合同4篇
- 2024版建設工程借款合同范本簡單
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園租賃合同示范文本4篇
- 2025年度安保應急響應預案制定合同范本3篇
- 2024物業(yè)房屋裝修工程合同工程量清單
- 2024版酒類專賣店加盟的合同
- 物業(yè)民法典知識培訓課件
- 2023年初中畢業(yè)生信息技術中考知識點詳解
- 2024-2025學年山東省德州市高中五校高二上學期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風病病情分析
- 《急診科建設與設備配置標準》
- 第一章-地震工程學概論
- JJF(陜) 063-2021 漆膜沖擊器校準規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2024年度家庭醫(yī)生簽約服務培訓課件
評論
0/150
提交評論