驱动调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

lel

1.实验目的

通过使用C、C++或Java,设计算法模拟磁盘驱动调度,从而熟悉并掌握各种磁盘驱动调度算法。

2.实验内容

(1)先来先服务(FCFS)算法:磁盘臂是随机移动的,不考虑各I/O请求之间的相对次序和移动臂当前所处的位置,进程等待I/O请求的时间会很长,寻到性能较差。

(2)电梯调度(ELEV ATOR)算法:磁盘柱面号通常由外向里递增,磁头越向外,所处的柱面号越小,反之越大。每次总是选择沿移动臂的方向最近的那个柱面,若同一柱面上有多个请求,还需要旋转优化。如果当前移动方向上没有访问请求时,就改变移动臂的移动方向,然后处理所遇到的最近的I/O请求。

(3)循环扫描(C-SCAN)算法:移动臂总是从0号柱面至最大柱面顺序扫描,然后直接返回0号柱面重复进行,归途中不再提供服务,构成一个循环,缩短处理新来请求的最大时延。(4)此外还有最短查找时间优先(SSTF)算法、扫描(SCAN)算法、分布扫描(N-STEP SCAN)算法。

3.源代码

主函数:propel.cpp

#include

using namespace std;

#include"ppl.h"

int main()

{

node *head;

int n,chioce;

system("color 9e");

cout<<"\n\n\n\t\t\t\t 驱动调度\n\n";

cout<<"\n\n\t\t\t 请输入访问请求的个数:\t";

cin>>n;

head=create(n);

do

{

system("cls");

system("color 69");

cout<<"\n\n\t\t\t\t 驱动调度\n\n\n\n";

cout<<"\t\t\t\t1.先来先服务FCFS算法\n\n";

cout<<"\t\t\t\t2.电梯调度ELEV ATOR算法\n\n";

cout<<"\t\t\t\t3.循环扫描C-SCAN算法\n\n";

cout<<"\t\t\t\t4.退出\n\n";

cout<<"\n\t\t\t\t\t\tEnter your choice:\t";

cin>>chioce;

system("cls");

switch(chioce)

{

case

1:cout<<"\n\n\t\t\t\t\tFCFS\n\n\n";print(head);break;

case 2:cout<<"\n\n\t\t\t\t ELEV ATOR\n\n\n";head=ELE(head);print(head);break;

case

3:cout<<"\n\n\t\t\t\t\tC-scan\n\n\n";head=C_scan(head);print(h ead);break;

case 4:system("cls");cout<<"\t\t\t\t\t\t\t\t\tlel\n\n\n\n\t\t\t\t 谢谢使用!\n\t\t\t\t\t\t";break;

default:cout<<"\n\n\t\t\t\twrong

choice !\n\n\n\t\t\t\t\t\t";break;

}

head=back(head);

cout<<"\n\n\t\t\t\t\t\t";

system("pause");

}

while(chioce!=4);

cout<<"\n\n\t\t\t\t\t\t";

return 0;

}

头文件:ppl.h

//**************************************定义结构体*******************************************

struct propel

{

char id;

int io[3];

propel *next;

};

//**************************************创建链表内容*****************************************

propel* create(int n)

{

propel *head,*tail,*p;

head=NULL;

for(int i=0;i

{

system("cls");

system("color de");

cout<<"\n\n\n\t\t\t\t访问请求\n\n\n";

cout<<"\t\t\t请输入请求"<

p=new propel;

cout<<"\n\t\t\t 柱面号:\t";

cin>>p->io[0];

cout<<"\n\t\t\t 磁道号:\t";

cin>>p->io[1];

cout<<"\n\t\t\t 物理块:\t";

cin>>p->io[2];

if(i==0)

p->id='A';

else p->id='A'+i;

cout<<"\n\n\t\t\t\t此访问请求详细信息为:\n\n\n";

cout<<"\t\t\t编号柱面号磁道号物理块\n";

cout<<"\t\t\t "<id<<" "<io[0]<<" "<io[1]<<" "<io[2]<

cout<<"\n\n\t\t\t\t\t\t";

system("pause");

if(!head) head=tail=p;

else

{

tail->next=p;

tail=p;

}

}

if(head) tail->next=NULL;

system("cls");

return head;

}

//**************************************链表显示

相关文档
最新文档