资源简介
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
- 上一篇:计算机网络课程设计,电子购物网站设计
- 下一篇:TabHost底部tab切换
相关资源
- 磁盘调度算法模拟有图形化界面
- 基于Linux的设备分配及磁盘调度
- 操作系统磁盘调度先来先服务、最短
- 操作系统磁盘调度课程设计
- 操作系统-SSTF磁盘调度算法模拟
- 扫描SCAN算法
- 磁盘调度先来先服务,最短寻道时间
- 磁盘调度算法实验报告
- 天津理工大学,操作系统实验报告*
- 磁盘调度算法.docx
- 磁盘调度算法课设及源码
- 磁盘调度源代码4种磁盘调度算法
- 操作系统磁盘调度算法
- 操作系统中模拟磁盘调度算法的源代
- 磁盘调度算法(最短寻道时间优先算
- 华农磁盘调度算法的模拟及对比
- 操作系统实验八 磁盘调度算法实验报
- 磁盘调度 分别采用先来先服务、最短
- 操作系统试验(三个,磁盘调度 进程
- 操作系统实验六 磁盘调度算法
- 计算机操作系统实验代码6个实验.ra
- 磁盘调度算法的实现
评论
共有 条评论