




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)二進(jìn)程調(diào)度1.目的和規(guī)定通過(guò)這次實(shí)驗(yàn),理解進(jìn)程調(diào)度的過(guò)程,進(jìn)一步掌握進(jìn)程狀態(tài)的轉(zhuǎn)變、進(jìn)程調(diào)度的方略,進(jìn)一步體會(huì)多道程序并發(fā)執(zhí)行的特點(diǎn),并分析具體的調(diào)度算法的特點(diǎn),掌握對(duì)系統(tǒng)性能的評(píng)價(jià)辦法。2.實(shí)驗(yàn)內(nèi)容閱讀教材《計(jì)算機(jī)操作系統(tǒng)》第二章和第三章,掌握進(jìn)程管理及調(diào)度有關(guān)概念和原理。編寫(xiě)程序模擬實(shí)現(xiàn)進(jìn)程的輪轉(zhuǎn)法調(diào)度過(guò)程,模擬程序只對(duì)PCB進(jìn)行對(duì)應(yīng)的調(diào)度模擬操作,不需要實(shí)際程序。假設(shè)初始狀態(tài)為:有n個(gè)進(jìn)程處在就緒狀態(tài),有m個(gè)進(jìn)程處在阻塞狀態(tài)。采用輪轉(zhuǎn)法進(jìn)程調(diào)度算法進(jìn)行調(diào)度(調(diào)度過(guò)程中,假設(shè)處在執(zhí)行狀態(tài)的進(jìn)程不會(huì)阻塞),且每過(guò)t個(gè)時(shí)間片系統(tǒng)釋放資源,喚醒處在阻塞隊(duì)列隊(duì)首的進(jìn)程。程序規(guī)定以下:1)輸出系統(tǒng)中進(jìn)程的調(diào)度次序;2)計(jì)算CPU運(yùn)用率。3.實(shí)驗(yàn)環(huán)境Windows操作系統(tǒng)、VC++6.0C語(yǔ)言4設(shè)計(jì)思想:(1)程序中進(jìn)程可用PCB表達(dá),其類(lèi)型描述以下:structPCB_type{intpid;//進(jìn)程名intstate;//進(jìn)程狀態(tài)2——表達(dá)“執(zhí)行”狀態(tài)1——表達(dá)“就緒”狀態(tài)0——表達(dá)“阻塞”狀態(tài)intcpu_time;//運(yùn)行需要的CPU時(shí)間(需運(yùn)行的時(shí)間片個(gè)數(shù))}用PCB來(lái)模擬進(jìn)程;(2)設(shè)立兩個(gè)隊(duì)列,將處在“就緒”狀態(tài)的進(jìn)程PCB掛在隊(duì)列ready中;將處在“阻塞”狀態(tài)的進(jìn)程PCB掛在隊(duì)列blocked中。隊(duì)列類(lèi)型描述以下:structQueueNode{structPCB_typePCB;StructQueueNode*next;}并設(shè)全程量:structQueueNode*ready_head=NULL,//ready隊(duì)列隊(duì)首指針*ready_tail=NULL,//ready隊(duì)列隊(duì)尾指針*blocked_head=NULL,//blocked隊(duì)列隊(duì)首指針*blocked_tail=NULL;//blocked隊(duì)列隊(duì)尾指針(3)設(shè)計(jì)子程序:start_state();讀入假設(shè)的數(shù)據(jù),設(shè)立系統(tǒng)初始狀態(tài),即初始化就緒隊(duì)列和阻塞隊(duì)列。dispath();模擬調(diào)度,當(dāng)就緒隊(duì)列的隊(duì)首進(jìn)程運(yùn)行一種時(shí)間片后,放到就緒隊(duì)列末尾,每次都是隊(duì)首進(jìn)程進(jìn)行調(diào)度,一種進(jìn)程運(yùn)行結(jié)束就從就緒隊(duì)列中刪除,當(dāng)?shù)絫個(gè)時(shí)間片后,喚醒阻塞隊(duì)列隊(duì)首進(jìn)程。calculate();就緒進(jìn)程運(yùn)行一次,usecpu加1,當(dāng)就緒隊(duì)列為空時(shí)unusecpu加1,CPU運(yùn)用率為use_cpu/(use_cpu+unuse_cpu)。5源代碼:#include<stdio.h>#include<stdlib.h>structPCB_type{intpid;//進(jìn)程名intstate;//進(jìn)程狀態(tài)//2--表達(dá)"執(zhí)行"狀態(tài)//1--表達(dá)"就緒"狀態(tài)//0--表達(dá)"阻塞"狀態(tài)intcpu_time;//運(yùn)行需要的CPU時(shí)間(需運(yùn)行的時(shí)間片個(gè)數(shù))};structQueueNode{structPCB_typePCB;structQueueNode*next;};structQueueNode*ready_head=NULL,//ready隊(duì)列隊(duì)首指針*ready_tail=NULL,//ready隊(duì)列隊(duì)尾指針*block_head=NULL,//blocked隊(duì)列隊(duì)首指針*block_tail=NULL;//blocked隊(duì)列隊(duì)尾指針intuse_cpu,unuse_cpu;voidstart_state()//讀入假設(shè)的數(shù)據(jù),設(shè)立系統(tǒng)初始狀態(tài){intn,m;inti;structQueueNode*p,*q;printf("輸入就緒節(jié)點(diǎn)個(gè)數(shù)n:");scanf("%d",&n);printf("輸入阻塞節(jié)點(diǎn)個(gè)數(shù)m:");scanf("%d",&m);p=(structQueueNode*)malloc(sizeof(structQueueNode));p->next=NULL;ready_head=ready_tail=p;for(i=0;i<n;i++){p=(structQueueNode*)malloc(sizeof(structQueueNode));p->next=NULL;p->PCB.state=1;printf("輸入就緒進(jìn)程%d的pid和cpu_time:",i+1);scanf("%d%d",&p->PCB.pid,&p->PCB.cpu_time);ready_tail->next=p;ready_tail=p;}q=(structQueueNode*)malloc(sizeof(structQueueNode));q->next=NULL;block_head=block_tail=q;for(i=0;i<m;i++){q=(structQueueNode*)malloc(sizeof(structQueueNode));q->next=NULL;q->PCB.state=0;printf("輸入阻塞進(jìn)程%d的pid和cpu_time:",i+1);scanf("%d%d",&q->PCB.pid,&q->PCB.cpu_time);block_tail->next=q;block_tail=q;}printf("\n處在就緒狀態(tài)的進(jìn)程有:\n");p=ready_head->next;i=1;while(p){printf(“進(jìn)程%d的pid和state和cpu_time:%5d%5d%5d\n",i,p->PCB.pid,p->PCB.state,p->PCB.cpu_time);p=p->next;i++;}}voiddispath()//模擬調(diào)度{intx=0,t;use_cpu=0;unuse_cpu=0;printf("輸入t:");scanf("%d",&t);printf("開(kāi)始調(diào)度\n");while(ready_head!=ready_tail||block_head!=block_tail){structQueueNode*p,*q;if(ready_head!=ready_tail){p=ready_head->next;ready_head->next=p->next;p->next=NULL;if(ready_head->next==NULL){ready_tail=ready_head;}p->PCB.state=2;printf("進(jìn)程%d調(diào)度\t",p->PCB.pid);use_cpu++;x++;p->PCB.cpu_time--;if(p->PCB.cpu_time){ready_tail->next=p;ready_tail=p;}else{printf("進(jìn)程%d完畢\t",p->PCB.pid);free(p);}}else{unuse_cpu++;x++;printf("空閑一種時(shí)間片\t");}if(x==t&&block_head!=block_tail){q=block_head->next;block_head->next=q->next;q->next=NULL;if(block_head->next==NULL){block_tail=block_head;}ready_tail->next=q;ready_tail=q;x=0;}}}voidcalculate()//計(jì)算CPU運(yùn)用率{printf("\ncpu的運(yùn)用率%.2f\n",(float)use_cpu/(use_cpu+unuse_cpu));}voidmain(){start_state();dispath();calculate();}6運(yùn)行成果:7實(shí)驗(yàn)總結(jié):實(shí)驗(yàn)幫我復(fù)習(xí)了數(shù)據(jù)構(gòu)造和C語(yǔ)言,且鞏固課本知識(shí),懂得了如何定義構(gòu)造體,如何在鏈接隊(duì)列中增刪節(jié)點(diǎn)。模擬進(jìn)程調(diào)度幫我們鞏固了進(jìn)程三狀態(tài)之間的變遷。懂得調(diào)式的重要性??傊覀兠靼琢死碚撀?lián)系實(shí)際。多看書(shū),多上機(jī)。實(shí)驗(yàn)三可變分區(qū)存儲(chǔ)管理1.目的和規(guī)定通過(guò)這次實(shí)驗(yàn),加深對(duì)內(nèi)存管理的認(rèn)識(shí),進(jìn)一步掌握內(nèi)存的分派、回收算法的思想。2.實(shí)驗(yàn)內(nèi)容閱讀教材《計(jì)算機(jī)操作系統(tǒng)》第四章,掌握存儲(chǔ)器管理有關(guān)概念和原理。編寫(xiě)程序模擬實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)分區(qū)法存儲(chǔ)管理。內(nèi)存空閑區(qū)使用自由鏈管理,采用最壞適應(yīng)算法從自由鏈中尋找空閑區(qū)進(jìn)行分派,內(nèi)存回收時(shí)假定不做與相鄰空閑區(qū)的合并。假定系統(tǒng)的內(nèi)存共640K,初始狀態(tài)為操作系統(tǒng)本身占用64K。在t1時(shí)間之后,有作業(yè)A、B、C、D分別請(qǐng)求8K、16K、64K、124K的內(nèi)存空間;在t2時(shí)間之后,作業(yè)C完畢;在t3時(shí)間之后,作業(yè)E請(qǐng)求50K的內(nèi)存空間;在t4時(shí)間之后,作業(yè)D完畢。規(guī)定編程序分別輸出t1、t2、t3、t4時(shí)刻內(nèi)存的空閑區(qū)的狀態(tài)。3.實(shí)驗(yàn)環(huán)境Windows操作系統(tǒng)、VC++6.0C語(yǔ)言4.設(shè)計(jì)思想模擬內(nèi)存分派和回收,要設(shè)立兩個(gè)鏈隊(duì)列,一種空閑區(qū)鏈和一種占用區(qū)鏈,空閑區(qū)鏈節(jié)點(diǎn)有起始地址,大小和指向下一節(jié)點(diǎn)的指針等數(shù)據(jù)域,占用區(qū)鏈節(jié)點(diǎn)有起始地址,大小,作業(yè)名和指向下一節(jié)點(diǎn)的指針等數(shù)據(jù)域,本實(shí)驗(yàn)用最壞適應(yīng)算法,每次作業(yè)申請(qǐng)內(nèi)存都是從空閑鏈隊(duì)頭節(jié)點(diǎn)分派,如果相等,就刪除空閑頭結(jié)點(diǎn),如果不大于申請(qǐng)的,就不分派,否則就劃分內(nèi)存給作業(yè),剩余的內(nèi)存大小,重新插入空閑鏈隊(duì),按從大到小,接著把作業(yè)占用的內(nèi)寄存到占用區(qū)鏈節(jié)點(diǎn)的末尾。每次作業(yè)運(yùn)行完,就要回收其占用的內(nèi)存大小,把作業(yè)節(jié)點(diǎn)按從大到小插入到空閑鏈隊(duì)中。5.源代碼:#include<stdio.h>#include<stdlib.h>structfreelinkNode{intlen;intaddress;structfreelinkNode*next;};structbusylinkNode{charname;intlen;intaddress;structbusylinkNode*next;};structfreelinkNode*free_head=NULL;//自由鏈隊(duì)列(帶頭結(jié)點(diǎn))隊(duì)首指針structbusylinkNode*busy_head=NULL;//占用區(qū)隊(duì)列隊(duì)(帶頭結(jié)點(diǎn))首指針structbusylinkNode*busy_tail=NULL;//占用區(qū)隊(duì)列隊(duì)尾指針voidstart(void)/*設(shè)立系統(tǒng)初始狀態(tài)*/{structfreelinkNode*p;structbusylinkNode*q;free_head=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));free_head->next=NULL;//創(chuàng)立自由鏈頭結(jié)點(diǎn)busy_head=busy_tail=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));busy_head->next=NULL;//創(chuàng)立占用鏈頭結(jié)點(diǎn)p=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));p->address=64;p->len=640-64;//OS占用了64Kp->next=NULL;free_head->next=p;q=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));q->name='S';/*S表達(dá)操作系統(tǒng)占用*/q->len=64;q->address=0;q->next=NULL;busy_head->next=q;busy_tail=q;}voidrequireMemo(charname,intrequire)/*模擬內(nèi)存分派*/{freelinkNode*w,*u,*v;busylinkNode*p;if(free_head->next->len>=require){p=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));p->name=name;p->address=free_head->next->address;p->len=require;p->next=NULL;busy_tail->next=p;busy_tail=p;}elseprintf("Can'tallocate");w=free_head->next;free_head->next=w->next;if(w->len==require){free(w);}else{w->address=w->address+require;w->len=w->len-require;}u=free_head;v=free_head->next;while((v!=NULL)&&(v->len>w->len)){u=v;v=v->next;}u->next=w;w->next=v;}voidfreeMemo(charname)/*模擬內(nèi)存回收*/{intlen;intaddress;busylinkNode*q,*p;freelinkNode*w,*u,*v;q=busy_head;p=busy_head->next;while((p!=NULL)&&(p->name!=name)){q=p;p=p->next;}if(p==NULL){printf("%cisnotexist",name);}else{if(p==busy_tail){busy_tail=q;}else{q->next=p->next;len=p->len;address=p->address;free(p);w=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));w->len=len;w->address=address;u=free_head;v=free_head->next;while((v!=NULL)&&(v->len>len)){u=v;v=v->next;}u->next=w;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- cif空運(yùn)合同范本
- 農(nóng)村光纜維護(hù)合同范本
- 2025年拉鏈配件輔料項(xiàng)目可行性研究報(bào)告
- 爸爸去哪兒觀后感 15篇
- 保險(xiǎn)理財(cái)電子合同范本
- 2025年玩具包裝袋項(xiàng)目可行性研究報(bào)告
- 公司貨物供貨合同范本
- 物流行業(yè)中的移動(dòng)支付應(yīng)用及前景分析
- 代銷(xiāo)區(qū)域保護(hù)合同范本
- 會(huì)所轉(zhuǎn)讓合同范本寫(xiě)
- 計(jì)算機(jī)教室(微機(jī)室)學(xué)生上機(jī)使用記錄
- 第1章 會(huì)展經(jīng)濟(jì)概述
- 《植物學(xué)》練習(xí)(二)根、莖、葉營(yíng)養(yǎng)器官的聯(lián)系及變態(tài)
- 中暑-紅十字應(yīng)急救護(hù)培訓(xùn)課件
- 中國(guó)農(nóng)業(yè)銀行筆試真題
- (5.5)-雜草圖片農(nóng)田雜草及防除學(xué)
- 生理學(xué)人體生理功能的調(diào)節(jié)
- 口腔護(hù)理技術(shù)
- 西師版四年級(jí)下冊(cè)100道口算題大全(全冊(cè)齊全)
- TFCC損傷的診斷及治療
- 《西藏度亡經(jīng)》及中陰解脫竅決(收藏)
評(píng)論
0/150
提交評(píng)論