
for(i = 0; i < MAXQUEUE; i++) { |
queue[i].go = -1; |
queue[i].visited = 0; |
} |
start = 53; //磁头的初始位置 |
} |
//读入磁道号流 |
void readData() { |
FILE *fp; |
char fname[20]; |
int temp, i; |
cout << "请输入磁道号流文件名:"; |
strcpy(fname, "7hard.txt"); |
cin >> fname; |
if((fp = fopen(fname, "r")) == NULL) { |
cout << "错误,文件打不开,请检查文件名:)" << endl; |
} else { |
while(!feof(fp)) { |
fscanf(fp, "%d ", &temp); |
queue[quantity].go = temp; |
quantity++; |
} |
cout << endl << "---------------------------------------------" << endl; |
cout << "所读入的磁道号流:"; |
for(i = 0; i < quantity; i++) { |
cout << queue[i].go << " "; |
} |
cout << endl << "请求数为:" << quantity << endl; |
} |
} |
//FIFO算法 |
void FIFO() { |
int i; |
int total = 0; |
int current; |
cout << endl << "---------------------------------------------" << endl; |
cout << "FIFO算法的访问磁道号顺序流:"; |
current = start; |
for(i = 0; i < quantity; i++) { |
cout << queue[i].go << " "; |
total += abs(queue[i].go - current); |
current = queue[i].go; |
} |
cout << endl << "磁头移过的柱面数:" << total; |
} |
//最短寻道优先调度算法 |
void shortest() { |
int i, j, p; |
int total = 0; |
int current; |
cout << endl << "---------------------------------------------" << endl; |
cout << "最短寻道优先调度算法的访问磁道号顺序流:"; |
current = start; |
for(i = 0; i < quantity; i++) { |
p = 0; |
while(queue[p].visited != 0) { |
p++; |
} |
for(j = p; j < quantity; j++) { |
if((queue[j].visited == 0) && (abs(current - queue[p].go) > abs(current - queue[j].go))) { |
p = j; |
} |
} |
cout << queue[p].go << " "; |
total += abs(queue[p].go - current); |
queue[p].visited = 1; |
current = queue[p].go; |
} |
cout << endl << "磁头移过的柱面数:" << total; |
} |
//电梯算法 |
void elevator() { |
int i, j, p, flag; |
int total = 0; |
int current; |
cout << endl << "---------------------------------------------" << endl; |
cout << "电梯调度算法" << endl; |
//磁头初始向里 |
cout << "磁头初始向里的访问磁道号顺序流:"; |
current = start; |
for(i = 0; i < quantity; i++) { |
flag = 1000; |
p = -1; |
for(j = 0; j < quantity; j++) { |
if((queue[j].visited == 0) && (queue[j].go >= current)) { |
if(abs(queue[j].go - current) < flag) { |
p = j; |
flag = abs(queue[j].go - current); |
} |
} |
} |
if(p != -1) { |
cout << queue[p].go << " "; |
total += abs(queue[p].go - current); |
current = queue[p].go; |
queue[p].visited = 1; |
} else { |
for(j = 0; j < quantity; j++) { |
if((queue[j].visited == 0) && (queue[j].go < current)) { |
if(abs(queue[j].go - current) < flag) { |
p = j; |
flag = abs(queue[j].go - current); |
} |
} |
} |
cout << queue[p].go << " "; |
total += abs(queue[p].go - current); |
current = queue[p].go; |
queue[p].visited = 1; |
} |
} |
cout << endl << "磁头移过的柱面数:" << total << endl; |
//磁头初始向外 |
for(i = 0; i < quantity; i++) { |
queue[i].visited = 0; |
} |
total = 0; |
cout << "磁头初始向外的访问磁道号顺序流:"; |
current = start; |
for(i = 0; i < quantity; i++) { |
flag = 1000; |
p = -1; |
for(j = 0; j < quantity; j++) { |
if((queue[j].visited == 0) && (queue[j].go <= current)) { |
if(abs(queue[j].go - current) < flag) { |
p = j; |
flag = abs(queue[j].go - current); |
} |
} |
} |
if(p != -1) { |
cout << queue[p].go << " "; |
total += abs(queue[p].go - current); |
current = queue[p].go; |
queue[p].visited = 1; |
} else { |
for(j = 0; j < quantity; j++) { |
if((queue[j].visited == 0) && (queue[j].go > current)) { |
if(abs(queue[j].go - current) < flag) { |
p = j; |
flag = abs(queue[j].go - current); |
} |
} |
} |
cout << queue[p].go << " "; |
total += abs(queue[p].go - current); |
current = queue[p].go; |
queue[p].visited = 1; |
} |
} |
cout << endl << "磁头移过的柱面数:" << total; |
} |
//显示版权信息函数 |
void version() { |
cout << endl << endl; |
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━┓" << endl; |
cout << " ┃ 磁盘调度算法系统 ┃" << endl; |
cout << " ┠───────────────────────┨" << endl; |
cout << " ┃ (c)All Right Reserved Neo ┃" << endl; |
cout << " ┃ sony006@163.com ┃" << endl; |
cout << " ┃ version 2004 build 1122 ┃" << endl; |
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━┛" << endl; |
cout << endl << endl; |
} |
void main() { |
int i; |
version(); |
initial(); |
readData(); |
FIFO(); |
shortest(); |
for(i = 0; i < quantity; i++) { |
queue[i].visited = 0; |
} |
elevator(); |
} |



