磁盤驅(qū)動調(diào)度算法的模擬(共13頁)_第1頁
磁盤驅(qū)動調(diào)度算法的模擬(共13頁)_第2頁
磁盤驅(qū)動調(diào)度算法的模擬(共13頁)_第3頁
磁盤驅(qū)動調(diào)度算法的模擬(共13頁)_第4頁
磁盤驅(qū)動調(diào)度算法的模擬(共13頁)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上一        編寫目的熟悉磁盤的結(jié)構(gòu)以及磁盤的驅(qū)動調(diào)度算法的模擬,編程實現(xiàn)簡單常用的磁盤驅(qū)動調(diào)度算法先來先服務(FIFO)、電梯調(diào)度算法、最短尋找時間優(yōu)先算法、掃描(雙向掃描)算法、單向掃描(循環(huán)掃描)算法等。編程只需實現(xiàn)兩個算法。題目可以選取教材或習題中的相關(guān)編程實例。編程語言建議采用c/c+或Java。模擬程序鼓勵采用隨機數(shù)技術(shù)、動態(tài)空間分配技術(shù),有條件的最好能用圖形界面展現(xiàn)甚至用動畫模擬。實驗性質(zhì):驗證型。二      

2、    課程設(shè)計內(nèi)容1)掌握使用一門語言進行磁盤驅(qū)動調(diào)度算法的模擬;2)編寫程序?qū)⒋疟P驅(qū)動調(diào)度算法的過程和結(jié)果能以較簡明直觀的方式展現(xiàn)出來。三          設(shè)計、方法和步驟1. 設(shè)計磁盤驅(qū)動調(diào)度對磁盤的效率有重要影響。磁盤驅(qū)動調(diào)度算法的好壞直接影響輔助存儲器的效率,從而影響計算機系統(tǒng)的整體效率。常用的磁盤驅(qū)動調(diào)度算法有:最簡單的磁盤驅(qū)動調(diào)度算法是先入先出(FIFO)法。這種算法的實質(zhì)是,總是嚴格按時間順序?qū)Υ疟P請求予以處理。算法實現(xiàn)簡單、易于理解并且

3、相對公平,不會發(fā)生進程餓死現(xiàn)象。但該算法可能會移動的柱面數(shù)較多并且會經(jīng)常更換移動方向,效率有待提高。 最短尋找時間優(yōu)先算法:總是優(yōu)先處理最靠近的請求。該算法移動的柱面距離較小,但可能會經(jīng)常改變移動方向,并且可能會發(fā)生進程饑餓現(xiàn)象。 電梯調(diào)度:總是將一個方向上的請求全部處理完后,才改變方向繼續(xù)處理其他請求。掃描(雙向掃描):總是從最外向最里進行掃描,然后在從最里向最外掃描。該算法與電梯調(diào)度算法的區(qū)別是電梯調(diào)度在沒有最外或最里的請求時不會移動到最外或最里柱面,二掃描算法總是移到最外、最里柱面。兩端的請求有優(yōu)先服被務的跡象。循環(huán)掃描(單向掃描):從最外向最里進行柱面請求處理,到最里柱面后,直接跳到最

4、外柱面然后繼續(xù)向里進行處理。該算法與掃描算法的區(qū)別是,回來過程不處理請求,基于這樣的事實,因為里端剛被處理。 2. 設(shè)計方法1)使用流程圖描述演示程序的設(shè)計思想;2)選取c/c+、Java等計算機語言,編程調(diào)試,最終給出運行正確的程序。3. 程序步驟參考程序:1)      c/c+版的驅(qū)動調(diào)度算法電梯調(diào)度模擬程序#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>typedef struct _pro

5、cchar name32; /*定義進程名稱*/int team; /*定義柱面號*/int ci; /*定義磁道面號*/int rec; /*定義記錄號*/struct _proc *prior;struct _proc *next;PROC; PROC *g_head=NULL,*g_curr=NULL,*local;int record=0;int yi=1;void init()PROC *p; /*初始化鏈表(初始I/O表)*/g_head = (PROC*)malloc(sizeof(PROC);g_head->next = NULL;g_head->prio

6、r = NULL;p = (PROC*)malloc(sizeof(PROC);strcpy(p->name, "P1");p->team=100;p->ci=10;p->rec=1;p->next = NULL;p->prior = g_head;g_head->next = p;g_curr=g_head->next;p = (PROC*)malloc(sizeof(PROC);strcpy(p->name, "P2");p->team=30;p->ci=5;p->rec=5;p

7、->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p->name, "P3");p->team=40;p->ci=2;p->rec=4;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p->name, "P4&quo

8、t;);p->team=85;p->ci=7;p->rec=3;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC);strcpy(p->name, "P5");p->team=60;p->ci=8;p->rec=4;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=g_head->next;local

