-
大小: 1.16MB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2023-09-27
- 語(yǔ)言: 其他
- 標(biāo)簽: 磁盤調(diào)度??
資源簡(jiǎn)介
1、對(duì)于如下給定的一組磁盤訪問(wèn)進(jìn)行調(diào)度:
請(qǐng)求服務(wù)到達(dá) A B C D E F G H I J K
訪問(wèn)的磁道號(hào) 30 50 100 180 20 90 150 70 80 10 160
2、要求分別采用先來(lái)先服務(wù)、最短尋道優(yōu)先以及電梯調(diào)度方法進(jìn)行調(diào)度。
3、要求給出每種算法中磁盤訪問(wèn)的順序,計(jì)算出平均移動(dòng)道數(shù)。
4、假定當(dāng)前讀寫(xiě)頭在90號(hào),向磁道號(hào)增加的方向移動(dòng)。

代碼片段和文件信息
#include
#include
using?namespace?std;
typedef?struct?node
{
int?data;
struct?node?*next;
}Node;
void?main()
{
void?fcfs(Node?*intint);//聲明先來(lái)先服務(wù)函數(shù)FCFS
void?sstf(Node?*intint);//聲明最短尋道時(shí)間優(yōu)先函數(shù)SSTF
void?scan(Node?*intint);//聲明掃描函數(shù)SCAN
void?print(Node?*);????//輸出鏈表函數(shù)
Node?*head*p*q;??????//建立一個(gè)鏈表
int?itc=0fs;????????//c為鏈表長(zhǎng)度f(wàn)是開(kāi)始的磁道號(hào)s是選擇哪個(gè)算法
head=(Node?*)malloc(sizeof(Node));
head->next=NULL;
q=head;
cout<<“????????????/**************磁盤調(diào)度算法***************/“< cout< cout<<“新建一個(gè)單鏈表以0作為結(jié)束標(biāo)志:“;
cin>>it;
while(it!=0)
{
p=(Node?*)malloc(sizeof(Node));
p->next=NULL;
p->data=it;
q->next=p;
q=p;
cin>>it;
c++;
}
cout<<“從幾號(hào)磁道開(kāi)始:“;
cin>>f;????????????????????//f為磁道號(hào)
print(head);
cout<<“鏈表長(zhǎng)度為:“< cout<<“1、先來(lái)先服務(wù)算法FCFS“< cout<<“2、最短尋道時(shí)間優(yōu)先算法SSTF“< cout<<“3、電梯調(diào)度算法(掃描算法SCAN)“< cout<<“0、退出“< cout<<“請(qǐng)選擇:“;
cin>>s;
while(s!=0)
{
????switch(s)
????{
????case?1:cout<<“你選擇了:先來(lái)先服務(wù)算法FCFS“< fcfs(?headcf);
break;
????case?2:cout<<“你選擇了:最短尋道時(shí)間優(yōu)先算法SSTF“< sstf(?headcf);
break;
????case?3:cout<<“你選擇了:電梯調(diào)度算法(掃描算法SCAN)“< scan(?headcf);
break;
????}
????cout<<“退出請(qǐng)選0繼續(xù)請(qǐng)選123:“;
????cin>>s;
}
}
/***********************************************************/
void?fcfs(Node?*headint?cint?f)//先來(lái)先服務(wù)算法
{
void?print(Node?*);
Node?*l;//*m*n;
float?num=0;?????????????//num為平均尋道長(zhǎng)度??????
l=head->next;
for(int?i=0;i {
num+=abs(l->data-f);
f=l->data;
l=l->next;
}
num=num/c;
cout<<“先來(lái)先服務(wù)的尋道順序是:“< print(head);
cout<<“平均尋道長(zhǎng)度:“< }
/*****************************************************************/
void?sstf(Node?*headint?cint?f)//最短尋道時(shí)間優(yōu)先算法
{
void?print(Node?*);
Node?*p*q*r*s*l*m;
l=(Node?*)malloc(sizeof(Node));
l->next=NULL;
m=l;
q=head;
p=head->next;
s=head;
r=head->next;
float?num=0;
for(int?i=0;i {
int?min=abs(f-r->data);
for(int?j=0;j {
p=p->next;
q=q->next;
if(abs(f-p->data) {
min=abs(f-p->data);
r=p;
s=q;
}
}
num+=abs(f-r->data);
f=r->data;
s->next=r->next;
r->next=NULL;
m->next=r;
m=r;
q=head;
p=head->next;
s=head;
r=head->next;
}
num=num/c;
cout<<“最短尋道時(shí)間優(yōu)先順序是:“< print(l);
cout<<“平均尋道長(zhǎng)度:“< }
/***************************************************************/
void?scan(Node?*headint?cint?f)//掃描算法(電梯調(diào)度算法)
{
void?print(Node?*);
int?minmaxi=0j=0;
float?num=0;
Node?*p*q*r*s*m*n*x*y;?
r=(Node?*)malloc(sizeof(Node));//存放比開(kāi)始磁道小的磁道
r->next=NULL;
s=r;
m=(Node?*)malloc(sizeof(Node));//存放比開(kāi)始磁道大的磁道
m->next=NULL;
n=m;
x=(Node?*)malloc(sizeof(Node));
x->next=NULL;
y=x;
q=head;
p=head->next;
while(p->next!=NULL)
{
if(p->data-f>0)
{
q->next=p->next;
p->next=NULL;
n->next=p;
n=p;
p=q->next;
i++;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-06-08?17:44??磁盤調(diào)度\
?????文件????????4877??2011-06-08?17:52??磁盤調(diào)度\cpdd.cpp
?????文件????????3377??2011-06-09?14:30??磁盤調(diào)度\cpdd.dsp
?????文件?????????533??2011-06-09?15:07??磁盤調(diào)度\cpdd.dsw
?????文件???????41984??2011-06-09?15:07??磁盤調(diào)度\cpdd.ncb
?????文件???????48640??2011-06-09?15:07??磁盤調(diào)度\cpdd.opt
?????文件?????????242??2011-06-09?14:30??磁盤調(diào)度\cpdd.plg
?????目錄???????????0??2011-06-08?17:52??磁盤調(diào)度\Debug\
?????文件??????548925??2011-06-08?17:52??磁盤調(diào)度\Debug\cpdd.exe
?????文件??????789892??2011-06-08?17:52??磁盤調(diào)度\Debug\cpdd.ilk
?????文件??????259801??2011-06-08?17:52??磁盤調(diào)度\Debug\cpdd.obj
?????文件?????2012472??2011-06-08?17:52??磁盤調(diào)度\Debug\cpdd.pch
?????文件?????1090560??2011-06-08?17:52??磁盤調(diào)度\Debug\cpdd.pdb
?????文件???????74752??2011-06-09?14:30??磁盤調(diào)度\Debug\vc60.idb
?????文件??????110592??2011-06-08?17:52??磁盤調(diào)度\Debug\vc60.pdb
?????文件??????261632??2011-06-08?17:48??磁盤調(diào)度\操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度+存儲(chǔ)管理+磁盤調(diào)度++銀行家算法+文件系統(tǒng)設(shè)計(jì)).doc
評(píng)論
共有 條評(píng)論