版權(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)度算法先來先服務(wù)(FIFO)、電梯調(diào)度算法、最短尋找時間優(yōu)先算法、掃描(雙向掃描)算法、單向掃描(循環(huán)掃描)算法等。編程只需實現(xiàn)兩個算法。題目可以選取教材或習(xí)題中的相關(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)先服被務(wù)的跡象。循環(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工日志填寫樣本的格式要求
- 設(shè)計思維在醫(yī)療技術(shù)創(chuàng)新中的應(yīng)用
- 智能科技在家校互動中的應(yīng)用與前景展望
- DB4415T 50-2025黑芝麻種植技術(shù)規(guī)程
- 個人貸款合同協(xié)議書范本
- 親屬間房產(chǎn)贈與合同
- 二手建筑設(shè)備買賣合同樣本
- 乒乓球館租賃合同書范本
- 不可撤銷勞動合同案例析:勞動者權(quán)益保障
- 專業(yè)工作室服務(wù)合作合同樣本
- 數(shù)據(jù)中心運維方案
- 小龍蝦啤酒音樂節(jié)活動策劃方案課件
- 運動技能學(xué)習(xí)與控制課件第五章運動中的中樞控制
- 財務(wù)部規(guī)范化管理 流程圖
- 蘇教版2023年小學(xué)四年級數(shù)學(xué)下冊教學(xué)計劃+教學(xué)進度表
- 小學(xué)作文指導(dǎo)《難忘的一件事》課件
- 斷絕關(guān)系協(xié)議書范文參考(5篇)
- 量子力學(xué)課件1-2章-波函數(shù)-定態(tài)薛定諤方程
- 最新變態(tài)心理學(xué)課件
- 【自考練習(xí)題】石家莊學(xué)院概率論與數(shù)理統(tǒng)計真題匯總(附答案解析)
- 農(nóng)村集體“三資”管理流程圖
評論
0/150
提交評論