資源描述:
《操作系統(tǒng)實(shí)驗(yàn)磁盤調(diào)度掃描算法循環(huán)掃描算法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、學(xué)號(hào)P1514032專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)姓名實(shí)驗(yàn)日期2017.12.7教師簽字成績(jī)實(shí)驗(yàn)報(bào)告【實(shí)驗(yàn)名稱】磁盤調(diào)度(二)【實(shí)驗(yàn)?zāi)康摹看疟P調(diào)度中尋道時(shí)間直接影響到數(shù)據(jù)訪問的快慢,處理好磁盤尋道時(shí)間是關(guān)鍵。分別采用掃描策略、循環(huán)掃描策略處理。【實(shí)驗(yàn)原理】1.掃描算法(SCAN算法)SCAN算法,也就是很形象的電梯調(diào)度算法。先按照一個(gè)方向(比如從外向內(nèi)掃描),掃描的過程中依次調(diào)度經(jīng)過的磁道。當(dāng)掃描到最里層的一個(gè)磁道時(shí)反向掃描直至所有磁道都被調(diào)度。2.循環(huán)掃描算法(CSCAN算法)CSCAN算法,循環(huán)掃描算法,它的思想是,訪問完最里面一個(gè)要求服務(wù)的序列之后
2、,從最外層的序號(hào)開始往里走。也就是始終保持一個(gè)方向,故稱為循環(huán)掃描算法。【數(shù)據(jù)結(jié)構(gòu)和符號(hào)說明】(1)數(shù)據(jù)結(jié)構(gòu)和符號(hào)說明編譯語言:C++數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體數(shù)組符號(hào)定義:typedefstructTrack//磁道結(jié)構(gòu)體{intid;//磁道序列intstate=0;//是否訪問過,未被訪問置狀態(tài)為0}Track;Tracktrack[N];//最大磁道數(shù)為100Tracktrack1[N];//復(fù)制的磁道數(shù)組用于輸出intstep[N];//移動(dòng)距離intnum,i,current_track,num1;//當(dāng)前磁道即部分中間變量函數(shù)說明:void
3、init()//初始化程序voidinput()//輸入函數(shù)voidsort1()//從小到大排序intabs(inta,intb)//相減的絕對(duì)值intfind_first_bignum()//尋找第一個(gè)最大值intfind_first_smallnum()//尋找第一個(gè)最小值voidSCAN(intup_or_down)//掃描算法voidCSCAN(intup_or_down)//循環(huán)掃描算法voidoutput(Tracka[])//輸出函數(shù)voidoutput_average_track()//輸出平均尋道時(shí)間intshow()//顯
4、示用戶界面//返回值為輸入的選擇項(xiàng)流程圖:SCAN算法:CSCAN算法(與SCAN算法基本類似):代碼:#include#defineN100typedefstructTrack{intid;//磁道序列intstate=0;//是否訪問過,未被訪問置狀態(tài)為0}Track;Tracktrack[N];//最大磁道數(shù)為100Tracktrack1[N];intstep[N];//移動(dòng)距離intnum,i,current_track,num1;voidinit()//初始化程序{num=0;for(i=0;i5、rack[i].state=-1;//id置為1track1[i].state=-1;step[i]=-1;//移動(dòng)距離為-1}}voidinput()//輸入函數(shù){printf("輸入當(dāng)前磁道");scanf("%d",¤t_track);num1=current_track;printf("輸入要訪問的磁道數(shù)目");scanf("%d",&num);printf("輸入要訪問磁道序列");for(i=0;i6、(i=0;i0?a-b:b-a;}intSerch_min_pos()//尋找到當(dāng)前磁道最短的需求磁道
7、{intmin=45536;//最小距離標(biāo)志intpos;for(inti=0;iabs(track[i].id,current_track))//尋找最小距離{min=abs(track[i].id,current_track);pos=i;}track[pos].state=1;returnpos;//返回在數(shù)組中的位置}voidSSTF()//最短尋道優(yōu)先{for(i=0;i8、rch_min_pos()];//更新到要輸出的數(shù)組中step[i]=abs(track1[i].id,current_track);//移動(dòng)距離cu