




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、院 系:計(jì) 算 機(jī) 學(xué) 院實(shí)驗(yàn)課程: 操作系統(tǒng)實(shí)驗(yàn)項(xiàng)目:進(jìn)程調(diào)度的設(shè)計(jì)與實(shí)現(xiàn)指導(dǎo)老師: 陳紅英老師 開(kāi)課時(shí)間:2011 2012年度第 2學(xué)期專 業(yè):網(wǎng)絡(luò)工程班 級(jí):10級(jí)學(xué) 生:yuth學(xué) 號(hào):*一、實(shí)驗(yàn)項(xiàng)目名稱 進(jìn)程調(diào)度的設(shè)計(jì)與實(shí)現(xiàn)二、實(shí)驗(yàn)?zāi)康募耙?、 綜合應(yīng)用下列知識(shí)點(diǎn)設(shè)計(jì)并實(shí)現(xiàn)操作系統(tǒng)的進(jìn)程調(diào)度:鄰接表,布爾數(shù) 組,非阻塞輸入,圖形用戶界面 GUI,進(jìn)程控制塊,進(jìn)程狀態(tài)轉(zhuǎn)換,多級(jí)反饋隊(duì)列進(jìn)程調(diào)度算法。 2、 加深理解操作系統(tǒng)進(jìn)程調(diào)度的過(guò)程。 3、 加深理解多級(jí)反饋隊(duì)列進(jìn)程調(diào)度算法。三、實(shí)驗(yàn)主要硬件軟件環(huán)境 32位PC機(jī),VC+6四、實(shí)驗(yàn)內(nèi)容及步驟 1、采用一種熟悉的語(yǔ)言,如 C、PA
2、SCAL 或 C+等,編制程序,最好關(guān)鍵代碼采用 C/C+,界面設(shè)計(jì)可采用其它自己喜歡的語(yǔ)言。 2、采用多級(jí)反饋隊(duì)列調(diào)度算法進(jìn)行進(jìn)程調(diào)度。 3、每個(gè)進(jìn)程對(duì)應(yīng)一個(gè) PCB 。在PCB 中包括進(jìn)程標(biāo)識(shí)符pid、進(jìn)程的狀態(tài)標(biāo)識(shí) status、進(jìn)程優(yōu)先級(jí) priority、進(jìn)程的隊(duì)列指針 next 和表示進(jìn)程生命周 期的數(shù)據(jù)life(在實(shí)際系統(tǒng)中不包括該項(xiàng))。 4、創(chuàng)建進(jìn)程時(shí)即創(chuàng)建一個(gè) PCB,各個(gè)進(jìn)程的 pid 都是唯一的,pid 是在 1 到 100 范圍內(nèi)的一個(gè)整數(shù)??梢詣?chuàng)建一個(gè)下標(biāo)為 1 到 100 的布爾數(shù)組, “真”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)是空閑的,“假”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)已分配給某
3、個(gè)進(jìn)程。 5、進(jìn)程狀態(tài) status 的取值為“就緒 ready ”或“運(yùn)行 run ”,剛創(chuàng)建時(shí),狀態(tài)為“ready ”。被進(jìn)程調(diào)度程序選中后變?yōu)椤皉un ”。 6、進(jìn)程優(yōu)先級(jí) priority 是 0 到 49 范圍內(nèi)的一個(gè)隨機(jī)整數(shù)。 7、進(jìn)程生命周期 life 是 1 到 5 范圍內(nèi)的一個(gè)隨機(jī)整數(shù)。 8、初始化時(shí),創(chuàng)建一個(gè)鄰接表,包含 50 個(gè)就緒隊(duì)列,各就緒隊(duì)列的進(jìn)程優(yōu)先級(jí) priority 分別是 0 到 49 。 9、為了模擬用戶動(dòng)態(tài)提交任務(wù)的過(guò)程,要求動(dòng)態(tài)創(chuàng)建進(jìn)程。進(jìn)入進(jìn)程調(diào)度 循環(huán)后,每次按 ctrl+f 即動(dòng)態(tài)創(chuàng)建一個(gè)進(jìn)程,然后將該 PCB 插入就緒隊(duì)列中。按 ctrl+q
4、退出進(jìn)程調(diào)度循環(huán)。 10、在進(jìn)程調(diào)度循環(huán)中,每次選擇優(yōu)先級(jí)最大的就緒進(jìn)程來(lái)執(zhí)行。將其狀態(tài)從就緒變?yōu)檫\(yùn)行,通過(guò)延時(shí)一段時(shí)間來(lái)模擬該進(jìn)程執(zhí)行一個(gè)時(shí)間片的過(guò)程,然后優(yōu)先級(jí)減半,生命周期減一。設(shè)計(jì)圖形用戶界面 GUI,在窗口中顯示該進(jìn)程和其他所有進(jìn)程的 PCB 內(nèi)容。如果將該運(yùn)行進(jìn)程的生命周期不為 0,則重新把它變?yōu)榫途w狀態(tài),插入就緒隊(duì)列中;否則該進(jìn)程執(zhí)行完成,撤消其 PCB 。以上為一次進(jìn)程調(diào)度循環(huán)。五、實(shí)驗(yàn)設(shè)計(jì)(一)、需求分析1、 采用一種熟悉的語(yǔ)言,如 C、PASCAL 或 C+等,編制程序,最好關(guān)鍵代碼采用 C/C+,界面設(shè)計(jì)可采用其它自己喜歡的語(yǔ)言。 2、 采用多級(jí)反饋隊(duì)列調(diào)度算法進(jìn)行進(jìn)程調(diào)
5、度。3、 要求動(dòng)態(tài)創(chuàng)建進(jìn)程。進(jìn)入進(jìn)程調(diào)度 循環(huán)后,每次按 ctrl+f 即動(dòng)態(tài)創(chuàng)建一個(gè)進(jìn)程,然后將該 PCB 插入就緒隊(duì)列中。按 ctrl+q 退出進(jìn)程調(diào)度循環(huán)。 (二)詳細(xì)設(shè)計(jì)1、總體設(shè)計(jì)方案流程圖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)程隊(duì)列節(jié)點(diǎn)(由于僅僅是模擬實(shí)驗(yàn),這里無(wú)動(dòng)作)struct process;/進(jìn)程控制塊PCBstruct PCBint pid; /進(jìn)程標(biāo)識(shí)符string status; /進(jìn)程的狀態(tài)標(biāo)識(shí),取值為“就緒 ready ”或“運(yùn)行 run ”int priority; /進(jìn)程優(yōu)先級(jí),0 到 49 范圍內(nèi)的一個(gè)隨機(jī)整數(shù)。pr
6、ocess *next; /進(jìn)程的隊(duì)列指針int life; /進(jìn)程生命周期,1 到 5 范圍內(nèi)的一個(gè)隨機(jī)整數(shù)。void operator = (PCB p)/運(yùn)算符=重載pid=p.pid;status=p.status;priority=p.priority;next=p.next;life=p.life;/就緒隊(duì)列節(jié)點(diǎn)struct readyquePCB pc;struct readyque *next;void operator = (readyque r) /運(yùn)算符=重載pc=r.pc;next=r.next;(二)、進(jìn)程調(diào)度類threadmanager成員:class thread
7、managerprivate:bool pidarray101 ; /“真”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)是空閑的,“假”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)已分配給某個(gè)進(jìn)程。 struct readyque adj50; /鄰接表public:threadmanager(); /構(gòu)造函數(shù)void run(); /運(yùn)行進(jìn)程調(diào)度程序(對(duì)外的接口)bool newpro(); /新建一個(gè)進(jìn)程的函數(shù)void Manage_Draw(); /進(jìn)程調(diào)度并將進(jìn)程調(diào)度的情況顯示在屏幕上void Drawpro(int priority); /畫(huà)出優(yōu)先級(jí)比正在運(yùn)行進(jìn)程優(yōu)先級(jí)低的其他進(jìn)程;六、主要功能模塊 (一)、構(gòu)造函數(shù)thr
8、eadmanager:threadmanager() int i;/初始化鄰接表for(i=0;i50;i+)adji.next=NULL;/“真”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)(1100)是空閑的,“假”表示下標(biāo)對(duì)應(yīng)的進(jìn)程標(biāo)識(shí)號(hào)已分配給某個(gè)進(jìn)程。 for(i=0;i101;i+)pidarrayi=true; /剛開(kāi)始每個(gè)進(jìn)程標(biāo)識(shí)號(hào)都是空閑的。(二)、運(yùn)行進(jìn)程調(diào)度程序。功能:監(jiān)聽(tīng)各個(gè)按鍵并作出相應(yīng)動(dòng)作void threadmanager:run()int c;srand( (unsigned)time( NULL ) );/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開(kāi)始的隨機(jī)種子 while(1) /c
9、out請(qǐng)輸入要進(jìn)行的操作:Ctrl+f(新建進(jìn)程) Ctrl+r(開(kāi)始調(diào)度) Ctrl+q(停止調(diào)度)endl;coutPlease input the key you want to doendl;cout Ctrl+f(new thread), Ctrl+r(start manager) Ctrl+q(stop manager)endl;/檢查當(dāng)前是否鍵盤輸入,若有則返回一個(gè)非0值,否則返回0 if(!_kbhit() c=_getch(); /_getch返回的是鍵的ascii switch(c)case 0x6: /Ctrl+f(新建進(jìn)程)srand( (unsigned)time(
10、NULL ) );/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開(kāi)始的隨機(jī)種子 newpro();break; case 0x12: /Ctrl+r(開(kāi)始調(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,*tmpr=NULL;int i,j=0;/cout 優(yōu)先級(jí) 標(biāo)識(shí)符 狀態(tài)標(biāo)識(shí) 生命周期endl;cout priority pid status life=0;i-) /找優(yōu)先級(jí)最大的進(jìn)程來(lái)執(zhí)行if(adji.
11、next!=NULL) /當(dāng)對(duì)應(yīng)的就緒隊(duì)列不為空時(shí)rq=adji.next; /從就緒隊(duì)列取出一個(gè)進(jìn)程執(zhí)行。adji.next=rq-next;rq-pc.status=run; Sleep(1500); /通過(guò)延時(shí)一段時(shí)間來(lái)模擬該進(jìn)程執(zhí)行一個(gè)時(shí)間片的過(guò)程./畫(huà)優(yōu)先級(jí)cout *pc.priority*;/畫(huà)一次進(jìn)程的調(diào)度情況/1、畫(huà)正在運(yùn)行進(jìn)程的PCB/設(shè)置下一個(gè)輸出文本的字體顏色:綠色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN); cout*p
12、c.pid*pc.status*pc.life*;/2、畫(huà)優(yōu)先級(jí)與正在運(yùn)行進(jìn)程相同的其他進(jìn)程的PCB(如果有的話)/設(shè)置下面輸出文本的字體顏色:白色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);tmpr=adji.next;while(tmpr!=NULL) /當(dāng)對(duì)應(yīng)的就緒隊(duì)列不為空時(shí)cout*pc.pid*pc.status*pc.lifenext; j+;if( j%3 =0
13、)coutendl ;coutpc.priority) /= 2; /優(yōu)先級(jí)減半(rq-pc.life) -= 1; /生命周期減一/如果該運(yùn)行進(jìn)程的生命周期不為0,則重新把它變?yōu)榫途w狀態(tài),插入就緒隊(duì)列中if(rq-pc.life 0)rq-pc.status=ready;rq-next = adjrq-pc.priority.next;adjrq-pc.priority.next=rq;else /否則將其進(jìn)程號(hào)歸還。pidarrayi=true; break; /一次進(jìn)程調(diào)度循環(huán)結(jié)束。/end of if /end of forcoutone time manager have finis
14、h!endl=0;i-)rq=adji.next;if(rq!=NULL)/畫(huà)優(yōu)先級(jí)cout *i*;j=0;while(rq!=NULL) /當(dāng)對(duì)應(yīng)的就緒隊(duì)列不為空時(shí)cout*pc.pid*pc.status*pc.lifenext;j+;if( j%3 =0)coutendl ;coutendl;/新建一個(gè)進(jìn)程的函數(shù)bool threadmanager:newpro()struct readyque *t = NULL;/srand( (unsigned)time( NULL ) );/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開(kāi)始的隨機(jī)種子 for(int i=1;ipc.pid=i;pida
15、rrayi=false; /宣布該進(jìn)程號(hào)已被使用。 t-pc.status=ready;t-pc.priority = rand()%50;/隨機(jī)產(chǎn)生優(yōu)先級(jí)(隨機(jī)域?yàn)?49)。t-pc.next=NULL;t-pc.life=rand()%5+1; /隨機(jī)產(chǎn)生生命周期(隨機(jī)域?yàn)?5)。t-next=adjt-pc.priority.next;adjt-pc.priority.next=t; /將新建的進(jìn)程的PCB插入就緒隊(duì)列return true; /創(chuàng)建進(jìn)程成功 return false; /找不到空的進(jìn)程號(hào),創(chuàng)建進(jìn)程失敗七、實(shí)驗(yàn)結(jié)果及分析(一)、新建進(jìn)程連續(xù)15次按下Ctrl+F鍵后新建15個(gè)進(jìn)程:(二)、開(kāi)始調(diào)度每按一次Ctrl+R將進(jìn)行一次進(jìn)程調(diào)度:(三)、在一次進(jìn)程調(diào)度完成后按下Ctrl+F將新建一個(gè)進(jìn)程:從上圖的綠色部分可以看出按下Ctrl+F鍵后新建一個(gè)優(yōu)先級(jí)為39
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初一上學(xué)期長(zhǎng)郡數(shù)學(xué)試卷
- 高級(jí)瓦楞紙板及紙箱生產(chǎn)項(xiàng)目環(huán)評(píng)報(bào)告表
- 通信電纜施工方案
- 2024-2025學(xué)年下學(xué)期高一語(yǔ)文第二單元B卷
- 柴油裝卸系統(tǒng)施工方案
- 【專精特新】稀土永磁材料企業(yè)專精特新“小巨人”成長(zhǎng)之路(智研咨詢)
- 信息技術(shù)下的立體幾何教學(xué)初探
- 高中歷史課堂教學(xué)情境創(chuàng)設(shè)的策略研究
- 南京科遠(yuǎn)KD200變頻器使用手冊(cè)
- 中外教育史知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春牡丹江師范學(xué)院
- 六年級(jí)1班語(yǔ)文老師家長(zhǎng)會(huì)課件
- 小學(xué)英語(yǔ)-PEP六下Unit1 Part B Read and write教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 五代十國(guó)的歷史故事
- 中交第三航務(wù)工程局有限公司安全管理制度匯編(2020版)
- 港澳臺(tái)專題教育課件
- 高中英語(yǔ)外研版高中必修2Module3Music-Music教案
- 工業(yè)機(jī)器人技術(shù)專業(yè)建設(shè)規(guī)劃
- 車間主要生產(chǎn)設(shè)備一覽表
- 川74取心筒說(shuō)明書(shū)
- 2023年軍考語(yǔ)文真題及參考答案
- 五年級(jí)下冊(cè)數(shù)學(xué)蘇教版課件 因數(shù)和倍數(shù)的認(rèn)識(shí)
評(píng)論
0/150
提交評(píng)論