




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗進程調度1 .目的和要求通過這次實驗,理解進程調度的過程,進一步掌握進程狀態(tài)的轉變、進程調度的策略,進一步體會多道程序并發(fā)執(zhí)行的特點,并分析具體的調度算法的特點,掌握對系統(tǒng)性能的評價方法。2 .實驗內(nèi)容閱讀教材計算機操作系統(tǒng)第二章和第三章,掌握進程管理及調度相關概念和原理。編寫程序模擬實現(xiàn)進程的輪轉法調度過程,模擬程序只對PCB進行相應的調度模擬操作,不需要實際程序。假設初始狀態(tài)為:有n個進程處于就緒狀態(tài),有m個進程處于阻塞狀態(tài)。采用輪轉法進程調度算法進行調度(調度過程中,假設處于執(zhí)行狀態(tài)的進程不會阻塞),且每過t個時間片系統(tǒng)釋放資源,喚醒處于阻塞隊列隊首的進程。程序要求如下:1)輸出系統(tǒng)
2、中進程的調度次序;2)計算CPU利用率。3 .實驗環(huán)境Windows操作系統(tǒng)、VC+6.0C語言1)程序中進程可用pcb表示,其類型描述如下:structPCB_typeintstat*/進程狀態(tài)2表示執(zhí)行”狀態(tài)1表示就緒”狀態(tài)0表示阻塞”狀態(tài)intcpu_time;運行需要的CPU時間(需運行的時間片個數(shù))用PCB來模擬進程;(2)設置兩個隊列,將處于“就緒”狀態(tài)的進程PCB掛在隊列ready中;將處于“阻塞”狀態(tài)的進程PCB掛在隊列blocked中。隊列類型描述如下:structQueueNodestructPCB_typePCB:StructQueueNode*next;)并設全程量:s
3、tructQueueNodeeady_head=NULL,/ready隊歹ij隊首指十*ready_tail=NULL,/ready隊列隊尾指針3)設計子程序:start_state();dispath();*b1ocked_head=NULL,/blocked隊列隊首指針*blocked_tail=NULL:/blocked隊歹ij隊尾指針讀入假設的數(shù)據(jù),設置系統(tǒng)初始狀態(tài),即初始化就緒隊列和阻塞隊列。模擬調度,當就緒隊列的隊首進程運行一個時間片后,放到就緒隊列末尾,每次都是隊首進程進行調度,一個進程運行結束就從就緒隊列中刪除,當?shù)絫個時間片后,喚醒阻塞隊列隊首進程。calculate();就
4、緒進程運行一次,useepu加1,當就緒隊列為空時unuseepu加1,CPU利用率為use_cpu/(use_cpu+unuse_cpu)o5源代碼:#inelude<stdio.h>#inelude<stdlib.h>structPCB_typeintpid;/進程名intstate;進程狀態(tài)/2一表示執(zhí)行狀態(tài)/I一表示就緒狀態(tài)/0一表示阻塞狀態(tài)需運行的時間片個數(shù))/ready隊列隊首指針/ready隊列隊尾指針“blocked隊列隊首指針“blocked隊列隊尾指針int運行需要的CPU時間cpu_time;structQueueNodestructpcB_typ
5、ePCB;structQueueNode*next;);structQueueNode*ready_head=NULL,*ready_tai1=NULL,*blocktaiNULL;*blockhead=NULL,intuse_cpu,unuse_cpu;voidstart_state()讀入假設的數(shù)據(jù),設置系統(tǒng)初始狀態(tài)intn,m;inti;structQueueNode*p,*q;printf(,z輸入就緒節(jié)點個數(shù)n:);scanf(d,&n);printf(,z輸入阻塞節(jié)點個數(shù)m:);scanf(d,&m);p=(structQueueNode*)malloc(sizeo
6、f(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=l;printf輸入就緒進程%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
7、*)malloc(sizeof(structQueueNode);q->next=NULL;b1ock_head=b1ock_tai1二q;for(i=0;i<m;i+)q=(structQueueNode*)malloc(sizeof(structQueueNode);q->next=NULL;q->PCB.state=0;printf(,/輸入阻塞進程%d的pid和cpu_time:i+1);scanf(d%d,&q->PCB.pid,&q->PCB.cpu_time);block_tail->next=q;block_tail二q
8、;printf(n處于就緒狀態(tài)的進程有:n);p=ready_head->next;i=l;while(p)printf(“進程%d的pid和%dstatecpu_time:%5d%5d%5dn,z,i,p->PCB.pid,p->PCB.state,p->PCB.cpu_time);p=p->next;i+;voiddispath()模擬調度(intx=0,t;use_cpu=0;unuse_cpu=O;printfC輸入t:);scanf(%d,&t);printfC開始調度n);while(ready_head!=ready_tai1iblock_h
9、ead!=block_tail),structQueueNode*p,*q;if(ready_head!=ready_tail)(p=ready_head->next;ready_head->nextzzp->next;p-next二NULL;if(ready_head->next=NULL)(ready_tail=ready_head;p->PCB.state=2;printf(,/進程%d調度t,p->PCB.pid);use_cpu+;x+;p->PCB.cpu_time一;if(p->PCB.cpu_time)(ready_tail-&g
10、t;next=p;ready_tail=p;elseprintf(/z進程%d完成t,p->PCB.pid);free(p);)else(unuse_cpu+;x+;printfC空閑一個時間片t);'if(x=t&&block_head!=block_tai1)(q=block_head->next;block_head->next=q->next;q->next=NULL;if(block_head->next=NULL)"blocktail=blockhead;ready_tail->next=q;ready_t
11、ail=q;x=0;voidcalculate()計算CPU利用率(printf(,zncpu的利用率%.2fn,)(float)use_cpu/(use_cpu+unuse_cpu);'voidmain()start_state();dispath();calculate();6運行結果:片間度需度度23-45sH進進空進進片聞成編度度成13.455雷成雯雯復二點*1片44JL12點點K拿里*一Z一42338%整更雯雯復復或復BNS.復或夏需復凋凋呈詈Z-如并全進進進二總、一7實驗總結:實驗幫我復習了數(shù)據(jù)結構和C語言,且鞏固課本知識,知道了如何定義結構體,如何在鏈接隊列中增刪節(jié)點。模
12、擬進程調度幫我們鞏固了進程三狀態(tài)之間的變遷??傊?,我懂得調式的重要性。們明白了理論聯(lián)系實際。多看書,多上機。實驗三可變分區(qū)存儲管理1 .目的和要求通過這次實驗,加深對內(nèi)存管理的認識,進一步掌握內(nèi)存的分配、回收算法的思想。2 .實驗內(nèi)容閱讀教材計算機操作系統(tǒng)第四章,掌握存儲器管理相關概念和原理。編寫程序模擬實現(xiàn)內(nèi)存的動態(tài)分區(qū)法存儲管理。內(nèi)存空閑區(qū)使用自由鏈管理,采用最壞適應算法從自由鏈中尋找空閑區(qū)進行分配,內(nèi)存回收時假定不做與相鄰空閑區(qū)的合并。假定系統(tǒng)的內(nèi)存共640K初始狀態(tài)為操作系統(tǒng)本身占用64Ko在tl時間之后,有作業(yè)A、B、C、D分別請求8K、16K、64K、124K的內(nèi)存空間;在t2時間
13、之后,作業(yè)C完成;在t3時間之后,作業(yè)E請求50K的內(nèi)存空間;在t4時間之后,作業(yè)D完成。要求編程序分別輸出tl、t2、t3、t4時刻內(nèi)存的空閑區(qū)的狀態(tài)。3 .實驗環(huán)境Windows操作系統(tǒng)、VC+6.0C語言4 .設計思想模擬內(nèi)存分配和回收,要設置兩個鏈隊列,一個空閑區(qū)鏈和一個占用區(qū)鏈,空閑區(qū)鏈節(jié)點有起始地址,大小和指向下一節(jié)點的指針等數(shù)據(jù)域,占用區(qū)鏈節(jié)點有起始地址,大小,作業(yè)名和指向下一節(jié)點的指針等數(shù)據(jù)域,本實驗用最壞適應算法,每次作業(yè)申請內(nèi)存都是從空閑鏈隊頭節(jié)點分配,如果相等,就刪除空閑頭結點,如果小于申請的,就不分配,否則就劃分內(nèi)存給作業(yè),剩下的內(nèi)存大小,重新插入空閑鏈隊,按從大到小,
14、接著把作業(yè)占用的內(nèi)存放到占用區(qū)鏈節(jié)點的末尾。每次作業(yè)運行完,就要回收其占用的內(nèi)存大小,把作業(yè)節(jié)點按從大到小插入到空閑鏈隊中。5 .源代碼:#include<stdio.h>#include<stdlib.h>structfreelinkNode(intlen;intaddress;structfreelinkNode*next;);structbusylinkNode(charname;intlen;intaddress;/自由鏈隊列(帶頭結點)隊首指針占用區(qū)隊列隊(帶頭結點)首指針占用區(qū)隊列隊尾指針*/structbusylinkNode);structfreelin
15、kNodestructbusylinkNodestructbusylinkNodevoidstart(void)* next;* freehead=NULL;* busy_head=NULL;* busy_tai1=NULL;/*設置系統(tǒng)初始狀態(tài)structfreelinkNode*p;structbusylinkNode*q;free_head=(structfreelinkNode*)malloc(sizeof(structfreelinkNode);free_head->next=NULL;/創(chuàng)建自由鏈頭結點busy_head=busy_tai1=(structbusylinkNo
16、de*)malloc(sizeof(structbusylinkNode);busy_head->next=NULL;/創(chuàng)建占用鏈頭結點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表示操作系統(tǒng)占用*
17、/q->len=64;q->address=O;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(structbusylinkXode);p->name=name;p->address=free_head-
18、>next->address;p->len=require;p->next=NULL;busy_tail->next=p;busy_tail=p;elseprintf(,zCan,tallocate");w=free_head->next;free_head->next=w->next;if(w->1en-require)(free(w);'elsew->address=w->address+require;w->len=w->len-require;u=free_head;v=free_head-
19、>next;while(v!=NULL)&&(v->1en>w->1en)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(v
20、%cisnotexist',name);elseif(p=busy_tail)q->next=p->next;len=p->len;busy_tail=q;address=p->address;elsefree(p);w=(structfreelinkNode*)malloc(sizeof(structfreelinkNode);w->len=len;w->address=address;u=freehead;v=free_head->next;while(v!=NULL)&&(v->len>len)U=v;v=v->next;u->next=w;w->next=v;past(inttime)/*模擬系統(tǒng)過了time時間*/printf(",過了時間%d后:ntime);freelinkNo
溫馨提示
- 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北京東城高二(上)期末生物(教師版)
- 突發(fā)事件處置方案
- 地下室不銹鋼水池施工方案
- 紫葉矮櫻嫁接繁育技術關鍵要點全面深入探討與闡述
- 四川省眉山市洪雅縣洪雅縣2024-2025學年九年級上學期期末考試物理試題(原卷版+解析版)
- 室外弱電整修施工方案
- 綠色金融與可持續(xù)投資的策略
- 工業(yè)碳減排與綠色制造的策略及實施路徑
- 思維可視化視域下高中英語課堂讀后續(xù)寫教學策略研究
- 法律職業(yè)倫理知到智慧樹章節(jié)測試課后答案2024年秋溫州大學
- 英語-遼寧省大連市2024-2025學年高三上學期期末雙基測試卷及答案
- 2025年江蘇省無錫市江南大學專職輔導員招聘45人歷年高頻重點提升(共500題)附帶答案詳解
- 2024版智能物流倉儲管理系統(tǒng)采購與運維服務合同3篇
- 2024安徽教師統(tǒng)一招聘考試《小學英語》試卷真題及答案
- 2024年考研數(shù)學(一)試題卷及答案
- 16-SC-提高附著式升降腳手架安全驗收一次合格率4:3
- 尼康NikonCOOLPIXP500數(shù)碼相機(中文)說明書
- 腦血管介入手術術前術后護理
- 幼兒園班級管理孫玉潔
- 2024解析:第九章大氣壓強-基礎練(解析版)
評論
0/150
提交評論