实验要求:
C 语言读盘程序设计:块方式或文件方式 (电子版 )
(1). 写的代码要有注释说明。
(2). 要有运行结果截图。
(3). 以实验报告的形式提交。
输入 :磁头所在的位置以及对块的请求序列
输出 :对块的调度访问序列
算法 :你自己用 C 语言模拟一个读盘的调度算法
实验内容与算法分析:
NOOP 电梯算法实现了一个简单的 FIFO 队列 ,它像电梯的工作主法一样对 I/O 请求进
行组织 , 当有一个新的请求到来时 , 它将请求合并到最近的请求之后 , 以此来保证请求同一介
质 .NOOP 倾向饿死读而利于写 . 因为写请求比读请求更容易 . 写请求通过文件系统 cache,
不需要等一次写完成 , 就可以开始下一次写操作 , 写请求通过合并 , 堆积到 I/O 队列中 .读请求
需要等到它前面所有的读操作完成 , 才能进行下一次读操作 . 在读操作之间有几毫秒时间 , 而
写请求在这之间就到来 , 饿死了后面的读请求 .
实验运行记录
第一个参数为当前读取位置,后续参数为请求的数字
语言源码
#include <stdio.h>
#include <stdlib.h>
intcmp(const void *a, const void *b){
return *(int *)a > *(int *)b;
}
int main(intargc, char *argv[]){ // 第一个参数为当前读取位置,后续参数为请求的数字
int stack[100];
intpos = atoi(argv[1]);
inti;
intstack_top;
int requests[100];
if(argc< 3){
fprintf(stderr, " 至少 2 参数 \n");
return 1;
}
else if(argc> 102){
fprintf(stderr, " 数字数量太多 \n");
return 2;
}
for(i = 2; i<argc; i++){
requests[i - 2] = atoi(argv[i]);
}
qsort(requests, argc - 2, sizeof(int), cmp);
for(i = 0; i<argc - 2; i++){
if(requests[i] <pos){
//对请求排序
stack[i] = requests[i];
stack_top = i;
}else{
// 存储位置比当前指针小的数据
printf("%d, ", requests[i]); // 输出位置比当前指针大的数据
}
}
for(; stack_top>= 0; stack_top--){
printf("%d, ", stack[stack_top]); // 反向输出位置比当前指针大的数据
}
printf("\n");
}
相关热词搜索: 程序设计 操作系统 语言 实验 报告