资源简介
通过磁盘调度算法的模拟设计,了解磁盘调度的特点。
模拟实现FCFS、SSTF、SCAN、C-SCAN和LOOK算法,并计算及比较磁头移动道数。
磁盘调度算法是根据访问都指定的磁道(柱面)位置来决定执行次序的调度。其目的是尽可能地减少操作中的寻道时间。在磁盘盘面上,0磁道在盘面的外圈;号数越大,磁道戛靠近盘片的中心。
模拟实现FCFS、SSTF、SCAN、C-SCAN和LOOK算法,并计算及比较磁头移动道数。
磁盘调度算法是根据访问都指定的磁道(柱面)位置来决定执行次序的调度。其目的是尽可能地减少操作中的寻道时间。在磁盘盘面上,0磁道在盘面的外圈;号数越大,磁道戛靠近盘片的中心。
代码片段和文件信息
#include
#include
#include
#include
#include
int start=0;
long FCFS(int array[100]) //先来先服务调度算法
{
int ij;
long sum=0;
for(i=0j=1;i<99j<100;i++j++)
{
sum+=abs(array[j]-array[i]);
}
return sum;
}
long SSTF(int array[100]) //最短寻道时间优先调度算法
{
int temp;
int k=1;
int now leftright;
int ijsum=0;
for (i=0;i<100;i++)
for (j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
} //排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;//定位
while ((left>=0)&&(right<100))
{
if ((now-array[left])<=(array[right]-now))
{
sum+=now-array[left];
now=array[left];
left--;
}
else
{
sum+=array[right]-now;
now=array[right];
right++;
}
}
if(left==-1)
{
sum+=array[99]-array[0];
}
else sum+=array[99]-array[0];
}
}
return sum;
}
long SCAN(int array[100]) //扫描调度算法(电梯算法)
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;
for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
} //排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k; //定位
if((now-array[left])<=(array[right]-now)) //当前移动臂的移动的方向,表示向外
{
sum=now+array[99];
}
else //表示向内
{
sum=2*1499-now-array[0]+array[left];
}
}
}
return sum;
}
long CSCAN(int array[100]) //单向扫描调度算法
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;
for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
} //排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k; //定位
sum=2*1499-now+array[left];
}
}
return sum;
}
long LOOK(int array[100]) //
{
int temp;
int k=1;
int nowleftright;
int ijsum=0;
for (i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4336 2007-12-26 13:38 磁盘调度\cpdu.cpp
文件 188472 2007-12-26 13:38 磁盘调度\cpdu.exe
文件 43520 2009-04-02 22:25 磁盘调度\sybg.doc
目录 0 2009-04-02 22:30 磁盘调度
----------- --------- ---------- ----- ----
236328 4
- 上一篇:《编译原理》清华大学版中的pl0扩充
- 下一篇:xm
l多个文件合并(delphi)
相关资源
- C 实现的即时通讯工具源码
- 使用C 实现的教学计划安排检验程序
- VC 实现三维旋转(源码)
- 用LDLT分解求解方程组c
- ping 程序 C语言
- SAMPLE (类pascal) 词法分析程序 C 版
- 电梯模拟程序C/C 算法实现
- vs2005骑士巡游问题-分治法C
- 操作系统实验综合设计【附代码】
- 学生成绩管理系统C 源码(很完整)
- 基于C 的简易FTP客户端(带源码)
- 选课系统c (指针与链表)
- C (MFC)华容道自动求解
- VC 编程实现活动主机扫描源代码
- c 做的漂亮菜单附有源代码
- C 练习系列1
- 将数字转为中文金额的大写方式(C
- 十六进制与字符串互转
- 操作系统课程设计实现可变分区存储
- VC 使用GDI 矢量绘图软件源代码
- c 编写的 矩阵 matrix 类源码
- c 面试题(面试经验)自己收集自己
- vc 编写的基于TCP协议的客户/服务器
- 表达式求值C 代码(附实验报告)
- 操作系统课程设计 二级文件管理系统
- lzw压缩,解压缩算法
- 建立文件数据索引的c 代码
- 树状导航菜单的制作
- VC工程转Qt工程文件的工具
- Gerber文件的编辑程序
评论
共有 条评论