第五讲 磁盘调度算法电子教案Word格式.docx

上传人:b****4 文档编号:17736966 上传时间:2022-12-09 格式:DOCX 页数:10 大小:17.32KB
下载 相关 举报
第五讲 磁盘调度算法电子教案Word格式.docx_第1页
第1页 / 共10页
第五讲 磁盘调度算法电子教案Word格式.docx_第2页
第2页 / 共10页
第五讲 磁盘调度算法电子教案Word格式.docx_第3页
第3页 / 共10页
第五讲 磁盘调度算法电子教案Word格式.docx_第4页
第4页 / 共10页
第五讲 磁盘调度算法电子教案Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

第五讲 磁盘调度算法电子教案Word格式.docx

《第五讲 磁盘调度算法电子教案Word格式.docx》由会员分享,可在线阅读,更多相关《第五讲 磁盘调度算法电子教案Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

第五讲 磁盘调度算法电子教案Word格式.docx

实验室名称地点

计算机基础第七实验室

哈尔滨工程大学

计算机科学与技术学院

一、实验概述

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、实验体会

这是操作系统实验的最后一次实验课,反观这一系列的实验,收获很多。

实际的操作过程中遇到了很多问题,上机实验就是给我们机会去遇到问题,然后让我们去提高解决问题的能力。

编程能力一直是弱点,经过几次试验之后这个短板有所改善,但还是不够,这需要在接下来的学习生活中努力加强。

操作系统这门课我一直很重视,上课听得很认真,实验课也是非常重视,加深对理论的理解并且应用到实际中去。

这一系列的实验我自己感觉,收获很大。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1