9、= (PROC*)malloc(sizeof(PROC); /*選中進程*/strcpy(local->name, "P0");local->team=0;local->ci=0;local->rec=0;local->next=NULL;local->prior=NULL;void PrintInit() /*打印I/O表*/ PROC *t = g_head->next;printf("-/n");printf(" -I/O LIST-/n");printf(" process

10、team ci rec /n");while(t!=NULL)printf("%4s %8d %8d %5d/n", t->name, t->team, t->ci, t->rec ); t = t->next;printf("/n/nCurrent process is :/n");printf("-/n/n");printf(" process team ci rec /n");printf("%4s %8d %8d %5d/n", local->

11、;name, local->team, local->ci, local->rec );switch(yi)case 1:printf("current direction is UP/n");break;case 0:printf("current direction is down/n");break;void acceptreq() /*接受請求函數(shù)*/PROC *p;p = (PROC*)malloc(sizeof(PROC);printf("please input the information of the ne

12、w process/nprocess-name:/nprocess-team/nprocess-ci/nprocess-rec/n");printf("1.name/n");scanf("%s",p->name);printf("2.team 0-199/n");scanf("%d",&p->team); /*輸入請求進程信息*/printf("3.ci 0-19/n");scanf("%d",&p->ci);printf(&quo

13、t;4.rec 0-7/n");scanf("%d",&p->rec);getchar();g_curr=g_head; /*將此節(jié)點鏈入I/O請求表*/while(g_curr->next!=NULL)g_curr=g_curr->next;p->next=NULL;p->prior=g_curr;g_curr->next=p;g_curr=g_head->next;printf("NEW I/O LIST/n/n");PrintInit(); /*將新的I/O請求表輸出*/void qddd

14、() /*驅(qū)動調(diào)度函數(shù)*/PROC *out;int min;int max=g_head->next->team;if (g_head->next=NULL); /*若已全部調(diào)度,則空操作*/else switch (yi)case 1: min=g_head->next->team;out=g_head->next; /*選出最小的team進程,模擬啟動此進程*/strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->

15、;rec=out->rec;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)if (g_curr->team > record) min = g_curr->team;break;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)if (min>=g_curr->team&&g_curr->team>record)min=g_curr->team;out=g_curr;

16、strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;printf("/n-/n");printf("the process choosed :/n"); printf(" process team ci rec /n");printf("%4s %8d %8d %5d/n", out->name, out->team,

17、out->ci,out->rec ); record = local->team;printf("%d",record);for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)if (max<g_curr->team)max=g_curr->team;if(max=record)yi=0;record=1000;break; break;/*case 1*/case 0: /*case 1 的對稱過程*/max=g_head->next-&

18、gt;team;out=g_head->next; strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)if (g_curr->team < record) max = g_curr->team;break;for (g_curr=g_head->next;g_cu

19、rr!=NULL;g_curr=g_curr->next)if (max<=g_curr->team&&g_curr->team<record)max=g_curr->team;out=g_curr;strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;printf("/n-/n");printf("the process choosed :

20、/n"); printf(" process team ci rec /n");printf("%4s %8d %8d %5d/n", out->name, out->team, out->ci,out->rec );min=g_head->next->team;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next)if (min>g_curr->team)min=g_curr->team;record =

21、local->team;if(min=record)yi=1;record=0;break; break;default : return -1;/*switch*/ if (out->next=NULL) /*將選中的進程從I/O請求表中刪除*/out->prior->next=NULL;free(out);elseout->prior->next=out->next;out->next->prior=out->prior;free(out);/*else*/ void acceptnum() /*通過

22、輸入01選擇驅(qū)動調(diào)度或是接受請求*/float num;char c;while(1)printf("-/n");printf("please input a number between 0 and 1/nnum<=0.5:accept request/nnum>0.5:qudong diaodu/n/nnum=2:I/O LIST/n/nnum=?/n");scanf("%f",&num);getchar();while(num<0|num>1)&&num!=2) /*過濾不合法數(shù)據(jù)

23、 注意:本程序其他輸入數(shù)據(jù)可能未過濾*/printf("number ERROR!Input again please!/nnum=?/n ");scanf("%f",&num);getchar();if(num>0.5&&num!=2) /*驅(qū)動調(diào)度*/if (g_head->next=NULL)printf("/n/n");printf("-/n");printf("I/O list is empty!/n"); /*請求表為空 無需調(diào)度*/elseprintf("qudong diaodu/n"); qddd(); /*調(diào)用函數(shù)進行調(diào)度*/else

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論