版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上院 系:計 算 機(jī) 學(xué) 院實驗課程: 操作系統(tǒng)實驗項目:進(jìn)程調(diào)度的設(shè)計與實現(xiàn)指導(dǎo)老師: 陳紅英老師 開課時間:2011 2012年度第 2學(xué)期專 業(yè):網(wǎng)絡(luò)工程班 級:10級學(xué) 生:yuth學(xué) 號:*一、實驗項目名稱 進(jìn)程調(diào)度的設(shè)計與實現(xiàn)二、實驗?zāi)康募耙?、 綜合應(yīng)用下列知識點設(shè)計并實現(xiàn)操作系統(tǒng)的進(jìn)程調(diào)度:鄰接表,布爾數(shù) 組,非阻塞輸入,圖形用戶界面 GUI,進(jìn)程控制塊,進(jìn)程狀態(tài)轉(zhuǎn)換,多級反饋隊列進(jìn)程調(diào)度算法。 2、 加深理解操作系統(tǒng)進(jìn)程調(diào)度的過程。 3、 加深理解多級反饋隊列進(jìn)程調(diào)度算法。三、實驗主要硬件軟件環(huán)境 32位PC機(jī),VC+6四、實驗內(nèi)容及步驟 1、采用一
2、種熟悉的語言,如 C、PASCAL 或 C+等,編制程序,最好關(guān)鍵代碼采用 C/C+,界面設(shè)計可采用其它自己喜歡的語言。 2、采用多級反饋隊列調(diào)度算法進(jìn)行進(jìn)程調(diào)度。 3、每個進(jìn)程對應(yīng)一個 PCB 。在PCB 中包括進(jìn)程標(biāo)識符pid、進(jìn)程的狀態(tài)標(biāo)識 status、進(jìn)程優(yōu)先級 priority、進(jìn)程的隊列指針 next 和表示進(jìn)程生命周 期的數(shù)據(jù)life(在實際系統(tǒng)中不包括該項)。 4、創(chuàng)建進(jìn)程時即創(chuàng)建一個 PCB,各個進(jìn)程的 pid 都是唯一的,pid 是在 1 到 100 范圍內(nèi)的一個整數(shù)。可以創(chuàng)建一個下標(biāo)為 1 到 100 的布爾數(shù)組, “真”表示下標(biāo)對應(yīng)的進(jìn)程標(biāo)識號是空閑的,“假”表示下標(biāo)
3、對應(yīng)的進(jìn)程標(biāo)識號已分配給某個進(jìn)程。 5、進(jìn)程狀態(tài) status 的取值為“就緒 ready ”或“運行 run ”,剛創(chuàng)建時,狀態(tài)為“ready ”。被進(jìn)程調(diào)度程序選中后變?yōu)椤皉un ”。 6、進(jìn)程優(yōu)先級 priority 是 0 到 49 范圍內(nèi)的一個隨機(jī)整數(shù)。 7、進(jìn)程生命周期 life 是 1 到 5 范圍內(nèi)的一個隨機(jī)整數(shù)。 8、初始化時,創(chuàng)建一個鄰接表,包含 50 個就緒隊列,各就緒隊列的進(jìn)程優(yōu)先級 priority 分別是 0 到 49 。 9、為了模擬用戶動態(tài)提交任務(wù)的過程,要求動態(tài)創(chuàng)建進(jìn)程。進(jìn)入進(jìn)程調(diào)度 循環(huán)后,每次按 ctrl+f 即動態(tài)創(chuàng)建一個進(jìn)程,然后將該 PCB 插入就緒
4、隊列中。按 ctrl+q 退出進(jìn)程調(diào)度循環(huán)。 10、在進(jìn)程調(diào)度循環(huán)中,每次選擇優(yōu)先級最大的就緒進(jìn)程來執(zhí)行。將其狀態(tài)從就緒變?yōu)檫\行,通過延時一段時間來模擬該進(jìn)程執(zhí)行一個時間片的過程,然后優(yōu)先級減半,生命周期減一。設(shè)計圖形用戶界面 GUI,在窗口中顯示該進(jìn)程和其他所有進(jìn)程的 PCB 內(nèi)容。如果將該運行進(jìn)程的生命周期不為 0,則重新把它變?yōu)榫途w狀態(tài),插入就緒隊列中;否則該進(jìn)程執(zhí)行完成,撤消其 PCB 。以上為一次進(jìn)程調(diào)度循環(huán)。五、實驗設(shè)計(一)、需求分析1、 采用一種熟悉的語言,如 C、PASCAL 或 C+等,編制程序,最好關(guān)鍵代碼采用 C/C+,界面設(shè)計可采用其它自己喜歡的語言。 2、 采用多級
5、反饋隊列調(diào)度算法進(jìn)行進(jìn)程調(diào)度。3、 要求動態(tài)創(chuàng)建進(jìn)程。進(jìn)入進(jìn)程調(diào)度 循環(huán)后,每次按 ctrl+f 即動態(tài)創(chuàng)建一個進(jìn)程,然后將該 PCB 插入就緒隊列中。按 ctrl+q 退出進(jìn)程調(diào)度循環(huán)。 (二)詳細(xì)設(shè)計1、總體設(shè)計方案流程圖2、創(chuàng)建進(jìn)程函數(shù)3、進(jìn)程調(diào)度函數(shù) 4、使用的數(shù)據(jù)結(jié)構(gòu)(一)、進(jìn)程的PCB結(jié)構(gòu)/進(jìn)程隊列節(jié)點(由于僅僅是模擬實驗,這里無動作)struct process;/進(jìn)程控制塊PCBstruct PCBint pid; /進(jìn)程標(biāo)識符string status; /進(jìn)程的狀態(tài)標(biāo)識,取值為“就緒 ready ”或“運行 run ”int priority; /進(jìn)程優(yōu)先級,0 到 49
6、范圍內(nèi)的一個隨機(jī)整數(shù)。process *next; /進(jìn)程的隊列指針int life; /進(jìn)程生命周期,1 到 5 范圍內(nèi)的一個隨機(jī)整數(shù)。void operator = (PCB p)/運算符=重載pid=p.pid;status=p.status;priority=p.priority;next=p.next;life=p.life;/就緒隊列節(jié)點struct readyquePCB pc;struct readyque *next;void operator = (readyque r) /運算符=重載pc=r.pc;next=r.next;(二)、進(jìn)程調(diào)度類threadmanager成員
7、:class threadmanagerprivate:bool pidarray101 ; /“真”表示下標(biāo)對應(yīng)的進(jìn)程標(biāo)識號是空閑的,“假”表示下標(biāo)對應(yīng)的進(jìn)程標(biāo)識號已分配給某個進(jìn)程。 struct readyque adj50; /鄰接表public:threadmanager(); /構(gòu)造函數(shù)void run(); /運行進(jìn)程調(diào)度程序(對外的接口)bool newpro(); /新建一個進(jìn)程的函數(shù)void Manage_Draw(); /進(jìn)程調(diào)度并將進(jìn)程調(diào)度的情況顯示在屏幕上void Drawpro(int priority); /畫出優(yōu)先級比正在運行進(jìn)程優(yōu)先級低的其他進(jìn)程;六、主要功能模
8、塊 (一)、構(gòu)造函數(shù)threadmanager:threadmanager() int i;/初始化鄰接表for(i=0;i<50;i+)adji.next=NULL;/“真”表示下標(biāo)對應(yīng)的進(jìn)程標(biāo)識號(1100)是空閑的,“假”表示下標(biāo)對應(yīng)的進(jìn)程標(biāo)識號已分配給某個進(jìn)程。 for(i=0;i<101;i+)pidarrayi=true; /剛開始每個進(jìn)程標(biāo)識號都是空閑的。(二)、運行進(jìn)程調(diào)度程序。功能:監(jiān)聽各個按鍵并作出相應(yīng)動作void threadmanager:run()int c;srand( (unsigned)time( NULL ) );/srand()函數(shù)產(chǎn)生一個以當(dāng)前
9、時間開始的隨機(jī)種子 while(1) /cout<<"請輸入要進(jìn)行的操作:Ctrl+f(新建進(jìn)程) Ctrl+r(開始調(diào)度) Ctrl+q(停止調(diào)度)"<<endl;cout<<"Please input the key you want to do"<<endl;cout<<" Ctrl+f(new thread), Ctrl+r(start manager) Ctrl+q(stop manager)"<<endl;/檢查當(dāng)前是否鍵盤輸入,若有則返回一個非0值,
10、否則返回0 if(!_kbhit() c=_getch(); /_getch返回的是鍵的ascii switch(c)case 0x6: /Ctrl+f(新建進(jìn)程)srand( (unsigned)time( NULL ) );/srand()函數(shù)產(chǎn)生一個以當(dāng)前時間開始的隨機(jī)種子 newpro();break; case 0x12: /Ctrl+r(開始調(diào)度)Manage_Draw();break; case 0x11: /Ctrl+q(停止調(diào)度) ; /進(jìn)程調(diào)度并將進(jìn)程調(diào)度的情況顯示在屏幕上void threadmanager:Manage_Draw()readyque *rq=NULL,*
11、tmpr=NULL;int i,j=0;/cout<<" 優(yōu)先級 標(biāo)識符 狀態(tài)標(biāo)識 生命周期"<<endl;cout<<" priority pid status life"<<endl;j=1;for(i=49;i>=0;i-) /找優(yōu)先級最大的進(jìn)程來執(zhí)行if(adji.next!=NULL) /當(dāng)對應(yīng)的就緒隊列不為空時rq=adji.next; /從就緒隊列取出一個進(jìn)程執(zhí)行。adji.next=rq->next;rq->pc.status="run" Sleep(1
12、500); /通過延時一段時間來模擬該進(jìn)程執(zhí)行一個時間片的過程./畫優(yōu)先級cout<<" *"<<rq->pc.priority<<"*"/畫一次進(jìn)程的調(diào)度情況/1、畫正在運行進(jìn)程的PCB/設(shè)置下一個輸出文本的字體顏色:綠色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN); cout<<"->*"<<rq->pc.p
13、id<<"*"<<rq->pc.status<<"*"<<rq->pc.life<<"*"/2、畫優(yōu)先級與正在運行進(jìn)程相同的其他進(jìn)程的PCB(如果有的話)/設(shè)置下面輸出文本的字體顏色:白色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);tmpr=adj
14、i.next;while(tmpr!=NULL) /當(dāng)對應(yīng)的就緒隊列不為空時cout<<"->*"<<tmpr->pc.pid<<"*"<<tmpr->pc.status<<"*"<<tmpr->pc.life<<"*"tmpr=tmpr->next; j+;if( j%3 =0)cout<<endl<<" "cout<<endl;/3、畫出優(yōu)先級
15、比正在運行進(jìn)程優(yōu)先級低的其他進(jìn)程Drawpro(i);(rq->pc.priority) /= 2; /優(yōu)先級減半(rq->pc.life) -= 1; /生命周期減一/如果該運行進(jìn)程的生命周期不為0,則重新把它變?yōu)榫途w狀態(tài),插入就緒隊列中if(rq->pc.life > 0)rq->pc.status="ready"rq->next = adjrq->pc.priority.next;adjrq->pc.priority.next=rq;else /否則將其進(jìn)程號歸還。pidarrayi=true; break; /一次進(jìn)程
16、調(diào)度循環(huán)結(jié)束。/end of if /end of forcout<<"one time manager have finish!"<<endl<<endl;/畫出優(yōu)先級比正在運行進(jìn)程優(yōu)先級低的其他進(jìn)程void threadmanager:Drawpro(int priority) /priority記錄正在運行進(jìn)程的優(yōu)先級 readyque *rq=NULL; int j;for(int i=priority-1;i>=0;i-)rq=adji.next;if(rq!=NULL)/畫優(yōu)先級cout<<" *&
17、quot;<<i<<"*"j=0;while(rq!=NULL) /當(dāng)對應(yīng)的就緒隊列不為空時cout<<"->*"<<rq->pc.pid<<"*"<<rq->pc.status<<"*"<<rq->pc.life<<"*"rq=rq->next;j+;if( j%3 =0)cout<<endl<<" "cout&l
18、t;<endl;/新建一個進(jìn)程的函數(shù)bool threadmanager:newpro()struct readyque *t = NULL;/srand( (unsigned)time( NULL ) );/srand()函數(shù)產(chǎn)生一個以當(dāng)前時間開始的隨機(jī)種子 for(int i=1;i<101;i+)if(pidarrayi=true) /找一個空的進(jìn)程號t=new readyque; t->pc.pid=i;pidarrayi=false; /宣布該進(jìn)程號已被使用。 t->pc.status="ready"t->pc.priority = rand
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬達(dá)商業(yè)廣場2024年物業(yè)綜合管理協(xié)議版B版
- 論文答辯精要解析
- 2025年度拆遷安置住房租賃及物業(yè)管理合同4篇
- 二零二五年度建筑工程項目建造師勞動合同范本9篇
- 2025年度產(chǎn)教融合校企產(chǎn)學(xué)研合作項目執(zhí)行框架協(xié)議4篇
- 二零二五年度餐廳經(jīng)理勞動合同范本:服務(wù)質(zhì)量提升3篇
- 二零二四年事業(yè)單位委托第三方社保代繳與員工績效獎勵協(xié)議3篇
- 二零二五年度大米產(chǎn)品綠色包裝與環(huán)保材料應(yīng)用合同2篇
- 2024飼料行業(yè)客戶數(shù)據(jù)共享協(xié)議
- 2025年度商業(yè)地產(chǎn)項目場地租賃及物業(yè)管理合同12篇
- 國家自然科學(xué)基金項目申請書
- 電力電纜故障分析報告
- 中國電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計》課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)課件1
- 藥品的收貨與驗收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語人教版必修第一二冊語境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評論
0/150
提交評論