版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)三進(jìn)程調(diào)度 一、實(shí)驗(yàn)?zāi)康亩嗟莱绦蛟O(shè)計(jì)中,經(jīng)常是若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),必須依照某種策略來決定那個(gè)進(jìn)程 優(yōu)先占有處理機(jī)。因而引起進(jìn)程調(diào)度。本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問題,加 深對(duì)進(jìn)程調(diào)度的理解。實(shí)驗(yàn)要求1.2.3.設(shè)計(jì)進(jìn)程調(diào)度算法,進(jìn)程數(shù)不定包含幾種調(diào)度算法,并加以實(shí)現(xiàn)輸出進(jìn)程的調(diào)度過程一一進(jìn)程的狀態(tài)、鏈表等。參考例1.2.題目一一優(yōu)先權(quán)法、輪轉(zhuǎn)法簡(jiǎn)化假設(shè)1) 進(jìn)程為計(jì)算型的(無I/O)2) 進(jìn)程狀態(tài):ready、running、finish3) 進(jìn)程需要的CPU時(shí)間以時(shí)間片為單位確定算法描述1)2)四、優(yōu)先權(quán)法一一動(dòng)態(tài)優(yōu)先權(quán) 當(dāng)前運(yùn)行進(jìn)程用完時(shí)間片后,輪轉(zhuǎn)法實(shí)驗(yàn)流程圖其優(yōu)先
2、權(quán)減去一個(gè)常數(shù)。開始 鍵盤輸入進(jìn)程數(shù)n,和調(diào)度方法的選擇_輪轉(zhuǎn)法優(yōu)先權(quán)法?丫 J產(chǎn)生n個(gè)進(jìn)程,對(duì)每個(gè)進(jìn)程產(chǎn)生一個(gè) 隨機(jī)數(shù)產(chǎn)生進(jìn)程的優(yōu)先權(quán)及進(jìn)程所需的 按優(yōu)先權(quán)大小,把 n個(gè)進(jìn)程拉成一個(gè)就緒隊(duì)列 初始化其他數(shù)據(jù)結(jié)構(gòu)區(qū) J 鏈?zhǔn)走M(jìn)程投入運(yùn)行行時(shí)間片到,進(jìn)程所需的CPU時(shí)間減1,優(yōu)先權(quán)減3,輸出個(gè)進(jìn)程的運(yùn)行情況N所需的CPU時(shí)間=0?將進(jìn)程插入就緒隊(duì)列丫 I撤銷進(jìn)程PCB,并用CPU時(shí)間就緒隊(duì)列為空?纟結(jié)束Y產(chǎn)生n個(gè)進(jìn)程,對(duì)每個(gè)進(jìn)程用隨機(jī)數(shù)產(chǎn)生進(jìn)程的輪轉(zhuǎn)時(shí)間片數(shù)及進(jìn)程所 需的時(shí)間片數(shù),已占用 CPU的時(shí)間片數(shù)置為0i按進(jìn)程產(chǎn)生的先后次序拉成就緒隊(duì)列鏈I鏈?zhǔn)走M(jìn)程投入運(yùn)行J 時(shí)間片到,進(jìn)程所需時(shí)間片數(shù)減
3、 j1,已占用CPU時(shí)間片數(shù)加1輸出各進(jìn)程的運(yùn)行情況的Y進(jìn)程所需時(shí)間片數(shù)=0 ?丄*撤銷該進(jìn)程I N占用CPU的時(shí)間片數(shù)=輪轉(zhuǎn)時(shí)間片數(shù)?I Y占用CPU的時(shí)間片數(shù)置為 0*就緒隊(duì)列為空嗎?列 Y結(jié)束把該進(jìn)程插入就緒隊(duì)列尾注意:1.產(chǎn)生的各種隨機(jī)數(shù)的取值范圍加以限制,如所需的CPU時(shí)間限制在120之間。.6.(1)輸入:進(jìn)程流文件(1.txt ),其中存儲(chǔ)的是一系列要執(zhí)行的進(jìn)程, 數(shù)據(jù)項(xiàng): 進(jìn)程名 進(jìn)程 進(jìn)程 進(jìn)程 進(jìn)程 進(jìn)程 進(jìn)程每個(gè)作業(yè)包括四個(gè)012345進(jìn)程狀態(tài)(1就緒2等待3運(yùn)行)所需時(shí)間 優(yōu)先數(shù)(0級(jí)最高)12132350101528198240517進(jìn)程數(shù)n不要太大通常
4、取4-8個(gè)使用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)獨(dú)立編程至少三種調(diào)度算法若有可能請(qǐng)?jiān)趫D形方式下,將 PCB的調(diào)度用圖形成動(dòng)畫顯示。五.實(shí)驗(yàn)過程:輸出:進(jìn)程執(zhí)行流等待時(shí)間,平均等待時(shí)間 本程序包括:FIFO算法,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法( 2)程序代碼#include#include#includeconst int block_time=10; / 定義時(shí)間片的長(zhǎng)度為 10 秒 const int MAXPCB=100; / 定義最大進(jìn)程數(shù)/ 定義進(jìn)程結(jié)構(gòu)體typedef struct nodechar name20;int status;int time;int privilege;int finish
5、ed;int wait_time; pcb;pcb pcbsMAXPCB;int quantity;/ 初始化函數(shù)void initial()int i;for(i=0;iMAXPCB;i+)strcpy(,); pcbsi.status=0; pcbsi.time=0; pcbsi.privilege=0; pcbsi.finished=0; pcbsi.wait_time=0;quantity=0;讀數(shù)據(jù)函數(shù) / int readData() FILE *fp; char fname20;int i; coutfname;if(fp=fopen(fname,r)=NUL
6、L)coutvv錯(cuò)誤,文件打不開,請(qǐng)檢查文件名endl;elsewhile(!feof(fp)fscanf(fp,%s %d %d %d,,&pcbsquantity.status,&pcbsquantity.time,&pcbsquantity.privilege);quantity+; / 輸出所讀入的數(shù)據(jù)cout 輸出所讀入的數(shù)據(jù) endl; cout 進(jìn)程名 進(jìn)程狀態(tài) 所需時(shí)間 優(yōu)先數(shù) endl; for(i=0;iquantity;i+)pcbsi.timecout pcbsi.status pcbsi.privilegeend
7、l;return(1);return(0);/ 重置數(shù)據(jù),以供另一個(gè)算法使用void init()int i; for(i=0;iMAXPCB;i+)/pcbsi.finished=0; pcbsi.wait_time=0; 先進(jìn)先出算法 void FIFO() int i,j; int total;/ 輸出 FIFO 算法執(zhí)行流 coutendl*endl;coutFIFO 算法執(zhí)行流 :endl; cout 進(jìn)程名 等待時(shí)間 endl;for(i=0;iquantity;i+)cout pcbsi.wait_timeendl;for(j=i+1;jquantity;j
8、+) pcbsj.wait_time+=pcbsi.time; total=0;for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout 總等待時(shí)間 :total 平均等待時(shí)間 :total/quantityendl;/ 優(yōu)先數(shù)調(diào)度算法void privilege()int i,j,p;int passed_time=0;int total;int queueMAXPCB;int current_privilege=1000;for(i=0;iquantity;i+) current_privilege=1000; for(j=0;jquantity
9、;j+) if(pcbsj.finished=0)&(pcbsj.privilegecurrent_privilege) p=j;current_privilege=pcbsj.privilege;queuei=p;pcbsp.finished=1;pcbsp.wait_time+=passed_time; passed_time+=pcbsp.time;/ 輸出優(yōu)先數(shù)調(diào)度執(zhí)行流 coutendl*endl;cout 優(yōu)先數(shù)調(diào)度執(zhí)行流 :endl;cout 進(jìn)程名 等待時(shí)間 endl;for(i=0;iquantity;i+)cout pcbsqueuei.wa
10、it_timeendl;total=0;for(i=0;iquantity;i+) total+=pcbsi.wait_time; cout 總等待時(shí)間 :total 平均等待時(shí)間 :total/quantityendl;/ 時(shí)間片輪轉(zhuǎn)調(diào)度算法void timer()int i,j,number,flag=1;int passed_time=0;int max_time=0;int round=0;int queue1000;int total=0;while(flag=1)flag=0;number=0;for(i=0;i1)for(i=0;iquantity;i+) if(pcbsi.fi
11、nished=0) flag=1; queuetotal=i; total+;if(pcbsi.time=block_time*(round+1) pcbsi.finished=1; round+;if(queuetotal-1=queuetotal-2) total-; coutendl*endl;cout 時(shí)間片輪轉(zhuǎn)調(diào)度執(zhí)行流 :endl;for(i=0;itotal;i+) ; coutendl;/ 顯示void version()cout/*進(jìn)程調(diào)度 */Hcoutendlendl; / 主函數(shù) void main()int flag;versio
12、n();initial(); flag=readData(); if(flag=1)FIFO();init(); privilege(); init();timer();運(yùn)行結(jié)果:(3)輸入進(jìn)程流文件名 1.txt 即可得出以下輸出結(jié)果:/* M MMKM K Ht對(duì)埠0 講4 Sa 進(jìn)型5 :Q Q Q色擺肴.進(jìn)穆態(tài)所需吋問優(yōu)克數(shù)121323123459 2IS有 lb u2 It s19 1 e 7片0 1 2 3 4 5 sss 絡(luò)進(jìn)進(jìn)進(jìn)事rwFIFO迅峯R講灣1 講舞2 聽 進(jìn)程5HR總;爭(zhēng)待時(shí)問=5祁 平均曙持盯問許7R 50 calUJ1220 2 3 4 0 3 0 S U S!
13、any ke y to 匚antiniie迸輕等刖 程215!e4348494122I總等待時(shí)間= 364平均等特時(shí)間噸實(shí)驗(yàn)二銀行家算法一、實(shí)驗(yàn)?zāi)康乃梨i會(huì)引起計(jì)算機(jī)工作僵死,因此操作系統(tǒng)中必須防止。本實(shí)驗(yàn)的目的在于讓學(xué)生獨(dú)立 的使用高級(jí)語言編寫和調(diào)試一個(gè)系統(tǒng)動(dòng)態(tài)分配資源的簡(jiǎn)單模擬程序,了解死鎖產(chǎn)生的條件和 原因,并采用銀行家算法有效地防止死鎖的發(fā)生,以加深對(duì)課堂上所講授的知識(shí)的理解。二、實(shí)驗(yàn)要求設(shè)計(jì)有n個(gè)進(jìn)程共享m個(gè)系統(tǒng)資源的系統(tǒng),進(jìn)程可動(dòng)態(tài)的申請(qǐng)和釋放資源,系統(tǒng)按各進(jìn) 程的申請(qǐng)動(dòng)態(tài)的分配資源。系統(tǒng)能顯示各個(gè)進(jìn)程申請(qǐng)和釋放資源,以及系統(tǒng)動(dòng)態(tài)分配資源的過程,便于用戶觀察和 分析;三、數(shù)據(jù)結(jié)構(gòu)1.
14、 可利用資源向量Available ,它是一個(gè)含有m個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一 類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該 類資源的分配和回收而動(dòng)態(tài)地改變。如果 Available (j) =k,標(biāo)是系統(tǒng)中現(xiàn)有Rj類資源 k個(gè)。2. 最大需求矩陣Max這是一個(gè)nxm的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì) m類資源的最大需求。如果 Max(i,j ) =k,表示進(jìn)程i需要Rj類資源的最大數(shù)目為k。3. 分配矩陣Allocation ,這是一個(gè)nXm的矩陣,它定義了系統(tǒng)中的每類資源當(dāng)前一分配到 每一個(gè)進(jìn)程的資源數(shù)。如果 Allocation (
15、i,j)=k,表示進(jìn)程i當(dāng)前已經(jīng)分到Rj類資源 的數(shù)目為 k。 Allocation i 表示進(jìn)程 i 的分配向量,有矩陣 Allocation 的第 i 行構(gòu)成。4. 需求矩陣Need,這是一個(gè)nXm的矩陣,用以表示每個(gè)進(jìn)程還需要的各類資源的數(shù)目。如 果Need (i,j ) =k,表示進(jìn)程i還需要Rj類資源k個(gè),才能完成其任務(wù)。Need i表示進(jìn) 程i的需求向量,由矩陣Need的第i行構(gòu)成。上述三個(gè)矩陣間存在關(guān)系: Need(i , j ) =Max(i , j ) -Allocation ( i , j );四、 銀行家算法Request i是進(jìn)程Pi的請(qǐng)求向量。Request i (j
16、 ) =k表示進(jìn)程Pi請(qǐng)求分配Rj類資源k個(gè)。 當(dāng) Pi 發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查:1.23如果Request i Need,則轉(zhuǎn)向步驟2;否則,認(rèn)為出錯(cuò),因?yàn)樗?qǐng)求的資源數(shù)已超過 它當(dāng)前的最大需求量。如果Request i Available,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無足夠的資源滿足Pi的申請(qǐng), Pi 必須等待。系統(tǒng)試探性地把資源分配給進(jìn)程 Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available = Available - Request iAllocation i= Allocation i+ Request iNeed i= Need i - Request i4系
17、統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式 將資源分配給進(jìn)程 Pi ,以完成本次分配;否則,將試探分配作廢,恢復(fù)原來的資源分配狀 態(tài),讓進(jìn)程 Pi 等待。假定系統(tǒng)有5個(gè)進(jìn)程(P0,p1,p2,p3,p4 )和三類資源(A, B, C),各種資源的數(shù)量分別為10, 5,7,在T0時(shí)刻的資源分配情況如下圖:MaxAllocationNeedAvailableA B CA B CA B CAB CP07 5 30 1 07 4 333 2( 2 30 )P13 2 22 0 01 2 2(3 0 2 )(0 2 0 )P29 0 23 0 26 0 0P3 2P4 4
18、五、1安全性算法 設(shè)置兩個(gè)向量。Work:它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)目,它包含m個(gè)元素,開始執(zhí)行安全性算法時(shí), Work = Available 。2Finish :它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程, 使之運(yùn)行完成,開始 Finish(I )=false ; 當(dāng)有足夠資源分配給進(jìn)程 Pi 時(shí),令 Finish (i )=true ; 從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程。Finish ( i ) = = false ;Need i work ;如找到則執(zhí)行步驟 3;否則,執(zhí)行步驟 4;3當(dāng)進(jìn)程 Pi 獲得資源后, 可順利執(zhí)行直到完成,并釋放出分配給它的資源, 故應(yīng)執(zhí)行W
19、ork = work + Allocation iFinish (i ) =true ;轉(zhuǎn)向步驟 2;若所有進(jìn)程的 Finish ( i )都為 true ,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安 全狀態(tài)。4六、系統(tǒng)流程圖七銀行家算法程序代碼 #include #include #include using namespace std; typedef struct Max1 / int m_a;int m_b;int m_c;Max;typedef struct Allocation1 int a_a;int a_b;int a_c;Allocation;typedef struct N
20、eed1 / int n_a;int n_b;int n_c;Need;struct Available1 / int av_a;int av_b;int av_c; q; struct prchar name;Max max;Allocation allocation;Need need; int finishflag;p5; char na5; /* void init() / /資源的最大需求量已分配的資源數(shù)還需要的資源數(shù)可利用的資源量定義一個(gè)結(jié)構(gòu)讀入文件 1.txtcout 各進(jìn)程還需要的資源數(shù) NEED:endl;FILE *fp; fp=fopen(1.txt,r+); / for
21、(int i=0;i5;i+) fscanf(fp,%c,%d,%d,%d,%d,%d,%dn,&,&pi.max.m_a,&pi.max.m_b,打開文件 1.txt&pi.max.m_c,&pi.allocation.a_a,&pi.allocation.a_b,&pi.allocation.a_c );pi.need.n_a=pi.max.m_a-pi.allocation.a_a; pi.need.n_b=pi.max.m_b-pi.allocation.a_b; pi.need.n_c=pi.max.m_c-pi.allocation.a_c;:
22、pi.need.n_cendl; fclose(fp); / 關(guān)閉文件/* int fenpei()/ 分配資源 coutAvailable:; coutq.av_a q.av_b q.av_cendl; int finishcnt=0,k=0,count=0;for(int j=0;j5;j+)pj.finishflag=0;pi.need.n_api.need.n_bwhile(finishcnt5)for(int i=0;i=pi.need.n_a&q.av_b=pi.need.n_b&q.av_c =pi.need.n_c)q.av_a+=pi.allocation.a_a; q.av
23、_b+=pi.allocation.a_b; q.av_c+=pi.allocation.a_c; pi.finishflag=1; finishcnt+; nak+=;break;count+;/ 禁止循環(huán)過多 if(count5)return 0; return 1;申請(qǐng)資源 /* int shq() /int m=0,i=0,j=0,k=0;/m為進(jìn)程號(hào); i,j,k 為申請(qǐng)的三類資源數(shù)cout 請(qǐng)輸入進(jìn)程號(hào)和請(qǐng)求資源的數(shù)目 !endl;cout 如:進(jìn)程號(hào) 資源 A B Cendl;cout 0 2 0 2mijk;if(i=pm.need.n_a&j=pm.need.n
24、_b &k=pm.need.n_c)if(i=q.av_a&j=q.av_b&k=q.av_c)pm.allocation.a_a+=i;pm.allocation.a_b+=j;pm.allocation.a_c+=k;pm.need.n_a=pm.max.m_a-pm.allocation.a_a; pm.need.n_b=pm.max.m_b-pm.allocation.a_b; pm.need.n_c=pm.max.m_c-pm.allocation.a_c; cout 各進(jìn)程還需要的資源數(shù) NEED:n;for(int w=0;w5;w+): pw.need.n
25、_a pw.need.n_b pw.need.n_cAvailable讓進(jìn)程m等待 Need,讓進(jìn)程m等待endl;return 0;/*void main()int flag;char c;cout/*銀 行 家 算 法 */ endl;cout 確認(rèn)已經(jīng)在 1.txt 文檔中正確輸入各進(jìn)程的有關(guān)信息后按回車鍵 endl;getch();init();q.av_a=10; / 各種資源的數(shù)量q.av_b=5;q.av_c=7;while(flag)for(int i=0;i5;i+)q.av_a-= pi.allocation.a_a;q.av_b-= pi.allocation.a_b;q
26、.av_c-= pi.allocation.a_c;if(fenpei()cout 這樣配置資源是安全的 !endl;cout 其安全序列是: ;for(int k=0;k5;k+)coutnak; coutendl;cout 有進(jìn)程發(fā)出 Request 請(qǐng)求向量嗎 ?(Enter y or Y)endl;coutendl; c=getch(); if(c=y|c=Y) if(shq()continue; else break;else flag=0;elseflag=0;cout 不安全 !13024有S程岌岀Request請(qǐng)求向量嗎?請(qǐng)輸入進(jìn)程號(hào)和fi求資源的數(shù)目? 如:逬fe導(dǎo)貨源A B
27、 C0 2 0 2110 2各迸程還藉要的資源數(shù)NEED:70604S:1:2:4201330011fluailable :2 3 9這樣配重営源是安全的?序歹y是:13024岌出Request請(qǐng)求向量嗎Enter y oi* VR袖入迓fe弋卻餉求資源的數(shù)目? 力山逬裡尋資源R B C0 2 0 24 3 3 0各進(jìn)程還夷的資源數(shù)need :e:1:2:3:4:7060142 e1e3&011Available:l 9 0不安全Ppesskey to continue.請(qǐng)諭入謹(jǐn)程號(hào)和譴求資源的數(shù)目? 力口進(jìn)翟萼賀源 B C0 2 0 20 0 2 0各進(jìn)程還要的資源數(shù)NEED:0:1:2:3
28、:4:706042201330011Auailable:2 1 0 下安全Pmss any key to continue.實(shí)驗(yàn)三 存儲(chǔ)管理一. 實(shí)驗(yàn)?zāi)康拇鎯?chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理 技術(shù)。本實(shí)驗(yàn)的目的是通過請(qǐng)求頁(yè)式管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn), 掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。二. 實(shí)驗(yàn)內(nèi)容(1)通過計(jì)算不同算法的命中率比較算法的優(yōu)劣。同時(shí)也考慮了用戶內(nèi)存容量對(duì)命中率的影響。頁(yè)面失效次數(shù)為每次訪問相應(yīng)指令時(shí),該指令所對(duì)應(yīng)的頁(yè)不在內(nèi)存中的次數(shù)。 命中率1頁(yè)面失效次數(shù)頁(yè)地址流長(zhǎng)度在本實(shí)驗(yàn)中,假定頁(yè)面大小為1k,用戶虛存容量
29、為32k,用戶內(nèi)存容量為4頁(yè)到 32頁(yè)。Produce_addstream通過隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共320條指令。指令的地址按下述原則生成:1)50%勺指令是順序執(zhí)行的2)25%勺指令是均勻分布在前地址部分3)25%勺指令是均勻分布在后地址部分 具體的實(shí)施方法是:在0 , 319的指令地址之間隨機(jī)選取一起點(diǎn) m 順序執(zhí)行一條指令,即執(zhí)行地址為 m+1的指令;在前地址0 , m+1中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為m ;順序執(zhí)行一條指令,地址為m +1的指令在后地址m; +2, 319中隨機(jī)選取一條指令并執(zhí)行; 重復(fù)上述步驟1) 5),直到執(zhí)行320次指令1)2)3)4)5)6)將指令
30、序列變換稱為頁(yè)地址流在用戶虛存中,按每k存放10條指令排列虛存地址,即320條指令在虛存中的 存放方式為:第0條第9條指令為第0頁(yè)(對(duì)應(yīng)虛存地址為0,9);第10條第19條指令為第1頁(yè)(對(duì)應(yīng)虛存地址為10,19);第310條第 319條指令為第31頁(yè)(對(duì)應(yīng)虛存地址為310,319); 按以上方式,用戶指令可組成 32頁(yè)。計(jì)算并輸出下屬算法在不同內(nèi)存容量下的命中率。1)先進(jìn)先出的算法(FIFO);2)最近最少使用算法(LRU ;3)最佳淘汰算法(OPT;(3)4)最少訪問頁(yè)面算法(LFR; 其中3)和4)為選擇內(nèi)容系統(tǒng)框圖四.頁(yè)面置換算法程序代碼:#i ncludevstdio.h #in cl
31、ude#includeconst int MAXSIZE=1000;/ 定義最大頁(yè)面數(shù) const int MAXQUEUE=3;/ 定義頁(yè)框數(shù) typedef struct node int loaded; int hit;page;page pagesMAXQUEUE;int queueMAXSIZE;int quantity;void initial()int i;for(i=0;iMAXQUEUE;i+)pagesi.loaded=-1; pagesi.hit=0; for(i=0;iMAXSIZE;i+) queuei=-1;quantity=0;void init()int i;f
32、or(i=0;iMAXQUEUE;i+) pagesi.loaded=-1;pagesi.hit=0;void readData()FILE *fp;char fname20;int i;coutfname;if(fp=fopen(fname,r)=NULL)cout 錯(cuò)誤,文件打不開 , 請(qǐng)檢查文件名 ; else/定義頁(yè)框表/初始化結(jié)構(gòu)函數(shù)/初始化頁(yè)框函數(shù)讀入頁(yè)面流while(!feof(fp)fscanf(fp,%d ,&queuequantity); quantity+;cout 讀入的頁(yè)面流 :;for(i=0;iquantity;i+)coutqueuei ;void FIFO()
33、int i,j,p,flag;int absence=0;p=0;coutendlendl;cout 先進(jìn)先出調(diào)度算法 (FIFO) 頁(yè)面調(diào)出流 :; for(i=0;iquantity;i+) flag=0;for(j=0;j=MAXQUEUE) coutpagesp.loaded ; pagesp.loaded=queuei; p=(p+1)%MAXQUEUE; absence+;absence-=MAXQUEUE;coutendl 總?cè)表?yè)數(shù) :absenceendl; 法(LRUvoid LRU()int absence=0;int i,j;int flag;for(i=0;iMAXQU
34、EUE;i+)/最近最少使用調(diào)度算 pagesi.loaded=queuei; coutendlendl;coutvv最近最少使用調(diào)度算法(LRU)頁(yè)面流:;for(i=MAXQUEUE;iquantity;i+) flag=-1;for(j=0;jMAXQUEUE;j+)if(queuei=pagesj.loaded) flag=j; /CAUTION pages0 是隊(duì)列頭 if(flag=-1)/ 缺頁(yè)處理coutpages0.loaded ;for(j=0;jMAXQUEUE-1;j+)pagesj=pagesj+1;pagesMAXQUEUE-1.loaded=queuei;abse
35、nce+; else/ 頁(yè)面已載入pagesquantity=pagesflag;for(j=flag;jMAXQUEUE-1;j+)pagesj=pagesj+1;pagesMAXQUEUE-1=pagesquantity; coutendl 總?cè)表?yè)數(shù) :absenceendl; / void version() cout */endl; coutendl; void main() version(); initial(); readData();/*顯示擬存儲(chǔ)管理器的頁(yè)面調(diào)度FIFOO; in it();LRU(); in it(); in it();四.運(yùn)行結(jié)果運(yùn)行程序前先新建一個(gè)頁(yè)面流
36、文件文件(格式為*.txt ),在文件中存儲(chǔ)的是一系列頁(yè)面號(hào)(頁(yè)面號(hào)用整數(shù)表示,用空格作為分隔符),用來模擬待換入的頁(yè)面。例如:14 5 18 5620 25 6 3 8 17克冥整旌a存gg理affl頁(yè)面謂度pEbu航叫竺yZmmmmmwmwxmmwmwmw古去*.魄存儲(chǔ)育譯器的血面?zhèn)涔~請(qǐng)驗(yàn)入E面淀文件名=l-txt諛入的瓦面疣注4 5 18 56 29 25 6 3 8 17先進(jìn)a出調(diào)度算法FIFO貝面調(diào)出涼:14 5 18 56 20 25 6 總?cè)表?yè)數(shù)刃最址ft少使用調(diào)度算法頁(yè)面流=14 E 18 56 20 25 6 總?cè)必晹?shù)汐Press Any hey to continue實(shí)驗(yàn)四
37、磁盤調(diào)度實(shí)驗(yàn)?zāi)康模捍疟P是高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲(chǔ)設(shè)備。它作為計(jì)算機(jī)系統(tǒng)的輔助存儲(chǔ) 器,擔(dān)負(fù)著繁重的輸入輸出工作,在現(xiàn)代計(jì)算機(jī)系統(tǒng)中往往同時(shí)會(huì)有若干個(gè)要求訪問磁 盤的輸入輸出要求。系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行訪問磁盤的請(qǐng)求。由 于磁盤訪問時(shí)間主要受尋道時(shí)間 T的影響,為此需要采用合適的尋道算法,以降低尋道 時(shí)間。本實(shí)驗(yàn)要求學(xué)生模擬設(shè)計(jì)一個(gè)磁盤調(diào)度程序,觀察調(diào)度程序的動(dòng)態(tài)運(yùn)行過程。通 過實(shí)驗(yàn)讓學(xué)生理解和掌握磁盤調(diào)度的職能。實(shí)驗(yàn)題目:模擬電梯調(diào)度算法,對(duì)磁盤進(jìn)行移臂操作提示及要求:1、2、假設(shè)磁盤只有一個(gè)盤面,并且磁盤是可移動(dòng)頭磁盤。磁盤是可供多個(gè)進(jìn)程共享的存儲(chǔ)設(shè)備,但一個(gè)
38、磁盤每個(gè)時(shí)刻只能為一個(gè)進(jìn)程服務(wù)。當(dāng) 有進(jìn)程在訪問某個(gè)磁盤時(shí),其它想訪問該磁盤的進(jìn)程必須等待,直到磁盤一次工作結(jié) 束。當(dāng)有多個(gè)進(jìn)程提出輸入輸出請(qǐng)求而處于等待狀態(tài)時(shí),可用電梯調(diào)度算法從若干個(gè)等待訪問者中選擇一個(gè)進(jìn)程,讓它訪問磁盤。為此設(shè)置“驅(qū)動(dòng)調(diào)度”進(jìn)程。3、由于磁盤與處理器是并行工作的,所以當(dāng)磁盤在為一個(gè)進(jìn)程服務(wù)時(shí),占有處理器的其 它進(jìn)程可以提出使用磁盤(這里我們只要求訪問磁道),即動(dòng)態(tài)申請(qǐng)?jiān)L問磁道,為此設(shè)置“接受請(qǐng)求”進(jìn)程。4、為了模擬以上兩個(gè)進(jìn)程的執(zhí)行,可以考慮使用隨機(jī)數(shù)來確定二者的允許順序,程序結(jié) 構(gòu)圖參考附圖:5、“接受請(qǐng)求”進(jìn)程建立一張“進(jìn)程請(qǐng)求 I/O ”表,指出等待訪問磁盤的進(jìn)程要
39、求訪問 的磁道,表的格式如下:進(jìn)程名要求訪問的磁道 號(hào)6、“磁盤調(diào)度”的功能是查“請(qǐng)求I/O ”表,當(dāng)有等待訪問的進(jìn)程時(shí),按電梯調(diào)度算法 (SCAN算法)從中選擇一個(gè)等待訪問的進(jìn)程,按其指定的要求訪問磁道。SCAN算法參考課本第九章。算法模擬框圖略。7、圖1中的“初始化”工作包括:初始化“請(qǐng)求 I/O ”表,設(shè)置置當(dāng)前移臂方向;當(dāng)前 磁道號(hào)。并且假設(shè)程序運(yùn)行前“請(qǐng)求I/O ”表中已有若干進(jìn)程(48個(gè))申請(qǐng)?jiān)L問相 應(yīng)磁道。四、實(shí)驗(yàn)報(bào)告:1、實(shí)驗(yàn)題目。2、程序中用到的數(shù)據(jù)結(jié)構(gòu)及其說明。3、打印源程序并附注釋。4、實(shí)驗(yàn)結(jié)果內(nèi)容如下:打印“請(qǐng)求I/O ”表,當(dāng)前磁道號(hào),移臂方向,被選中的進(jìn)程名 和其要
40、求訪問的磁道,看是否體現(xiàn)了電梯調(diào)度(SCAN算法。5、體會(huì)與問題。五、附圖:六.磁盤調(diào)度的程序代碼:#in clude#in clude using n ames pace std;typ edef struct nodeint data;struct node *n ext;Node;void mai n()void fcfs(Node *,i nt,i nt);/ void sstf(Node *,i nt,i nt);/ void sca n(N ode *,i nt,i nt);/ void prin t(Node *);/Node *head,* p,*q;/int it,c=0,f
41、,s;/c聲明先來先服務(wù)函數(shù)FCFS聲明最短尋道時(shí)間優(yōu)先函數(shù)SSTF聲明掃描函數(shù)SCAN輸出鏈表函數(shù)建立一個(gè)鏈表為鏈表長(zhǎng)度,f是開始的磁道號(hào),s是選擇哪個(gè)算法head=(Node *)malloc(sizeof(Node); head- next=NULL;q=head;cout/*磁盤調(diào)度算法 */it; while(it!=0) p=(Node *)malloc(sizeof(Node); p-next=NULL; p-data=it; q-next=p;q=p; cinit; c+;coutf; /f print(head);cout 鏈表長(zhǎng)度為 :cendl; cout1 、先來先服務(wù)算法 FCFSendl;cout2 、最短尋道時(shí)間優(yōu)先算法 SSTFendl;cout3 、電梯調(diào)度算法 ( 掃描算法 SCAN)endl;cout0 、退出 endl; couts; while(s!=0) switch(s) case 1:cout 你選擇了 : 先來先服務(wù)算法 FCFSendl; fcfs( head,c,f); b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生物樣本庫(kù)建設(shè)與運(yùn)營(yíng)合同
- 小班語言教案
- 半導(dǎo)體照明光源項(xiàng)目可行性研究報(bào)告申請(qǐng)報(bào)告
- 美術(shù)組教學(xué)工作計(jì)劃
- 寫給媽媽的感謝信模板集合5篇
- 護(hù)理學(xué)生自我鑒定大專(9篇)
- 關(guān)于堅(jiān)持高二記敘文作文
- 小學(xué)三年級(jí)安全教育工作計(jì)劃
- 網(wǎng)絡(luò)實(shí)習(xí)報(bào)告范文合集六篇
- 云南省昭通市昭陽(yáng)區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期1月期末考試歷史試卷(無答案)
- 2023-2024學(xué)年廣東省深圳市光明區(qū)高二(上)期末地理試卷
- 【8地RJ期末】安徽省蕪湖市弋江區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末考試地理試卷(含解析)
- 期末(試題)-2024-2025學(xué)年人教PEP版英語六年級(jí)上冊(cè)
- 2024年公安基礎(chǔ)知識(shí)考試題庫(kù)及答案
- 三創(chuàng)賽獲獎(jiǎng)-非遺文化創(chuàng)新創(chuàng)業(yè)計(jì)劃書
- 教你成為歌唱達(dá)人智慧樹知到期末考試答案2024年
- 2024分娩鎮(zhèn)痛ppt課件完整版
- 酒店水單模板
- SCI論文寫作課件
- 典型6B燃機(jī)技術(shù)協(xié)議書A_Rev_0527
- 曲式分析演唱技巧情感運(yùn)用
評(píng)論
0/150
提交評(píng)論