


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