欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      多級反饋隊(duì)列調(diào)度算法

      時間:2019-05-12 04:53:29下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《多級反饋隊(duì)列調(diào)度算法》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《多級反饋隊(duì)列調(diào)度算法》。

      第一篇:多級反饋隊(duì)列調(diào)度算法

      多級反饋隊(duì)列調(diào)度算法

      一實(shí)驗(yàn)內(nèi)容

      以鏈?zhǔn)浇Y(jié)構(gòu)組成空閑PCB棧,以雙向鏈?zhǔn)浇Y(jié)構(gòu)組成進(jìn)程的就緒隊(duì)列和睡眠隊(duì)列,模擬UNIX的進(jìn)程管理程序,實(shí)現(xiàn)以下操作(可用鍵盤命令、命令文件或由產(chǎn)生的隨機(jī)數(shù)決定操作和參數(shù))。

      (1)創(chuàng)建一個新進(jìn)程:如pid=newp(pri,size,time),申請空閑PCB和所需內(nèi)存,填寫PCB的各項(xiàng)初始數(shù)據(jù),將該P(yáng)CB送入就緒隊(duì)列。

      (2)調(diào)度和執(zhí)行:自己設(shè)計(jì)多級反饋隊(duì)列調(diào)度算法,在就緒隊(duì)列中選擇一個優(yōu)先級最高的進(jìn)程,使其運(yùn)行若干單位時間。要求在運(yùn)行期間進(jìn)程的p_cpu、p_pri和p_time要變化,并在適當(dāng)?shù)臅r機(jī)重新調(diào)度。

      (3)進(jìn)程睡眠:進(jìn)程運(yùn)行時可調(diào)用自編的睡眠函數(shù),主動進(jìn)入睡眠狀態(tài),并轉(zhuǎn)調(diào)度程序。也可由操作使進(jìn)程強(qiáng)迫掛起,睡眠適當(dāng)時間。進(jìn)程睡眠時要在PCB中記錄睡眠原因和優(yōu)先數(shù)。

      (4)進(jìn)程的喚醒:根據(jù)睡眠原因,將相應(yīng)的進(jìn)程從睡眠隊(duì)列中調(diào)出,轉(zhuǎn)入就緒隊(duì)列。如果該進(jìn)程優(yōu)先級比現(xiàn)在運(yùn)行的優(yōu)先級高,則轉(zhuǎn)調(diào)度程序。

      (5)進(jìn)程的終止:如果一個進(jìn)程運(yùn)行完作業(yè)所需的時間,該進(jìn)程就終止,釋放所占用的內(nèi)存和PCB資源,轉(zhuǎn)調(diào)度程序。

      二、設(shè)計(jì)思想

      實(shí)現(xiàn)多級犯規(guī)隊(duì)列調(diào)度算法,多級調(diào)度隊(duì)列分別高優(yōu)先級(H或h)隊(duì)列、中優(yōu)先級(M或m)隊(duì)列和低優(yōu)先級的(L或l)隊(duì)列。

      (1)當(dāng)一個進(jìn)程在一次運(yùn)行中用完了時間片(100單位時間)還未完成任務(wù)或沒有進(jìn)入阻塞狀態(tài),降低其優(yōu)先級,進(jìn)入低一級的調(diào)度隊(duì)列。

      (2)進(jìn)程沒用完的時間片,就因?yàn)镮/O等原因轉(zhuǎn)變?yōu)樽枞麪顟B(tài)。等到阻塞原因解除,轉(zhuǎn)變?yōu)榫途w狀態(tài)后,仍回到原先隊(duì)列。

      (3)當(dāng)一個進(jìn)程正在運(yùn)行時,在更高的優(yōu)先級的隊(duì)列中到來了一個進(jìn)程,那么高優(yōu)先級的進(jìn)程可以搶占當(dāng)前進(jìn)程的處理機(jī)。被搶占的進(jìn)程已運(yùn)行了一定的時間(但沒到達(dá)100單位時間),仍留在原先的隊(duì)列中。(4)進(jìn)程在時間片內(nèi)完成了任務(wù),被撤離系統(tǒng)。

      三、函數(shù)和算法(1)建議使用的PCB數(shù)據(jù)結(jié)構(gòu)

      struct mypcb {

      char p_pid;//進(jìn)程標(biāo)志數(shù) char p_pstat;//進(jìn)程狀態(tài)

      void *p_addr;//進(jìn)程映像在內(nèi)存中的首址 int p_size;//進(jìn)程映像的長度 char p_pri;//進(jìn)程優(yōu)先數(shù)

      int p_cpu;//進(jìn)程當(dāng)前運(yùn)行的時間

      int p_time;//作業(yè)運(yùn)行的(剩余)總時間 char p_wchan;//進(jìn)程睡眠原因

      struct mypcb *p_next,*p_prior;//進(jìn)程mypcb的雙向鏈指針 };

      (2)主程序:

      初始化變量和隊(duì)列

      從輸入文件中讀入進(jìn)程信息,創(chuàng)建進(jìn)程 打印初始的3個調(diào)度隊(duì)列進(jìn)程 調(diào)度主循環(huán)

      首先調(diào)度高優(yōu)先級隊(duì)列進(jìn)程 IF 有進(jìn)行蘇醒

      設(shè)定當(dāng)前進(jìn)程運(yùn)行一段時間,進(jìn)程剩余時間減去該時間

      打印當(dāng)前進(jìn)程的信息和將要喚醒的進(jìn)程

      在睡眠隊(duì)列喚醒進(jìn)程,回到調(diào)度主循環(huán) IF當(dāng)前進(jìn)程滿足睡眠條件

      打印當(dāng)前進(jìn)程的信息

      進(jìn)程移出調(diào)度隊(duì)列

      加入睡眠隊(duì)列,回到調(diào)度主循環(huán) IF 當(dāng)前進(jìn)程不滿足睡眠條件 IF 進(jìn)程總剩余時間>100

      運(yùn)行并用掉時間片中的剩余時間

      從高優(yōu)先級隊(duì)列中移出,加入中優(yōu)先級隊(duì)列 ELSE

      用掉全部剩余時間,從隊(duì)列中刪去

      其次調(diào)度次高優(yōu)先級隊(duì)列進(jìn)程(略)

      最后調(diào)度低優(yōu)先級隊(duì)列進(jìn)程(略)

      如果3個調(diào)度隊(duì)列和睡眠隊(duì)列皆空,調(diào)度循環(huán)終止

      (3)函數(shù) i.ii.iii.int init()初始化變量、初始化調(diào)度隊(duì)列和睡眠隊(duì)列

      int printlist(struct list *List)打印調(diào)度隊(duì)列中的進(jìn)程和剩余運(yùn)行時間

      int gotosleep(struct mypcb *process)根據(jù)進(jìn)程的剩余運(yùn)行時間p_time,struct proc *wakeup(struct list *List)判斷是否有進(jìn)程蘇醒,本程序設(shè)int wakeup_work(struct mypcb *p,struct list *List)蘇醒進(jìn)程插進(jìn)原使其運(yùn)行一段時間,并設(shè)置睡眠狀態(tài)

      iv.計(jì)調(diào)用5次,喚醒隊(duì)列首進(jìn)程

      v.先優(yōu)先級隊(duì)列

      vi.int newp(char pri,int size,int time)根據(jù)優(yōu)先數(shù)、進(jìn)程大小和運(yùn)行時間的參數(shù)創(chuàng)建一個新進(jìn)程,為新進(jìn)程分配內(nèi)存空間,睡眠原因?yàn)榭?,如進(jìn)入睡眠,狀態(tài)為‘s’;

      vii.int addlist(struct list *List,struct mypcb *process)將進(jìn)程添加到隊(duì)列的尾部,包括睡眠隊(duì)列;

      四、測試與分析

      程序輸入格式為:./sched <輸入文件名>

      輸入文件內(nèi)容為:

      優(yōu)先級 內(nèi)存大小 分配時間 H 1000 301 H 1000 200 M 1000 203 M 1000 200 H 1000 100 M 1000 102 L 1000 200

      五、總結(jié)和思考

      1、總結(jié)自己實(shí)驗(yàn)過程中的心得體會;

      2、思考以下問題:

      (1)如何用簡單的方法模擬I/O中斷或其他事件,使進(jìn)程睡眠若干時間。(2)如何設(shè)計(jì)觸發(fā)睡眠隊(duì)列中進(jìn)程的事件,使其被喚醒,轉(zhuǎn)變?yōu)檫\(yùn)行狀態(tài)。

      3、回答以下問題:

      (1)多級反饋優(yōu)先級隊(duì)列調(diào)度的優(yōu)點(diǎn)是什么?(2)比較本實(shí)驗(yàn)程序中使用的PCB與實(shí)際的(比如Linux/Unix系統(tǒng))PCB的主要區(qū)別,有哪些信息本調(diào)度算法中沒有用到?如果采用其他的調(diào)度算法,需要增加哪些信息?

      第二篇:電梯優(yōu)先調(diào)度算法

      電梯優(yōu)先調(diào)度算法

      電梯調(diào)度算法(ms InterView)

      移臂調(diào)度算法包括以下四種:

      1)先來先服務(wù)算法:根據(jù)訪問者提出訪問請求的先后次序來決定執(zhí)行次序。

      2)最短尋找時間優(yōu)先調(diào)度算法:從等待的訪問者中挑選尋找時間最短的那個請求執(zhí)行,而不管訪問者的先后次序。

      3)電梯調(diào)度掃描算法:從移動臂當(dāng)前位置沿移動方向選擇最近的那個柱面的訪問者來執(zhí)行,若該方向上無請求訪問時,就改變移動方向再選擇。

      4)單向掃描調(diào)度算法:從0柱面開始往里單向掃描,掃到哪個執(zhí)行哪個。

      */

      // t1.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。

      //

      #include “stdafx.h” #include“math.h” #include“stdlib.h” #include“string.h” struct Head {

      int nPosition;bool bVisited;};

      void Visit(struct Head *pHead){

      printf(“visite cy:%dn”,pHead->nPosition);pHead->bVisited=true;} int ReadInputKeyboard(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){ int i;

      printf(“please input Current position:”);scanf(“%d”,pCurrentPosition);

      printf(“please input will visit position:”);for(i=0;i

      scanf(“%d”,&pHead[i].nPosition);pHead[i].bVisited=false;if(pHead[i].nPosition<0)break;} return i;} int ReadInputFile(struct

      Head

      *pHead,int

      *pCurrentPosition,int nMaxNumber){ int i;

      char szFileName[256],*q,*p,szTemp[20];printf(“please input filename:”);scanf(“%s”,szFileName);

      FILE *pFile=fopen(szFileName,“r”);if(pFile==NULL){

      printf(“open file %s error”,szFileName);return-1;}

      for(i=0;!feof(pFile)&&i

      p=szFileName;fgets(p,256,pFile);

      while(q=strchr(p,',')){

      memset(szTemp,0,sizeof(szTemp)*sizeof(char));strncpy(szTemp,p,q-p);p=q+1;if(i==0)

      *pCurrentPosition=atoi(szTemp);else { pHead[i-1].nPosition=atoi(szTemp);pHead[i-1].bVisited=false;} i++;}

      memset(szTemp,0,sizeof(szTemp)*sizeof(char));pHead[i-1].nPosition=atoi(p);pHead[i-1].bVisited=false;//i++;

      }

      fclose(pFile);return i;}

      int FifoVisit(int nCurrentPosition,struct Head *pHead,int nNumber){

      //先來先服務(wù)

      int nHaveVisited=0;int nMoveDistance=0;int i;while(nHaveVisited

      for(i=0;i

      if(pHead[i].bVisited)continue;

      Visit(&pHead[i]);nHaveVisited++;

      nMoveDistance+=abs(nCurrentPosition-pHead[i].nPosition);nCurrentPosition=pHead[i].nPosition;} }

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int SsfoVisit(int nCurrentPosition,struct Head *pHead,int nNumber){ // 最短尋找時間優(yōu)先

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;

      while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int DtVisit(int nCurrentPosition,bool bOut,struct Head *pHead,int nNumber){

      //電梯調(diào)度算法

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;

      while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(bOut&&pHead[i].nPositionnCurrentPosition){

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } }

      if(nMinDistance==0xffff){

      bOut=!bOut;continue;}

      //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int DxVisit(int nCurrentPosition,struct Head *pHead,int nNumber){

      //單向調(diào)度算法

      int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited

      nMinDistance=0xffff;nMinIndex=0;//找最小值

      for(i=0;i

      if(pHead[i].bVisited)continue;

      if(pHead[i].nPosition>nCurrentPosition){

      if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){

      nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;} } }

      if(nMinDistance==0xffff){

      nMoveDistance+=199-nCurrentPosition;nCurrentPosition=0;continue;}

      //訪問

      Visit(&pHead[nMinIndex]);nHaveVisited++;

      nMoveDistance+=nMinDistance;

      nCurrentPosition=pHead[nMinIndex].nPosition;}

      printf(“the sum of move distance:%dn”,nMoveDistance);return nMoveDistance;}

      int main(int argc, char* argv[]){ //p114 struct Head mylist[20];//={98,false,183,false,37,false,122,false,14,false,124,false,65,false,67,false};

      //int nCurrentPosition=53;

      //int nRealNumber=8;

      int nCurrentPosition=0;

      int nRealNumber=ReadInputFile(mylist,&nCurrentPosition,20);// FifoVisit(nCurrentPosition,mylist,nRealNumber);

      // SsfoVisit(nCurrentPosition,mylist,nRealNumber);

      //DtVisit(nCurrentPosition,false,mylist,nRealNumber);

      DxVisit(nCurrentPosition,mylist,nRealNumber);

      return 0;}

      第三篇:操作系統(tǒng)課程設(shè)計(jì)-磁盤調(diào)度算法

      1.實(shí)驗(yàn)題目:

      磁盤調(diào)度算法。

      建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu);

      在屏幕上顯示磁盤請求的服務(wù)狀況;

      將一批磁盤請求的情況存磁盤文件,以后可以讀出并重放; 計(jì)算磁頭移動的總距離及平均移動距離; 支持算法:FIFO、SSTF、SCAN、CSCAN;

      2.設(shè)計(jì)目的:

      調(diào)度磁盤I/O請求服務(wù),采用好的方式能提高訪問時間和帶寬。本實(shí)驗(yàn)通過編程對磁盤調(diào)度算法的實(shí)現(xiàn),加深對算法的理解,同時通過用C++語言編寫程序?qū)崿F(xiàn)這些算法,并在windos平臺上實(shí)現(xiàn),更好的掌握操作系統(tǒng)的原理以及實(shí)現(xiàn)方法,提高綜合運(yùn)用專業(yè)課知識的能力。

      3.任務(wù)及要求

      3.1 設(shè)計(jì)任務(wù)

      編程實(shí)現(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度:

      1、先來先服務(wù)算法(FCFS)

      2、最短尋道時間算法(SSTF)

      3、掃描算法(SCAN)

      4、循環(huán)掃描算法(CSCAN)

      3.2 設(shè)計(jì)要求

      對用戶指定的磁盤調(diào)度請求序列,基于以上四種算法,實(shí)現(xiàn)各自的調(diào)度順序并輸出,同時計(jì)算出各種算法下的平均尋道長度。

      4.算法及數(shù)據(jù)結(jié)構(gòu)

      4.1算法的總體思想

      queue[n] 為請求調(diào)度序列,diskrode為磁盤磁道數(shù),headstarts為正在調(diào)度的磁道

      ①先來先服務(wù)算法(FCFS)按queue[n]數(shù)組的順序進(jìn)行磁盤調(diào)度,將前一個調(diào)度磁道與下一個調(diào)度磁道的差值累加起來,得到總的尋道長度,再除以n得到平均尋道長度。

      ②最短尋道時間優(yōu)先算法(SSTF)將queue[n]進(jìn)行由小到大的排序,首先定位當(dāng)前調(diào)度磁headstarts在queue[n]的位置,通過循環(huán)語句找出離起始磁頭最短的位置。

      ③掃描算法(SCAN)

      將queue[n]進(jìn)行由小到大的排序,首先定位當(dāng)前調(diào)度磁headstarts在queue[n]的位置,然后在此位置按給定的方向遍歷queue[n],當(dāng)?shù)蓝它c(diǎn)(queue[0]或queue[n-1])時,再在定位處反向遍歷到另一端。當(dāng)調(diào)度磁道不在queue端點(diǎn)時,總的尋道長度為為前一個磁道與后一個磁

      道差值的累加,當(dāng)?shù)竭_(dá)端點(diǎn)且queue[n]未全調(diào)度時,總尋道長度加上端點(diǎn)值再加上下一個調(diào)度磁道的值,再按前面的算法進(jìn)行,直到磁道全部都調(diào)度完畢,得到總的尋道長度,除以n得到平均尋道長度。

      ④循環(huán)掃描算法(CSCAN)將queue[n]進(jìn)行由小到大的排序,首先定位當(dāng)前調(diào)度磁headstarts在queue[n]的位置,然后在此位置按給定的方向遍歷queue[n],當(dāng)?shù)蓝它c(diǎn)(queue[0]或queue[n-1])時,反向到另一端點(diǎn)再以此方向進(jìn)行遍歷,直到queue[n]中所有都調(diào)度完。當(dāng)調(diào)度磁道不在queue端點(diǎn)時,總的尋道長度為為前一個磁道與后一個磁道差值的累加,當(dāng)?shù)竭_(dá)端點(diǎn)且queue[n]未全調(diào)度時,總尋道長度加上端點(diǎn)值再加上磁盤磁道總長度,再加上下一個調(diào)度磁道的值,再按前面的算法進(jìn)行,直到磁道全部都調(diào)度完畢,得到總的尋道長度,除以n得到平均尋道長度。

      5、源代碼:

      #include #include #include void menu(){ cout<<“*********************菜單*********************”<

      1、先來先服務(wù)算法(FCFS)**********”<

      cout<<“******

      2、最短尋道時間優(yōu)先算法(SSTF)**********”<

      cout<<“******

      3、掃描算法(SCAN)**********”<

      cout<<“******

      4、循環(huán)掃描算法(CSCAN)**********”<

      cout<<“******

      5、退出 **********”<

      /*======================初始化序列=======================*/ void init(int queue[],int queue_copy[],int n){ int i;for(i=0;i

      //對當(dāng)前正在執(zhí)行的磁道號進(jìn)行定位,返回磁道號小于當(dāng)前磁道中最大的一個 int fix(int queue[], int n, int headstarts){ int i =0;while(iqueue[i]){ i++;} if(i>n-1)return n-1;//當(dāng)前磁道號大于磁盤請求序列中的所有磁道 if(i==0)return-1;//當(dāng)前磁道號小于磁盤請求序列中的所有磁道 else return i-1;//返回小于當(dāng)前磁道號中最大的一個 } /*=================使用冒泡算法從小到大排序==============*/ int *bubble(int queue[],int m){ int i,j;int temp;for(i=0;i queue[j]){ temp=queue[i];queue[i]=queue[j];queue[j]=temp;} } cout<<“排序后的磁盤序列為:”;for(i=0;i

      /* ====================以下是FCFS算法==================*/ void FCFS(int queue[],int n,int diskrode,int headstarts)//queue是請求調(diào)度序列,n為其個數(shù),diskroad為磁盤磁道數(shù),headstarts為正在調(diào)度的磁道 { cout<<“************以下為FCFS調(diào)度算法***********”<queue[0])count +=headstarts-queue[0];else count+=queue[0]-headstarts;cout<<“調(diào)度序列為: ”;cout<queue[i+1])count +=queue[i]-queue[i+1];else count +=queue[i+1]-queue[i];} cout<

      /*=====================SSTF算法====================*/ void SSTF(int queue[], int n, int diskrode, int headstarts){ int k=1;int l,r;int i,j,count=0;queue =bubble(queue,n);cout<<“************以下為SSTF調(diào)度算法***********”<=0;i--)cout<=headstarts)//若當(dāng)前磁道號小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務(wù) { cout<<“磁盤掃描序列為: ”;cout<queue[0] && headstarts =0)&&(r

      -headstarts)){ cout<=0;j--){ cout<

      /*======================以下是SCAN算法====================*/ void SCAN(int queue[], int n, int diskrode, int headstarts){ int direction, i, fixi;cout<<“***********以下是SCAN調(diào)度算法*************”<>direction;double count=0;*bubble(queue,n);fixi = fix(queue,n,headstarts);cout<=0;i--){ cout<=0;i--)//從大到小 { cout<-1;i--){ cout<-1;i--)//從大到小 { cout<

      /*======================以下是CSCAN算法====================*/ void CSCAN(int queue[],int n,int diskrode,int headstarts){ int direction,i,fixi;cout<<“***********以下是CSCAN調(diào)度算法*************”<>direction;int count=0;//count表示磁道移動的長度 *bubble(queue,n);fixi=fix(queue,n,headstarts);cout<<“調(diào)度序列為: ”<-1;--i){ cout<-1;--i){ cout<-1;i--){ cout<fixi;i--){ cout<

      void main(){ int n, i, diskrode, headstarts;//n表示調(diào)度磁盤請求序列queue的長度,diskrode表示磁盤磁道的個數(shù),headstarts表示目前正在調(diào)度的磁道; cout<<“請輸入磁盤的總磁道數(shù):”<> diskrode;cout<<“請輸入磁盤調(diào)度請求序列個數(shù):”<>n;int *queue;queue =(int*)malloc(n*sizeof(int));//給quneue數(shù)組分配空間...int *queue_copy;queue_copy =(int*)malloc(n*sizeof(int));cout<<“請依次輸入該序列的值:”<>queue[i];for(i=0;i>headstarts;int menux;menu();cout<<“請按菜單選擇,輸入相應(yīng)的數(shù)字: ”;cin>>menux;while(menux!=0){ if(menux ==1)FCFS(queue,n,diskrode,headstarts);

      if(menux ==2)SSTF(queue,n,diskrode,headstarts);

      if(menux ==3)SCAN(queue,n,diskrode,headstarts);if(menux ==4)CSCAN(queue,n,diskrode,headstarts);if(menux ==5)cout<<“程序結(jié)束,謝謝使用!”<>menux;cout<

      第四篇:電梯調(diào)度算法總結(jié)

      1.傳統(tǒng)電梯調(diào)度算法

      1.1先來先服務(wù)算法(FCFS)

      先來先服務(wù)(FCFS-First Come First Serve)算法,是一種隨即服務(wù)算法,它不僅僅沒有對尋找樓層進(jìn)行優(yōu)化,也沒有實(shí)時性的特征,它是一種最簡單的電梯調(diào)度算法。它根據(jù)乘客請求乘坐電梯的先后次序進(jìn)行調(diào)度。此算法的優(yōu)點(diǎn)是公平、簡單,且每個乘客的請求都能依次地得到處理,不會出現(xiàn)某一乘客的請求長期得不到滿足的情況[12]。這種方法在載荷較輕松的環(huán)境下,性能尚可接受,但是在載荷較大的情況下,這種算法的性能就會嚴(yán)重下降,甚至惡化。人們之所以研究這種在載荷較大的情況下幾乎不可用的算法,有兩個原因:

      (1)任何調(diào)度算法在請求隊(duì)列長度為1時,請求速率極低或相鄰請求的間隔為無窮大時使用先來先服務(wù)算法既對調(diào)度效率不會產(chǎn)生影響,而且實(shí)現(xiàn)這種算法極其簡單。

      (2)先來先服務(wù)算法可以作為衡量其他算法的標(biāo)準(zhǔn)。

      1.2最短尋找樓層時間優(yōu)先算法(SSTF)

      最短尋找樓層時間優(yōu)先(SSTF-Shortest Seek Time First)[14]算法,它注重電梯尋找樓層的優(yōu)化。最短尋找樓層時間優(yōu)先算法選擇下一個服務(wù)對象的原則是最短尋找樓層的時間。這樣請求隊(duì)列中距當(dāng)前能夠最先到達(dá)的樓層的請求信號就是下一個服務(wù)對象。在重載荷的情況下,最短尋找樓層時間優(yōu)先算法的平均響應(yīng)時間較短,但響應(yīng)時間的方差較大,原因是隊(duì)列中的某些請求可能長時間得不到響應(yīng),出現(xiàn)所謂的“餓死”現(xiàn)象。

      1.3掃描算法(SCAN)

      掃描算法(SCAN)是一種按照樓層順序依次服務(wù)請求,它讓電梯在最底層和最頂層之間連續(xù)往返運(yùn)行,在運(yùn)行過程中響應(yīng)處在于電梯運(yùn)行方向相同的各樓層上的請求。它進(jìn)行尋找樓層的優(yōu)化,效率比較高,但它是一個非實(shí)時算法。掃描算法較好地解決了電梯移動的問題,在這個算法中,每個電梯響應(yīng)乘客請求使乘客獲得服務(wù)的次序是由其發(fā)出請求的乘客的位置與當(dāng)前電梯位置之間的距離來決定的,所有的與電梯運(yùn)行方向相同的乘客的請求在一次電向上運(yùn)行或向下運(yùn)行的過程中完成,免去了電梯頻繁的來回移動[2]。掃描算法的平均響應(yīng)時間比最短尋找樓層時間優(yōu)先算法長,但是響應(yīng)時間方差比最短尋找樓層時間優(yōu)先算法小,從統(tǒng)計(jì)學(xué)角度來講,掃描算法要比最短尋找樓層時間優(yōu)先算法穩(wěn)定。

      1.4 LOOK 算法

      LOOK算法[18]是掃描算法的一種改進(jìn)。對LOOK算法而言,電梯同樣在最底層和最頂層之間運(yùn)行。但當(dāng)LOOK算法發(fā)現(xiàn)電梯所移動的方向上不再有請求時立即改變運(yùn)行方向,而掃描算法則需要移動到最底層或者最頂層時才改變運(yùn)行方向。

      1.5 SAFT 算法

      SATF(Shortest Access Time First)[15,19]算法與SSTF算法的思想類似,唯一的區(qū)別就是SATF算法將SSTF算法中的尋找樓層時間改成了訪問時間。這是因?yàn)殡娞菁夹g(shù)發(fā)展到今天,尋找樓層的時間已經(jīng)有了很大地改進(jìn),但是電梯的運(yùn)行當(dāng)中等待乘客上梯時間卻不是人為可以控制。SATF算法考慮到了電梯運(yùn)行過程中乘客上梯時間的影響。實(shí)時電梯調(diào)度算法

      2.1最早截止期優(yōu)先調(diào)度算法

      最早截止期優(yōu)先(EDF-Earliest Deadline First)[16]調(diào)度算法是最簡單的實(shí)時電梯調(diào)度算法,它的缺點(diǎn)就是造成電梯任意地尋找樓層,導(dǎo)致極低的電梯吞吐率。它與FCFS調(diào)度算法類似,EDF算法是電梯實(shí)時調(diào)度算法中最簡單的調(diào)度算法。它響應(yīng)請求隊(duì)列中時限最早的請求,是其它實(shí)時電梯調(diào)度算法性能衡量的基準(zhǔn)和特例。

      2.2 SCAN-EDF 算法

      SCAN-EDF[16]算法是SCAN算法和EDF算法相結(jié)合的產(chǎn)物。SCAN-EDF算法先按照EDF算法選擇請求列隊(duì)中哪一個是下一個服務(wù)對象,而對于具有相同時限的請求,則按照SCAN算法服務(wù)每一個請求。它的效率取決于有相同deadline 的數(shù)目,因而效率是有限的。

      2.3 PI 算法

      PI(Priority Inversion)[16]算法將請求隊(duì)列中的請求分成兩個優(yōu)先級,它首先保證高優(yōu)先級隊(duì)列中的請求得到及時響應(yīng),再搞優(yōu)先級隊(duì)列為空的情況下在相應(yīng)地優(yōu)先級隊(duì)列中的請求。

      2.4 FD-SCAN 算法

      FD-SCAN(Feasible Deadline SCAN)[17]算法首先從請求隊(duì)列中找出時限最早、從當(dāng)前位置開始移動又可以買足其時限要求的請求,作為下一次SCAN的方向。并在電梯所在樓層向該請求信號運(yùn)行的過程中響應(yīng)處在與電梯運(yùn)行方向相同且電梯可以經(jīng)過的請求信號。這種算法忽略了用SCAN算法相應(yīng)其它請求的開銷,因此并不能確保服務(wù)對象時限最終得到滿足。電梯調(diào)度的高水平研究

      以上兩個小結(jié)介紹了幾種在目前本人的能力上能進(jìn)行研究的、簡單的電梯調(diào)度算法。但是并不是說目前電梯調(diào)度只發(fā)展到這個層次。目前電梯的控制技術(shù)已經(jīng)進(jìn)入了電梯群控的時代。

      隨著微機(jī)在電梯系統(tǒng)中的應(yīng)用和人工智能技術(shù)的發(fā)展,智能群控技術(shù)得以迅速發(fā)展起來。由此,電梯的群控方面陸續(xù)發(fā)展出了一批新方法,包括:基于專家系統(tǒng)的電梯群控方法、基于模糊邏輯的電梯群控方法、基于遺產(chǎn)算法的電梯群控方法、基于勝景網(wǎng)絡(luò)的電梯群控方法和基于模糊神經(jīng)網(wǎng)絡(luò)的電梯群控方法。4 電梯問題的需求分析

      4.1 電梯的初始狀態(tài)

      本人設(shè)置的電梯的初始狀態(tài),是對住宅樓的電梯的設(shè)置。

      (1)建筑共有21層,其中含有地下一層(地下一層為停車場及貨物運(yùn)送場所)。

      (2)建筑內(nèi)部設(shè)有兩部電梯,編號分別為A梯、B梯。

      (3)電梯內(nèi)部有23個按鈕,其中包括開門按鈕、關(guān)門按鈕和樓層按鈕,編號為-1,1,2,3,4……20。

      (4)電梯外部含有兩個按鈕,即向上運(yùn)行按鈕和向下運(yùn)行按鈕。建筑頂層與地下一層例外,建筑頂層只設(shè)置有向下運(yùn)行按鈕,地下一層只設(shè)置有向上運(yùn)行按鈕。

      (5)電梯開關(guān)門完成時間設(shè)定為1秒。電梯到達(dá)每層后上下人的時間設(shè)定為8秒。電梯從靜止開始運(yùn)行到下一層的時間設(shè)置為2秒,而運(yùn)行中通過一層的時間為1秒。

      (6)在凌晨2:00——4:30之間,如若沒有請求信號,A梯自動停在14層,B梯自動停在6層。

      (7)當(dāng)電梯下到-1層后,如果沒有請求信號,電梯自動回到1層

      4.2 電梯按鈕功能

      電梯內(nèi)部的樓層按鈕:電梯內(nèi)部對應(yīng)每一個樓層的按鈕成為樓層按鈕,即本章第一結(jié)提到的編號為-1,1,2,3,4……20的按鈕。當(dāng)乘客進(jìn)入電梯后按下樓層按鈕,此按鈕顯示灰色,代表不可以用。這樣就表示乘客將要去往此層,電梯將開往相應(yīng)層。當(dāng)電梯到達(dá)該層后,按鈕恢復(fù)可以使用狀態(tài)。

      電梯內(nèi)部開門按鈕:當(dāng)電梯達(dá)到乘客想要去往的某樓層后,乘客需要準(zhǔn)備離開電梯,當(dāng)電梯停穩(wěn)后,乘客可以按下開門按鈕,電梯門將打開,讓用戶離開。如若電梯到了乘客曾經(jīng)按下的樓層,但是無乘客按開門按鈕,電梯將自動在停穩(wěn)后1秒后自動開門。

      電梯內(nèi)部關(guān)門按鈕:當(dāng)所有想要乘坐電梯的乘客都進(jìn)入電梯以后,準(zhǔn)備讓電梯開始運(yùn)行的時候,乘客需要按下關(guān)門按鈕,讓電梯門關(guān)閉,使電梯進(jìn)入運(yùn)行狀態(tài)。設(shè)置電梯的自動關(guān)門時間為8秒。

      電梯外部向上按鈕:此按鈕表示上樓請求,當(dāng)按下此按鈕時,如果電梯到達(dá)按下此按鈕的樓層,且電梯運(yùn)行方向是向上的,那么電梯響將停下,并在電梯停穩(wěn)之后自動開門,此請求被響應(yīng)后,取消此請求信號。電梯外部向下按鈕:此按鈕表示下樓請求,當(dāng)按下此按鈕時,如果電梯到達(dá)按下此按鈕的樓層,且電梯運(yùn)行方向是向下的,那么電梯響將停下,并在電梯停穩(wěn)之后自動開門,此請求被響應(yīng)后,取消此請求信號。

      第五篇:操作系統(tǒng)課程設(shè)計(jì),磁盤調(diào)度算法范文

      沈陽理工大學(xué)課程設(shè)計(jì)專用紙 Noi

      目 錄 1 課程設(shè)計(jì)目的及要求……………………………………………………錯誤!未定義書簽。2 相關(guān)知識…………………………………………………………………錯誤!未定義書簽。3 題目分析…………………………………………………………………2 4 概要設(shè)計(jì)…………………………………………………………………2 4.1 先來先服務(wù)(FCFS)的設(shè)計(jì)思想……………………………….2 4.2 最短尋道時間優(yōu)先調(diào)度(SSTF)的設(shè)計(jì)思想…………………..2 4.3 掃描算法(SCAN)的設(shè)計(jì)思想…………………………………2 4.4 循環(huán)掃描(CSCAN)的設(shè)計(jì)思想………………………………..2 5 代碼及流程………………………………………………………………3 5.1 流程圖……………………………………………………………...3 5.2 源代碼……………………………………………………………...8 6 運(yùn)行結(jié)果…………………………………………………………………16 7 設(shè)計(jì)心得…………………………………………………………………19 參考文獻(xiàn)…………………………………………………………………………19

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No1 1 課程設(shè)計(jì)目的及要求

      設(shè)計(jì)目的:加深對操作系統(tǒng)原理的進(jìn)一步認(rèn)識,加強(qiáng)實(shí)踐動手能力和程序開發(fā)能力的培養(yǎng),提高分析問題解決問題的能力,培養(yǎng)合作精神,以鞏固和加深磁盤調(diào)度的概念。操作系統(tǒng)是一門工程性很強(qiáng)的課程,它不僅要求學(xué)生掌握操作系統(tǒng)的工作原理和理論知識,也要求學(xué)生的實(shí)際動手能力,以加深對所學(xué)習(xí)內(nèi)容的理解,使學(xué)生熟練地掌握計(jì)算機(jī)的操作方法,使用各種軟件工具,加強(qiáng)對課程內(nèi)容的理解。這次課程設(shè)計(jì),就是通過模擬磁臂調(diào)度來加深對操作系統(tǒng)中磁臂調(diào)度概念的理解。使學(xué)生熟悉磁盤管理系統(tǒng)的設(shè)計(jì)方法;加深對所學(xué)各種磁盤調(diào)度算法的了解及其算法的特點(diǎn)。

      設(shè)計(jì)要求:編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度;要求設(shè)計(jì)主界面可以靈活選擇某算法,且以下算法都要實(shí)現(xiàn)

      1、先來先服務(wù)算法(FCFS)

      2、最短尋道時間優(yōu)先算法(SSTF)

      3、掃描算法(SCAN)

      4、循環(huán)掃描算法(CSCAN)相關(guān)知識

      數(shù)據(jù)結(jié)構(gòu):數(shù)組 now:當(dāng)前磁道號;

      array[]:放置磁道號的數(shù)組;

      void FCFS(int array[],int m)先來先服務(wù)算法(FCFS)void SSTF(int array[],int m)最短尋道時間優(yōu)先算法(SSTF)void SCAN(int array[],int m)掃描算法(SCAN)void CSCAN(int array[],int m)循環(huán)掃描算法(CSCAN)磁盤調(diào)度:當(dāng)有多個進(jìn)程都請求訪問磁盤時,采用一種適當(dāng)?shù)尿?qū)動調(diào)度算法,使各進(jìn)程對磁盤的平均訪問(主要是尋道)時間最小。目前常用的磁盤調(diào)度算法有:1)閑來先服務(wù)2)最短尋道時間優(yōu)先3)掃描算法4)循環(huán)掃描算法等

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No2 3 題目分析

      選擇一個自己熟悉的計(jì)算機(jī)系統(tǒng)和程序設(shè)計(jì)語言模擬操作系統(tǒng)基本功能的設(shè)計(jì)方法及其實(shí)現(xiàn)過程

      完成各分項(xiàng)功能。在算法的實(shí)現(xiàn)過程中,要求可決定變量應(yīng)是動態(tài)可變的;同時模塊應(yīng)該有一個合理的輸出結(jié)果。具體可參照實(shí)驗(yàn)的程序模擬.各功能程序要求自行編寫程序?qū)崿F(xiàn),不得調(diào)用現(xiàn)有操作系統(tǒng)提供的模塊或功能函數(shù)。磁盤調(diào)度程序模擬。先來先服務(wù)調(diào)度算法.最短尋道時間優(yōu)先調(diào)度,循環(huán)(SCAN)調(diào)度算法。程序設(shè)計(jì)語言自選,最終以軟件(含源代碼以及執(zhí)行程序)和設(shè)計(jì)報(bào)告的形式提交課程設(shè)計(jì)結(jié)果.。磁盤調(diào)度讓有限的資源發(fā)揮更大的作用。在多道程序設(shè)計(jì)的計(jì)算機(jī)系統(tǒng)中,各個進(jìn)程可能會不斷提出不同的對磁盤進(jìn)行讀/寫操作的請求。由于有時候這些進(jìn)程的發(fā)送請求的速度比磁盤響應(yīng)的還要快,因此我們有必要為每個磁盤設(shè)備建立一個等待隊(duì)列。概要設(shè)計(jì)

      1.先來先服務(wù)(FCFS)的設(shè)計(jì)思想

      即先來的請求先被響應(yīng)。FCFS策略看起來似乎是相當(dāng)“公平”的,但是當(dāng)請求的頻率過高的時候FCFS策略的響應(yīng)時間就會大大延長。FCFS策略為我們建立起一個隨機(jī)訪問機(jī)制的模型,但是假如用這個策略反復(fù)響應(yīng)從里到外的請求,那么將會消耗大量的時間。為了盡量降低尋道時間,看來我們需要對等待著的請求進(jìn)行適當(dāng)?shù)呐判颍皇呛唵蔚氖褂肍CFS策略。這個過程就叫做磁盤調(diào)度管理。有時候fcfs也被看作是最簡單的磁盤調(diào)度算法。

      2.最短尋道時間優(yōu)先調(diào)度(SSTF)的設(shè)計(jì)思想

      最短時間優(yōu)先算法選擇這樣的進(jìn)程。要求訪問的磁道,與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時間最短。

      3.掃描算法(SCAN)的設(shè)計(jì)思想

      掃描(SCAN)調(diào)度算法:該算法不僅考慮到欲訪問 的磁道與當(dāng)前磁道間的距離,更優(yōu)先考慮的是磁頭當(dāng)前的移動方向。例如,當(dāng)磁頭正在自里向外移動時,SCAN算法所考慮的下一個訪問對象,應(yīng)是其欲訪問的磁道,既在當(dāng)前磁道之外,又是距離最近的。這樣自里向外的訪問,直至再無更外的磁道需要訪問時,才將磁道換向自外向里移動。這時,同樣也是每次選擇這樣的進(jìn)程來調(diào)度,也就是要訪問的當(dāng)前位置內(nèi)距離最近者,這樣,磁頭又逐步地從外向里移動,直至再無更里面的磁道要訪問,從而避免了出現(xiàn)“饑餓”現(xiàn)像。

      4.循環(huán)掃描(CSACN)的設(shè)計(jì)思想

      循環(huán)掃描(CSCAN)算法:當(dāng)磁頭剛從里向外移動而越過了某一磁道時,恰好又有一進(jìn)程請求訪問此磁道,這時,該里程就必須等待,為了減少這種延遲,CSCAN算法規(guī)定磁頭單向移動,而本實(shí)驗(yàn)過程中我們所設(shè)計(jì)的是磁頭從里向外移動,而從外向里移動時只須改方向而已,本實(shí)驗(yàn)未實(shí)現(xiàn)。但本實(shí)驗(yàn)已完全能演示循環(huán)掃描的全過程。

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No3 5 代碼及流程

      1.先來先服務(wù)(FCFS)

      圖 1—1 FCFS的流程圖

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No4 2.最短尋道時間優(yōu)先調(diào)度(SSTF)

      圖1—2 SSTF的流程圖

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No5 3.掃描算法(SCAN)

      圖1—3 SCAN的流程圖

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No6 4.循環(huán)掃描(CSCAN)

      圖1—4 CSCAN的流程圖

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No7

      圖1—5 主函數(shù)的流程圖

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No8 源代碼:

      #include“stdio.h” #include“stdlib.h” //#include“iostream.h” #define maxsize 100 //定義最大數(shù)組域

      //先來先服務(wù)調(diào)度算法 void FCFS(int array[],int m){ int sum=0,j,i;int avg;printf(“n FCFS調(diào)度結(jié)果: ”);for(i=0;i

      } avg=sum/(m-1);//計(jì)算平均尋道長度 printf(“n 移動的總道數(shù): %d n”,sum);printf(“平均尋道長度: %d n”,avg);}

      //最短尋道時間優(yōu)先調(diào)度算法 void SSTF(int array[],int m){ int temp;int k=1;int now,l,r;int i,j,sum=0;int avg;for(i=0;iarray[j])//兩磁道號之間比較 { temp=array[i];

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No9 array[i]=array[j];array[j]=temp;} } } for(i=0;i

      for(i=m-1;i>=0;i--)//將數(shù)組磁道號從大到小輸出 printf(“%d ”,array[i]);sum=now-array[0];//計(jì)算移動距離 } else if(array[0]>=now)//判斷整個數(shù)組里的數(shù)是否都大于當(dāng)前磁道號 {

      for(i=0;i=0)&&(r

      printf(“%d ”,array[l]);sum+=now-array[l];//計(jì)算移動距離 now=array[l];l=l-1;} else

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No10 {

      printf(“%d ”,array[r]);sum+=array[r]-now;//計(jì)算移動距離 now=array[r];r=r+1;} } if(l=-1){

      for(j=r;j

      printf(“%d ”,array[j]);} sum+=array[m-1]-array[0];//計(jì)算移動距離 } else {

      for(j=l;j>=0;j--){

      printf(“%d ”,array[j]);} sum+=array[m-1]-array[0];//計(jì)算移動距離 } } avg=sum/m;printf(“n 移動的總道數(shù): %d n”,sum);printf(“平均尋道長度: %d n”,avg);} //掃描算法

      void SCAN(int array[],int m)//先要給出當(dāng)前磁道號和移動臂的移動方向 { int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;iarray[j])//對磁道號進(jìn)行從小到大排列

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No11 { temp=array[i];array[i]=array[j];array[j]=temp;} } } for(i=0;i

      printf(“n SCAN調(diào)度結(jié)果: ”);for(i=m-1;i>=0;i--){ printf(“%d ”,array[i]);//將數(shù)組磁道號從大到小輸出 } sum=now-array[0];//計(jì)算移動距離 } else if(array[0]>=now)//判斷整個數(shù)組里的數(shù)是否都大于當(dāng)前磁道號 {

      printf(“n SCAN調(diào)度結(jié)果: ”);for(i=0;i

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No12 { for(j=l;j>=0;j--){ printf(“%d ”,array[j]);} for(j=r;j=0;j--){ printf(“%d ”,array[j]);} sum=-now-array[0]+2*array[m-1];//計(jì)算移動距離 }//磁道號增加方向 } avg=sum/m;printf(“n 移動的總道數(shù): %d n”,sum);printf(“平均尋道長度: %d n”,avg);}

      //循環(huán)掃描算法

      void CSCAN(int array[],int m){ int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;iarray[j])//對磁道號進(jìn)行從小到大排列

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No13 { temp=array[i];array[i]=array[j];array[j]=temp;} } } for(i=0;i

      printf(“n CSCAN調(diào)度結(jié)果: ”);for(i=0;i

      printf(“%d ”,array[i]);//將磁道號從小到大輸出 } sum=now-array[0]+array[m-1];//計(jì)算移動距離 } else if(array[0]>=now)//判斷整個數(shù)組里的數(shù)是否都大于當(dāng)前磁道號 {

      printf(“n CSCAN調(diào)度結(jié)果: ”);for(i=0;i

      printf(“%d ”,array[i]);//將磁道號從小到大輸出 } sum=array[m-1]-now;//計(jì)算移動距離 } else { while(array[k]

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No14 { for(j=l;j>=0;j--){ printf(“%d ”,array[j]);} for(j=m-1;j>=r;j--){ printf(“%d ”,array[j]);} sum=2*(array[m-1]-array[0])-array[r]+now;//計(jì)算移動距離 }//磁道號減小方向 else { for(j=r;j

      // 操作界面 int main(){ int c;FILE *fp;//定義指針文件

      int cidao[maxsize];//定義磁道號數(shù)組 int i=0,count;fp=fopen(“cidao.txt”,“r+”);//讀取cidao.txt文件 if(fp==NULL)//判斷文件是否存在 { printf(“n 請 先 設(shè) 置 磁 道!n”);exit(0);} while(!feof(fp))//如果磁道文件存在

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No15 { fscanf(fp,“%d”,&cidao[i]);//調(diào)入磁道號 i++;} count=i-1;printf(“n-------------------n”);printf(“ 10-11OS課程設(shè)計(jì)--磁盤調(diào)度算法系統(tǒng)n”);printf(“

      計(jì)算機(jī)科學(xué)與技術(shù)二班n”);printf(“

      姓名:宋思揚(yáng)n”);printf(“

      學(xué)號:0803050203n”);printf(“

      電話:************n”);printf(“

      2010年12月29日n”);printf(“n-------------------n”);printf(“n 磁道讀取結(jié)果:n”);for(i=0;i

      1、先來先服務(wù)算法(FCFS)n”);printf(“

      2、最短尋道時間優(yōu)先算法(SSTF)n”);printf(“

      3、掃描算法(SCAN)n”);printf(“

      4、循環(huán)掃描算法(CSCAN)n”);printf(“ 5.退出n”);printf(“n”);printf(“請選擇:”);scanf(“%d”,&c);if(c>5)break;switch(c)//算法選擇 { case 1: FCFS(cidao,count);//先來先服務(wù)算法 printf(“n”);break;case 2: SSTF(cidao,count);//最短尋道時間優(yōu)先算法 printf(“n”);break;case 3:

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No16 SCAN(cidao,count);//掃描算法 printf(“n”);break;case 4: CSCAN(cidao,count);//循環(huán)掃描算法 printf(“n”);break;case 5: exit(0);} } return 0;} 6 運(yùn)行結(jié)果

      圖2—1 運(yùn)行界面

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No17

      圖2—2 運(yùn)行FCFS的界面

      圖2—3 運(yùn)行SSTF的界面

      圖2—4 運(yùn)行SCAN的界面

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No18

      圖2—5 運(yùn)行SCAN的界面

      圖2—6 運(yùn)行CSCAN的界面

      圖2—7 運(yùn)行CSCAN的界面

      沈陽理工大學(xué) 沈陽理工大學(xué)課程設(shè)計(jì)專用紙 No19 運(yùn)行結(jié)果: 四種磁盤調(diào)度運(yùn)行結(jié)果正確,與預(yù)期的相符。設(shè)計(jì)心得

      此次操作系統(tǒng)的課程設(shè)計(jì),從理論到實(shí)踐,在兩個星期的日子里,可以說是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。

      本次實(shí)驗(yàn)首先要了解磁盤調(diào)度的工作原理及四種調(diào)度方法的工作原理。在課程設(shè)計(jì)前的準(zhǔn)備工作時,先把這部分工作做完了。在設(shè)計(jì)總的程序框架的時候,要注意各功能模塊的位置,盡量做到簡潔、有序;各功能模塊與主程序要正確銜接。

      在設(shè)計(jì)的過程中遇到許多問題,我設(shè)計(jì)的是四種調(diào)度算法中的后兩種。例如:在最初程序設(shè)計(jì)時主要有兩種構(gòu)思:1)選用數(shù)據(jù)結(jié)構(gòu)是鏈表的。2)選用數(shù)組。我最初嘗試了用鏈表,覺得方便易懂,但是在循環(huán)掃描處出現(xiàn)了些問題,后來又轉(zhuǎn)變了設(shè)計(jì)思路,選用了數(shù)組,直接進(jìn)行排序,然后再聯(lián)系到各功能模塊。

      同時在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,自身知識的很多漏洞,看到了自己的實(shí)踐經(jīng)驗(yàn)還是比較缺乏,理論聯(lián)系實(shí)際的能力還急需提高。比如說編語言掌握得不好,應(yīng)用程序編寫不太會……通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識重新溫故。在此,也感謝在課程設(shè)計(jì)過程中幫我解惑的老師和同學(xué)。參考文獻(xiàn)

      [1] 《操作系統(tǒng)》

      人民郵電出版社

      宗大華 宗濤 陳吉人 編著

      [2] 《C語言程序設(shè)計(jì)》

      清華大學(xué)出版社

      馬秀麗 劉志嫵 李筠 編著 [3] 《操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 沈陽理工大學(xué)

      唐巍 菀勛 編著

      沈陽理工大學(xué)

      下載多級反饋隊(duì)列調(diào)度算法word格式文檔
      下載多級反饋隊(duì)列調(diào)度算法.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        實(shí)驗(yàn)報(bào)告六 磁盤調(diào)度算法

        實(shí)驗(yàn)報(bào)告六磁盤調(diào)度算法 班級:軟技2班學(xué)號:201467003084 姓名:劉道林 一.實(shí)驗(yàn)內(nèi)容:熟悉磁盤的結(jié)構(gòu)以及磁盤的驅(qū)動調(diào)度算法的模擬,編程實(shí)現(xiàn)簡單常用的磁盤驅(qū)動調(diào)度算法先來先服......

        短作業(yè)優(yōu)先調(diào)度算法

        《操作系統(tǒng)》課程實(shí)驗(yàn)報(bào)告 姓名:陳凱 學(xué)號:541413430202 地點(diǎn):四教樓301 指導(dǎo)老師:張旭 專業(yè)班級:嵌入式軟件14-02 實(shí)驗(yàn)名稱:短作業(yè)優(yōu)先調(diào)度算法 一、 實(shí)驗(yàn)?zāi)康模?測試數(shù)據(jù)可以隨......

        鏈隊(duì)列構(gòu)造函數(shù)算法LinkQueue(5篇)

        template LinkQueue::LinkQueue { s=new Node; s->next=NULL;//創(chuàng)建一個頭結(jié)點(diǎn)sfront=rear=s;//將隊(duì)頭指針和隊(duì)尾指針都指向頭結(jié)點(diǎn)s }......

        操作系統(tǒng)進(jìn)程調(diào)度算法模擬實(shí)驗(yàn)報(bào)告

        進(jìn)程調(diào)度算法模擬 專業(yè):XXXXX 學(xué)號:XXXXX 姓名:XXX 實(shí)驗(yàn)日期:20XX年XX月XX日 一、實(shí)驗(yàn)?zāi)康?通過對進(jìn)程調(diào)度算法的模擬加深對進(jìn)程概念和進(jìn)程調(diào)度算法的理解。 二、實(shí)驗(yàn)要求 編寫......

        調(diào)度信息化管理制度反饋意見

        調(diào)度信息化管理制度反饋意見 一、監(jiān)測監(jiān)控人員定位 第七條:上傳系統(tǒng)出現(xiàn)故障時,在公司監(jiān)控中心限定時間內(nèi)完成。 (是多少時間) 第11條錄像資料保存15天,達(dá)不到要求。(目前為7天) 第......

        單核與多核的CPU調(diào)度算法

        1. 多核CPU調(diào)度算法 1.1全局隊(duì)列調(diào)度算法 操作系統(tǒng)維護(hù)一個全局的任務(wù)等待隊(duì)列,每個進(jìn)程在執(zhí)行階段可以使用全部的處理器資源。當(dāng)系統(tǒng)中有一個CPU核心空閑時,操作系統(tǒng)就從全局......

        常用進(jìn)程調(diào)度算法的分析與評價(jià)

        常用進(jìn)程調(diào)度算法的分析與評價(jià)(一) 2009-10-31 22:48 進(jìn)程調(diào)度是按照某種調(diào)度算法從就緒狀態(tài)的進(jìn)程中選擇一個進(jìn)程到處理機(jī)上運(yùn)行。 進(jìn)程調(diào)度的兩種方式 : (1)非搶占調(diào)度方式......

        基于NSGA算法的公交車輛調(diào)度優(yōu)化模型

        基于NSGA算法的公交車輛調(diào)度優(yōu)化模型 宋曉鵬,韓印,姚佼 (上海理工大學(xué) 管理學(xué)院,上海200093) 摘要:公交車輛調(diào)度方案的優(yōu)化對于提高公交服務(wù)水平,促進(jìn)公交事業(yè)的快速發(fā)展至關(guān)重要。......