操作系统实验磁盘调度扫描算法循环扫描算法.docx
- 文档编号:25454175
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:9
- 大小:16.98KB
操作系统实验磁盘调度扫描算法循环扫描算法.docx
《操作系统实验磁盘调度扫描算法循环扫描算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验磁盘调度扫描算法循环扫描算法.docx(9页珍藏版)》请在冰豆网上搜索。
操作系统实验磁盘调度扫描算法循环扫描算法
学号P1514032专业计算机科学与技术姓名之迟辟智美创作
实验陈说
【实验名称】磁盘调度
(二)
【实验目的】
磁盘调度中寻道时间直接影响到数据访问的快慢,处置好磁盘寻道时间是关键.分别采纳扫描战略、循环扫描战略处置.
【实验原理】
1.扫描算法(SCAN算法)
SCAN算法,也就是很形象的电梯调度算法.先依照一个方向(比如从外向内扫描),扫描的过程中依次调度经过的磁道.当扫描到最里层的一个磁道时反向扫描直至所有磁道都被调度.
2.循环扫描算法(CSCAN算法)
CSCAN算法,循环扫描算法,它的思想是,访问完最里面一个要求服务的序列之后,从最外层的序号开始往里走.也就是始终坚持一个方向,故称为循环扫描算法.
【数据结构和符号说明】
(1)数据结构和符号说明
编译语言:
C++
数据结构:
结构体数组
符号界说:
typedefstructTrack//磁道结构体
{
intid;//磁道序列
intstate=0;//是否访问过,未被访问置状态为0
}Track;
Tracktrack[N];//最年夜磁道数为100
Tracktrack1[N];//复制的磁道数组用于输出
intstep[N];//移动距离
intnum,i,current_track,num1;//以后磁道即部份中间变量
函数说明:
voidinit()//初始化法式
voidinput()//输入函数
voidsort1()//从小到年夜排序
intabs(inta,intb)//相减的绝对值
intfind_first_bignum()//寻找第一个最年夜值
intfind_first_smallnum()//寻找第一个最小值
voidSCAN(intup_or_down)//扫描算法
voidCSCAN(intup_or_down)//循环扫描算法
voidoutput(Tracka[])//输出函数
voidoutput_average_track()//输出平均寻道时间
intshow()//显示用户界面//返回值为输入的选择项
流程图:
SCAN算法:
CSCAN算法(与SCAN算法基本类似):
代码:
#include
#defineN100
typedefstructTrack
{
intid;//磁道序列
intstate=0;//是否访问过,未被访问置状态为0
}Track;
Tracktrack[N];//最年夜磁道数为100
Tracktrack1[N];
intstep[N];//移动距离
intnum,i,current_track,num1;
voidinit()//初始化法式
{
num=0;
for(i=0;i { track[i].state=-1;//id置为1 track1[i].state=-1; step[i]=-1;//移动距离为-1 } } voidinput()//输入函数 { printf("输入以后磁道\n"); scanf("%d",¤t_track); num1=current_track; printf("输入要访问的磁道数目\n"); scanf("%d",&num); printf("输入要访问磁道序列\n"); for(i=0;i scanf("%d",&track[i].id); } voidFCFS()//先来先服务 { for(i=0;i { if((current_track-track[i].id)<0)//求移动距离 step[i]=track[i].id-current_track; else step[i]=current_track-track[i].id;//取绝对值 track[i].state=1;//状态置为1 current_track=track[i].id;//更新以后磁道 } } intabs(inta,intb)//相减的绝对值 { returna-b>0? a-b: b-a; } intSerch_min_pos()//寻找到以后磁道最短的需求磁道 { intmin=45536;//最小距离标识表记标帜 intpos; for(inti=0;i if(track[i].state==1) continue; elseif(min>abs(track[i].id,current_track))//寻找最小距离 { min=abs(track[i].id,current_track); pos=i; } track[pos].state=1; returnpos;//返回在数组中的位置 } voidSSTF()//最短寻道优先 { for(i=0;i { track1[i]=track[Serch_min_pos()];//更新到要输出的数组中 step[i]=abs(track1[i].id,current_track);//移动距离 current_track=track1[i].id;//标识表记标帜 } } voidoutput(Tracka[])//输出函数 { printf("\n\n<从%d号磁道开始>\n",num1); printf("==================================================\n");//排班 printf("被访问的下一个磁道\t\t移动距离(磁道数)\n"); for(i=0;i printf("\t%4d\t\t||\t%4d\n",a[i].id,step[i]); printf("==================================================\n"); } voidoutput_average_track()//输出平均寻道时间 { doublesum=0;//和 for(i=0;i sum+=step[i]; printf("平均寻道长度%3.2f\n\n\n",sum/num);//输出 } intshow()//显示用户界面 { intchoose;//选择 printf("\n******************早期的磁盘调度算法******************\n"); printf("\t\t1、先来先服务(FCFS)\n"); printf("\t\t2、最短寻道时间优先(SSTF)\n"); printf("\t\t3、退出(EXIT)\n"); scanf("%d",&choose); returnchoose; } intmain() { do { init(); switch(show())//返回值是选择 { case1: //FCFS input(); FCFS(); output(track); output_average_track(); break; case2: //最短寻道 input(); SSTF(); output(track1); output_average_track(); break; case3: //退出 return0; default: break; } } while (1); return0; } 截图: 主界面开始,输入选择先来先服务还是最短寻道优先,输入以后磁道,输入要访问的磁道,输入要访问的磁道序列. SCAN算法 输入以后磁道100,9个磁道,分别为555839189016015038184,此时选择方向向上 结果正确. 输入以后磁道100,9个磁道,分别为555839189016015038184,此时选择方向向下 结果正确. CSCAN算法 输入以后磁道100,9个磁道,分别为555839189016015038184,此时选择方向向上 结果正确. 输入以后磁道100,9个磁道,分别为555839189016015038184,此时选择方向向上 结果正确. 【小结与讨论】 1、扫描算法又称为电梯算法,其原理与电梯运行情况相似,即运行方向上的请求优先,若是访问方向向上,则先依次访问较年夜的磁道号至顶,再向下访问娇小的磁道号;若是访问方向向下,则先依次访问较小的磁道号至底,再向上访问娇年夜的磁道号. 2、循环扫描算法又称为单向电梯算法,若是访问方向向上,则向上依次访问完较年夜的磁道号后,返回最低端,依次向上访问较小的磁道号;若是访问方向向下,则向下依次访问完较小的磁道号后,返回最顶端,依次向下访问较年夜的磁道号. 3、此次实验我用两个数组分别寄存了一个磁道表和复制的磁道表,根据两个算法的原理,只要将其进行排序,然后分别对两个数组进行正向和逆向的访问即可. 4、具体实现时,我将两种算法的两种初始扫描方向写在了一个函数之中,调用时通过参数scan和参数up_or_down设置.并设置了寻找年夜于以后数组的最近最小值和最近的年夜值进行选择结果,这是因为初始磁道号将磁道数组分成上下(高低地址)两块,这两块根据分歧的扫描方向重新选择高低地址,又结合分歧的算法决定正序排列还是反序排列.实现起来还是比力简单的. 5、由于CSCAN算法的思想是,访问完最里面一个要求服务的序列之后,从最外层的序号开始往里走.也就是始终坚持一个方向.所以如果用循环队列实现,时间复杂度会更低,效率更高. 6、此次实验虽然较为简单,但还是发现了自己知识点有些方面的缺乏,让我更好的了解了磁盘调度的原理,使我收获颇多.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 磁盘 调度 扫描 算法 循环
![提示](https://static.bdocx.com/images/bang_tan.gif)