• 大小: 1.16MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-27
  • 语言: 其他
  • 标签: 磁盘调度  

资源简介

1、对于如下给定的一组磁盘访问进行调度: 请求服务到达 A B C D E F G H I J K 访问的磁道号 30 50 100 180 20 90 150 70 80 10 160 2、要求分别采用先来先服务、最短寻道优先以及电梯调度方法进行调度。 3、要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。 4、假定当前读写头在90号,向磁道号增加的方向移动。

资源截图

代码片段和文件信息

#include
#include
using namespace std;

typedef struct node
{
int data;
struct node *next;
}Node;
void main()
{
void fcfs(Node *intint);//声明先来先服务函数FCFS
void sstf(Node *intint);//声明最短寻道时间优先函数SSTF
void scan(Node *intint);//声明扫描函数SCAN
void print(Node *);    //输出链表函数
Node *head*p*q;      //建立一个链表
int itc=0fs;        //c为链表长度f是开始的磁道号s是选择哪个算法
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
q=head;
cout<<“            /**************磁盘调度算法***************/“< cout< cout<<“新建一个单链表以0作为结束标志:“;
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<<“从几号磁道开始:“;
cin>>f;                    //f为磁道号
print(head);
cout<<“链表长度为:“< cout<<“1、先来先服务算法FCFS“< cout<<“2、最短寻道时间优先算法SSTF“< cout<<“3、电梯调度算法(扫描算法SCAN)“< cout<<“0、退出“< cout<<“请选择:“;
cin>>s;
while(s!=0)
{
    switch(s)
    {
    case 1:cout<<“你选择了:先来先服务算法FCFS“< fcfs( headcf);
break;
    case 2:cout<<“你选择了:最短寻道时间优先算法SSTF“< sstf( headcf);
break;
    case 3:cout<<“你选择了:电梯调度算法(扫描算法SCAN)“< scan( headcf);
break;
    }
    cout<<“退出请选0继续请选123:“;
    cin>>s;
}
}
/***********************************************************/
void fcfs(Node *headint cint f)//先来先服务算法
{
void print(Node *);

Node *l;//*m*n;
float num=0;             //num为平均寻道长度      
l=head->next;
for(int i=0;i {
num+=abs(l->data-f);
f=l->data;
l=l->next;
}
num=num/c;
cout<<“先来先服务的寻道顺序是:“< print(head);
cout<<“平均寻道长度:“<}
/*****************************************************************/
void sstf(Node *headint cint f)//最短寻道时间优先算法
{
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<<“最短寻道时间优先顺序是:“< print(l);
cout<<“平均寻道长度:“<}
/***************************************************************/
void scan(Node *headint cint f)//扫描算法(电梯调度算法)
{
void print(Node *);
int minmaxi=0j=0;
float num=0;
Node *p*q*r*s*m*n*x*y; 
r=(Node *)malloc(sizeof(Node));//存放比开始磁道小的磁道
r->next=NULL;
s=r;
m=(Node *)malloc(sizeof(Node));//存放比开始磁道大的磁道
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++;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-06-08 17:44  磁盘调度\
     文件        4877  2011-06-08 17:52  磁盘调度\cpdd.cpp
     文件        3377  2011-06-09 14:30  磁盘调度\cpdd.dsp
     文件         533  2011-06-09 15:07  磁盘调度\cpdd.dsw
     文件       41984  2011-06-09 15:07  磁盘调度\cpdd.ncb
     文件       48640  2011-06-09 15:07  磁盘调度\cpdd.opt
     文件         242  2011-06-09 14:30  磁盘调度\cpdd.plg
     目录           0  2011-06-08 17:52  磁盘调度\Debug\
     文件      548925  2011-06-08 17:52  磁盘调度\Debug\cpdd.exe
     文件      789892  2011-06-08 17:52  磁盘调度\Debug\cpdd.ilk
     文件      259801  2011-06-08 17:52  磁盘调度\Debug\cpdd.obj
     文件     2012472  2011-06-08 17:52  磁盘调度\Debug\cpdd.pch
     文件     1090560  2011-06-08 17:52  磁盘调度\Debug\cpdd.pdb
     文件       74752  2011-06-09 14:30  磁盘调度\Debug\vc60.idb
     文件      110592  2011-06-08 17:52  磁盘调度\Debug\vc60.pdb
     文件      261632  2011-06-08 17:48  磁盘调度\操作系统实验(进程调度+存储管理+磁盘调度++银行家算法+文件系统设计).doc

评论

共有 条评论