


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)三 驅(qū)動(dòng)調(diào)度一、實(shí)驗(yàn)容模擬電梯調(diào)度算法,實(shí)現(xiàn)對(duì)磁盤的驅(qū)動(dòng)調(diào)度、實(shí)驗(yàn)?zāi)康拇疟P是一種高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲(chǔ)設(shè)備。它作為計(jì)算機(jī)系 統(tǒng)的輔助存儲(chǔ)器,擔(dān)負(fù)著繁重的輸入輸出任務(wù)、在多道程序設(shè)計(jì)系統(tǒng)中,往往同時(shí) 會(huì)有若干個(gè)要求訪問(wèn)磁盤的輸入輸出請(qǐng)求等待處理。系統(tǒng)可采用一種策略,盡可能 按最佳次序執(zhí)行要求訪問(wèn)磁盤的諸輸入輸出請(qǐng)求。這就叫驅(qū)動(dòng)調(diào)度,使用的算法稱 為驅(qū)動(dòng)調(diào)度算法。驅(qū)動(dòng)調(diào)度能降低為若干個(gè)輸入輸出請(qǐng)求服務(wù)所需的總時(shí)間,從而 提高系統(tǒng)效率。本實(shí)驗(yàn)要求學(xué)生模擬設(shè)計(jì)一個(gè)驅(qū)動(dòng)調(diào)度程序,觀察驅(qū)動(dòng)調(diào)度程序的 動(dòng)態(tài)運(yùn)行過(guò)程。通過(guò)實(shí)驗(yàn)使學(xué)生理解和掌握驅(qū)動(dòng)調(diào)度的職能。三、數(shù)據(jù)結(jié)構(gòu)#define M
2、20 typedef struct PCBchar procM;/ 進(jìn)程名 int cylinder_num;/ 柱面號(hào) int track_ num;/磁道號(hào)int phy_num;物理記錄號(hào) struct PCB *next;PCB;四、實(shí)驗(yàn)題目模擬電梯調(diào)度算法,對(duì)磁盤進(jìn)行移臂和旋轉(zhuǎn)調(diào)度。(1)磁盤是可供多個(gè)進(jìn)程共享的存儲(chǔ)設(shè)備, 但一個(gè)磁盤每時(shí)刻只能為一個(gè)進(jìn)程 服務(wù)。當(dāng)有進(jìn)程在訪問(wèn)某個(gè)磁盤時(shí),其他想訪問(wèn)該磁盤的進(jìn)程必須等待,直到磁盤 一次工作結(jié)束。當(dāng)有多個(gè)進(jìn)程提出輸入輸出要求而處于等待狀態(tài)時(shí),可用電梯調(diào)度 算法從若干個(gè)等待訪問(wèn)者中選擇一個(gè)進(jìn)程, 讓它訪問(wèn)磁盤。選擇訪問(wèn)者的工作由 “驅(qū) 動(dòng)調(diào)
3、度”進(jìn)程來(lái)完成。由于磁盤與處理器是可以并行工作的、 所以當(dāng)磁盤在作為一個(gè)進(jìn)程服務(wù)時(shí), 占 有處理器的另一進(jìn)程可以提出使用磁盤的要求,也就是說(shuō),系統(tǒng)能動(dòng)態(tài)地接收新的輸入輸出請(qǐng)求。為了模擬這種情況,在本實(shí)驗(yàn)中設(shè)置了一個(gè)“接收請(qǐng)求”進(jìn)程。“驅(qū)動(dòng)調(diào)度”進(jìn)程和“接收請(qǐng)求”進(jìn)程能否占有處理器運(yùn)行,取決于磁盤的結(jié) 束中斷信號(hào)和處理器調(diào)度策略。在實(shí)驗(yàn)中可用隨機(jī)數(shù)來(lái)模擬確定這兩個(gè)進(jìn)程的運(yùn)行 順序,以代替中斷處理和處理器調(diào)度選擇的過(guò)程。因而,程序的結(jié)構(gòu)可參考圖31(2) “接收請(qǐng)求”進(jìn)程建立一 “請(qǐng)求I/O ”表,指出訪問(wèn)磁盤的進(jìn)程要求訪問(wèn) 的物理地址,表的格式為:進(jìn)程名柱面號(hào)磁道號(hào)物理記錄號(hào)初始化輸入在0,1區(qū)
4、間內(nèi)的一個(gè)隨機(jī)數(shù)驅(qū)動(dòng)調(diào)度接受請(qǐng)求圖3 1程序結(jié)構(gòu)假定某個(gè)磁盤組共有200個(gè)柱面,由外向里順序編號(hào)(0199),每個(gè)柱面上 有20個(gè)磁道,編號(hào)為019,每個(gè)磁道分成8個(gè)物理記錄,編號(hào)07。進(jìn)程訪問(wèn) 磁盤的物理地址可以用鍵盤輸入的方法模擬得到。圖 3 2是“接收請(qǐng)求”進(jìn)程的 模擬算法。在實(shí)際的系統(tǒng)中必須把等待訪問(wèn)磁盤的進(jìn)程排入等待列隊(duì),由于本實(shí)驗(yàn)?zāi)M驅(qū) 動(dòng)調(diào)度,為簡(jiǎn)單起見(jiàn),在實(shí)驗(yàn)中可免去隊(duì)列管理部分,故設(shè)計(jì)程序時(shí)可不考慮“進(jìn) 程排入等待隊(duì)列”的工作。(3)“驅(qū)動(dòng)調(diào)度”進(jìn)程的功能是查“請(qǐng)求 I/O ”表,當(dāng)有等待訪問(wèn)磁盤的進(jìn)程 時(shí),按電梯調(diào)度算法從中選擇一個(gè)等待訪問(wèn)者,按該進(jìn)程指定的磁盤物理地址啟動(dòng)
5、 磁盤為其服務(wù)。對(duì)移動(dòng)臂磁盤來(lái)說(shuō),驅(qū)動(dòng)調(diào)度分移臂調(diào)度和旋轉(zhuǎn)調(diào)度。電梯調(diào)度算法的調(diào)度策 略是與移動(dòng)臂的移動(dòng)方向和移動(dòng)臂的當(dāng)前位子有關(guān)的,所以每次啟動(dòng)磁盤時(shí)都應(yīng)登 記移動(dòng)臂方向和當(dāng)前位子。電梯調(diào)度算法是一種簡(jiǎn)單而實(shí)用的驅(qū)動(dòng)調(diào)度方法,這種 調(diào)度策略總是優(yōu)先選擇與當(dāng)前柱面號(hào)相同的訪問(wèn)請(qǐng)求,從這些請(qǐng)求中再選擇一個(gè)能 使旋轉(zhuǎn)距離最短的等待訪問(wèn)者。如果沒(méi)有與當(dāng)前柱面號(hào)相同的訪問(wèn)請(qǐng)求,貝肪根據(jù)移 臂方向來(lái)選擇,每次總是沿臂移動(dòng)方向選擇一個(gè)與當(dāng)前柱面號(hào)最近的訪問(wèn)請(qǐng)求,若 沿這個(gè)方向沒(méi)有訪問(wèn)請(qǐng)求時(shí),就改變臂的移動(dòng)方向。這種調(diào)度策略能使移動(dòng)臂的移 動(dòng)頻率極小,從而提高系統(tǒng)效率。用電梯調(diào)度算法實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度的模擬算法如
6、圖33。(4)圖3- 1中的初始化工作包括,初始化“請(qǐng)求I/O ”表,置當(dāng)前移臂方向 為里移;置當(dāng)前位置為0號(hào)柱面,0號(hào)物理記錄。程序運(yùn)行前可假定“請(qǐng)求I/O ”表 中已經(jīng)有如干個(gè)進(jìn)程等待訪問(wèn)磁盤。在模擬實(shí)驗(yàn)中,當(dāng)選中一個(gè)進(jìn)程可以訪問(wèn)磁盤時(shí),并不實(shí)際地啟動(dòng)磁盤,而用顯示:“請(qǐng)求I/O ”表;當(dāng)前移臂方向;當(dāng)前柱面號(hào),物理記錄號(hào)來(lái)代替圖3-3中的“啟動(dòng)磁盤”這項(xiàng)工作圖3-3電梯調(diào)度模擬算法五、源程序#includestdio.h#includestdlib.h#includeconio.h#includestring.h#define M 20typedef struct PCBchar pro
7、cM;/ 進(jìn)程名int cylinder_num;/ 柱面號(hào)int track_ num;/磁道號(hào)int phy_num;物理記錄號(hào)struct PCB *next;PCB;PCB *head=NULL;int directi on ;/ 定義方向,1 為 up, -1 為 dow nPCB *h=NULL; / 存放當(dāng)前運(yùn)行中的進(jìn)程的信息void init () / 初始化當(dāng)前進(jìn)程h=(PCB *)malloc(sizeof(PCB);direction=1;strcpy(h-proc,p);h-cylinder_num = 0;h-track_num= 0;h-phy_num= 0;/模擬
8、記錄當(dāng)前運(yùn)行進(jìn)程void current_process(PCB *Q)strcpy(h-proc,Q-proc);h-cylinder_num = Q-cylinder_num;h-track_num=Q-track_num;h-phy_num=Q-phy_num;/插入函數(shù)void insert(PCB *p)PCB *q;q=head;if(head=NULL)head=p;else for(q=head;q-next!=NULL;q=q-next);p-next=q-next;q-next=p;void out_info()/ 輸出進(jìn)程的信息printf(” |1111n n);pri
9、ntf( |進(jìn)程名丨柱面號(hào)丨磁道號(hào)丨物理記錄號(hào)丨方向丨n);printf(” 11111n);printf( %s t%d t%d t%d,h-proc,h-cylinder_num,h-track_num,h-phy_num); void output()PCB *p;p=head;printf(進(jìn)程名柱面號(hào)磁道號(hào)物理記錄號(hào)n);if(p=NULL)printf(-*進(jìn)程表為空,接收請(qǐng)求或按n退出*-n);elsewhile(p!=NULL)printf(%s t%d t%d t%dn,p-proc,p-cylinder_num,p-track_num,p-phy_num); p=p-nex
10、t;/初始化I/O請(qǐng)求表void create_PCB()PCB *p,*q;q=head;int i,n;printf(n);printf(請(qǐng)輸入I/O進(jìn)程表中進(jìn)程等待的個(gè)數(shù):n);printf(n);scanf(%d,&n);printf( 請(qǐng)依次輸入進(jìn)程的相關(guān)信息 : (用空格分隔) n);prin tf( n);printf( 進(jìn)程名,柱面號(hào),磁道號(hào),物理記錄號(hào) n);for(i=1;iproc);scanf(%d,&p-cylinder_num);scanf(%d,&p-track_num);scanf(%d,&p-phy_num);p-next=NULL;insert(p); pr
11、intf( n);/接受請(qǐng)求模塊 void Receive_requests() PCB *p;int i,n,m; printf( 請(qǐng)輸入一個(gè)值 : n); printf(1. n); printf(0. n); scanf(%d,&i);if(i=1)printf( 正在運(yùn)行的進(jìn)程為: n); printf(n);/*if(direction=1) / 啟動(dòng)磁盤 out_info(); printf( upn); printf(n); if(direction=-1) out_info(); printf( downn); printf(n);*/ printf(n); printf( 接
12、受請(qǐng)求前的等待進(jìn)程表為 n); output();printf( 請(qǐng)輸入接受等待進(jìn)程數(shù)量 n); scanf(%d,&n);printf( 請(qǐng)依次輸入進(jìn)程的信息 n);n);printf( 進(jìn)程名,柱面號(hào),磁道號(hào),物理記錄號(hào) for(m=1;mproc);scanf(%d,&p-cylinder_num); scanf(%d,&p-track_num); scanf(%d,&p-phy_num);p-next=NULL; insert(p);printf( 接受請(qǐng)求后的等待進(jìn)程表為: n); printf(n);output();elseprintf( 沒(méi)有接受進(jìn)程,繼續(xù)往下運(yùn)行程序n);/電
13、梯調(diào)度算法void lift()int min,cha,max;PCB *p,*q,*B;/p為指要?jiǎng)h除的節(jié)點(diǎn),q為查找的節(jié)點(diǎn),B指向要?jiǎng)h 除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)q=head; if(q!=NULL)while(q!=NULL)&(q-cylinder_num!=h-cylinder_num)/ 找 到 第 一個(gè)相同的柱面號(hào)q=q-next;if(q=NULL)/ 沒(méi)有柱面號(hào)相同的等待進(jìn)程q=head;if(direction=1)/ 當(dāng)前移臂方向 upwhile(q!=NULL)&(q-cylinder_num cylinder_num)q=q-next;if(q=NULL)/ 沒(méi)有比當(dāng)前柱面號(hào)
14、大的等待進(jìn)程directio n=-1;/置當(dāng)前移臂方向?yàn)橥庖苢=head;從小于當(dāng)前柱面號(hào)的訪問(wèn)中選擇一個(gè)最大的,p指向p=q;max=q-cylinder_num;q=q-next; while(q!=NULL) if(maxcylinder_num) max=q-cylinder_num; p=q;/p 指向最大的節(jié)點(diǎn)q=q-next;else/有大于當(dāng)前柱面號(hào)的等待進(jìn)程 min=q-cylinder_num;p=q;q=q-next;while(q!=NULL)/ 大于當(dāng)前柱面號(hào)并且小于指定最小的節(jié)點(diǎn)時(shí)if(h-cylinder_numcylinder_num)&(q-cylinder
15、_numcyli nder_num)min=q-cylinder_num;p=q;/p指向最小的節(jié)點(diǎn)q=q-next;else/當(dāng)前移臂方向向外while(q!=NULL)&(q-cylinder_num h-cylinder_num)q=q-next;if(q=NULL)/ 沒(méi)有比當(dāng)前柱面號(hào)小的請(qǐng)求 direction=1;q=head;從大于當(dāng)前柱面號(hào)的訪問(wèn)中選擇一個(gè)最小的,p指向p=q;min=q-cylinder_num;q=q-next;while(q!=NULL)if(minq-cylinder_num) min=q-cylinder_num;p=q;/p指向最小的節(jié)點(diǎn)q=q-ne
16、xt;else/有比當(dāng)前柱面號(hào)小的請(qǐng)求進(jìn)程 max=q-cylinder_num;p=q;q=q-next;while(q!=NULL)從小當(dāng)前柱面號(hào)訪問(wèn)進(jìn)程中選擇一個(gè)最大的,用p指向 if(p-cylinder_numcylinder_num&q-cylinder_numcylind er_num)max=q-cylinder_num;p=q;/p指向最大的節(jié)點(diǎn)q=q-next;/else/有比當(dāng)前柱面號(hào)小的請(qǐng)求進(jìn)程/else/當(dāng)前移臂方向向外/if(q=NULL)/ 沒(méi)有柱面號(hào)相同else/有柱面號(hào)相同的等待進(jìn)程min=q-phy_ nu m-h-phy_ num;/第一個(gè)相同柱面號(hào)設(shè)為最
17、小值p=q;/指向最小的節(jié)點(diǎn),旋轉(zhuǎn)距離最短的訪問(wèn)者if(minnext;while(q!=NULL)if(q-cylinder_num=h-cylinder_num)/ 有柱面號(hào)相同cha=q-phy_num-h-phy_num;if(chacha)/ 有更小的節(jié)點(diǎn),旋轉(zhuǎn)距離最短的訪問(wèn)者 min=cha;p=q;指向最小的節(jié)點(diǎn)q=q-next;/while 查找/elsecurre nt_process(p);/保留選中的進(jìn)程if(direction=1)/啟動(dòng)磁盤printf( 被選中的等待進(jìn)程為: n);printf(n);out_info();printf( upn);printf(n)
18、;if(direction=-1)printf( 被選中的等待進(jìn)程為: n);printf(n);out_info();printf( downn);printf(n);if(p=head)head=p-next;elseB=head;while(B-next!=p)/ 找到要?jiǎng)h除進(jìn)程的前一個(gè)節(jié)點(diǎn)B=B-next;B-next=p-next;/被選中者退出I/O請(qǐng)求表/if(q!=NULL) 結(jié)束elseprintf( 請(qǐng)求進(jìn)程表為空 ,接收請(qǐng)求或退出 n); / 電梯調(diào)度算法結(jié)束 void main()/ 主函數(shù) system(cls); char go=y; float number; init(); printf( * 執(zhí)行驅(qū)動(dòng)調(diào)度 *n);printf( * 當(dāng)前運(yùn)行進(jìn)程為 *n);out_info(); printf( upn);printf( -*創(chuàng)建I/O請(qǐng)求進(jìn)程等待表*-n); create_PCB(); /創(chuàng)建進(jìn)程鏈表printf(n);printf(I/O 請(qǐng)求進(jìn)程等待表為: n);
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包地轉(zhuǎn)包合同協(xié)議書
- 燒烤店合同解除協(xié)議書
- 考科目二協(xié)議書
- 退出入股協(xié)議書
- 費(fèi)用資助協(xié)議書
- 藥品上市協(xié)議書
- 土地置換及建設(shè)協(xié)議書
- 茶葉代賣協(xié)議書
- 紙廠銷毀協(xié)議書
- 未施工合同解除協(xié)議書
- 學(xué)校食堂“三同三公開(kāi)”制度實(shí)施方案
- 危化品駕駛員押運(yùn)員安全培訓(xùn)
- 2025年福建福州地鐵集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 肝硬化行TIPS術(shù)后整體護(hù)理查房
- 人工智能在新聞媒體領(lǐng)域的應(yīng)用
- 【MOOC】儒家倫理-南京大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 銀保部三年規(guī)劃
- 2024治安調(diào)解協(xié)議書樣式
- 零工市場(chǎng)(驛站)運(yùn)營(yíng)管理 投標(biāo)方案(技術(shù)方案)
- 小學(xué)二年級(jí)數(shù)學(xué)找規(guī)律練習(xí)題及答案
- 智研咨詢重磅發(fā)布:2024年中國(guó)航運(yùn)行業(yè)供需態(tài)勢(shì)、市場(chǎng)現(xiàn)狀及發(fā)展前景預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論