第五讲 磁盘调度算法电子教案Word格式.docx
- 文档编号:17736966
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:10
- 大小:17.32KB
第五讲 磁盘调度算法电子教案Word格式.docx
《第五讲 磁盘调度算法电子教案Word格式.docx》由会员分享,可在线阅读,更多相关《第五讲 磁盘调度算法电子教案Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
实验室名称地点
计算机基础第七实验室
哈尔滨工程大学
计算机科学与技术学院
一、实验概述
1.实验名称磁盘调度算法
2.实验目的
(1)通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。
(2)观察EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法。
(3)编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。
3.实验类型验证,设计
4.实验内容
(1)准备实验
(2)验证先来先服务(FCFS)磁盘调度算法
(3)验证最短寻道时间优先(SSTF)磁盘调度算法
(4)验证SSTF算法造成的线程“饥饿”现象
(5.1)验证扫描(SCAN)磁盘调度算法
(5.2)验证SCAN算法能够解决“饥饿”现象
(6)改写SCAN调度算法
二、实验环境
EOS操作系统与IDE环境组成的“操作系统集成实验环境OSLab”。
三、实验过程
(一)实验问题及解答
1.实验指导P176-3.2验证先来先服务(FCFS)磁盘调度算法,要求请给出在“输出”窗口中的结果。
答:
输出结果复制如下:
制作软盘镜像...
正在启动VirtualPC...
开始调试...
******Diskschedulestartworking******
StartCylinder:
10
TID:
31Cylinder:
8Offset:
2-
32Cylinder:
21Offset:
13+
33Cylinder:
9Offset:
12-
34Cylinder:
78Offset:
69+
35Cylinder:
0Offset:
78-
36Cylinder:
41Offset:
41+
37Cylinder:
10Offset:
31-
38Cylinder:
67Offset:
57+
39Cylinder:
12Offset:
55-
40Cylinder:
Totaloffset:
360Transfertimes:
10Averageoffset:
36
2.实验指导P177-3.3验证验证最短寻道时间优先(SSTF)磁盘调度算法,要求请给出在“输出”窗口中的结果。
0=
1-
4+
9+
20+
26+
11+
150Transfertimes:
15
3.实验指导P178-3.4验证SSTF算法造成的线程“饥饿”现象,要求请给出在“输出”窗口中的结果。
11Offset:
3+
1+
72Transfertimes:
7
4.实验指导P179-3.5验证扫描(SCAN)磁盘调度算法,要求在非饥饿(即《实验指导》P176-3.2节中的数据)和饥饿(即《实验指导》P178-3.4节中的数据)请给出在“输出”窗口中的结果,并且要求在每次输入两次“ds”命令(注意不要连续输入,要等第一次“ds”命令执行完,再输入第二次“ds”命令),分析结果为什么不同。
(1)非饥饿状态,两次输入ds指令
2+
69-
8-
146Transfertimes:
14
******Diskschedulestopworking******
47Cylinder:
50Cylinder:
43Cylinder:
41Cylinder:
45Cylinder:
49Cylinder:
12+
42Cylinder:
46Cylinder:
48Cylinder:
44Cylinder:
88Transfertimes:
8
(2)饥饿状态,两次输入ds指令
138Transfertimes:
13
分析两次结果为何不同:
执行完一次ds命令后,该次搜索的指针方向被保存,但是和初始值相比,搜索的方向发生了变化。
根据SCAN算法,按一个方向访问磁盘,一个方向访问到尽头后再换一个方向继续访问。
下次访问,按上次访问结束时的方向继续访问。
于是第二次访问的方向会与第一次不同,造成两次DS命令输出的结果不同。
(2)实验代码及解释
实验结果:
源代码:
PREQUEST
IopDiskSchedule(
VOID
)
{
PLIST_ENTRYpListEntry;
PREQUESTpRequest;
LONGOffset;
ULONGInsideShortestDistance=0xFFFFFFFF;
ULONGOutsideShortestDistance=0xFFFFFFFF;
PREQUESTpNextRequest0=NULL,pNextRequest1=NULL,pNextRequest2=NULL;
//
//需要遍历请求队列一次或两次
for(pListEntry=RequestListHead.Next;
//请求队列中的第一个请求是链表头指向的下一个请求。
pListEntry!
=&
RequestListHead;
//遍历到请求队列头时结束循环。
pListEntry=pListEntry->
Next){
//
//根据链表项获得请求的指针
pRequest=CONTAINING_RECORD(pListEntry,REQUEST,ListEntry);
//计算请求对应的线程所访问的磁道与当前磁头所在磁道的偏移(方向由正负表示)
Offset=pRequest->
Cylinder-CurrentCylinder;
if(0==Offset){
//
//如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。
pNextRequest0=pRequest;
returnpNextRequest0;
}if(Offset>
0){
//记录向内移动距离最短的线程
if(Offset<
InsideShortestDistance){
InsideShortestDistance=Offset;
pNextRequest1=pRequest;
}
}if(Offset<
//记录向外移动距离最短的线程
if(-Offset<
OutsideShortestDistance){
OutsideShortestDistance=-Offset;
pNextRequest2=pRequest;
}
}
if(ScanInside)//判断磁头是否有向内移动。
如果是则执行下面指令
{
if(pNextRequest1)//判断是否有向内移动的线程。
{
returnpNextRequest1;
//有则返回向内移动距离最短的线程
else
ScanInside=!
ScanInside;
//改变磁头运动方向向外
returnpNextRequest2;
//没有则返回向外移动距离最短的线程
}
else//如果否则执行下边的指令
if(pNextRequest2)//判断是否有向外移动的线程
{
returnpNextRequest2;
//有则返回向外移动距离最短的线程
else
ScanInside=!
//并改变磁头运动方向向内
returnpNextRequest1;
//没有则返回向内移动距离最短的线程
}
4、实验体会
这是操作系统实验的最后一次实验课,反观这一系列的实验,收获很多。
实际的操作过程中遇到了很多问题,上机实验就是给我们机会去遇到问题,然后让我们去提高解决问题的能力。
编程能力一直是弱点,经过几次试验之后这个短板有所改善,但还是不够,这需要在接下来的学习生活中努力加强。
操作系统这门课我一直很重视,上课听得很认真,实验课也是非常重视,加深对理论的理解并且应用到实际中去。
这一系列的实验我自己感觉,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五讲 磁盘调度算法电子教案 第五 磁盘 调度 算法 电子 教案