/*
磁盘调度
磁盘的调度策略称为“驱动调度”。磁盘驱动调度由“移臂调度”和“旋转调度”两部分组成。
1。移臂调度:根据访问者指定的柱面位置来决定执行次序的调度,称为“移臂调度”。移臂调度的目的是尽可能的
减少操作中的寻找时间。
1》先来先服务调度算法:该算法不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次
序。
2》最短寻找时间优先调度算法:该算法总是从等待访问着中挑选寻找时间最短的那个请求先执行,而不考虑访
问者到来的先后次序。
3》电梯调度算法:该算法是从移臂当前位置开始沿着臂移动方向去选择离当前移臂最近的那个访问者,如果沿
移臂的移动方向无请求访问时,就改变臂的移动方向再选择。
1)移动臂由里向外移动; 2)移动臂由外向里移动。
4》单向扫描调度算法:该算法的基本思想是,不考虑访问者等待的先后次序,总是从 0 号柱面开始向里道扫描,
按照各自所要访问柱面
位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到 0 号柱面,返回时不为任何访问者
等待服务。在返回到 0 号柱
面后再次进行扫描。注意:移动臂到达最后一个柱面后,返回到 0 号柱面所经过的磁到数不记在磁到扫描数中!!!
2。旋转调度
磁盘调度算法
要求:
1。实现三种算法:
先来先服务; 最短寻道优先(老师会给当前磁头的位置); 电梯算法
2。磁道服务顺序从指定的文本文件(TXT 文件)中取出
3。输入访问磁道流为 130 199 32 159 15 148 61 99,磁头位置为:50
输出: 第一行:磁道的服务顺序 ;第二行:显示移动总道数
本程序包括:FIFO,最短寻道优先调度算法,电梯算法
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
# define MAXQUEUE 200 //申明最大磁道号
typedef struct node
{ //结构体定义
int go; //磁道号(大于 0,小于 MAXQUEUE)
int visited; //磁道访问标志(0——为访问;1——已访问)
}qu;
qu queue[MAXQUEUE]; //定义磁道数组
int quantity; //磁道记数器
int start; //定义开始时磁头所在位置
void initial()
{ //初始化函数
int i;
for(i = 0; i < MAXQUEUE; i++)
{
queue[i].go = -1;
queue[i].visited = 0;
}
start = 50; //磁头的初始位置
}
void reset()
{ //重置磁道访问标志信息
int i;
for(i = 0; i < quantity; i++)
{
queue[i].visited = 0;
}
}
void readData()
{ //读入磁道号流
FILE *fp;
char fname[20];
int temp, i;
printf("请输入磁道号流文件名:");