第五讲 磁盘调度算法.docx

上传人:b****5 文档编号:6362184 上传时间:2023-01-05 格式:DOCX 页数:10 大小:17.08KB
下载 相关 举报
第五讲 磁盘调度算法.docx_第1页
第1页 / 共10页
第五讲 磁盘调度算法.docx_第2页
第2页 / 共10页
第五讲 磁盘调度算法.docx_第3页
第3页 / 共10页
第五讲 磁盘调度算法.docx_第4页
第4页 / 共10页
第五讲 磁盘调度算法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

第五讲 磁盘调度算法.docx

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

第五讲 磁盘调度算法.docx

第五讲磁盘调度算法

操作系统

实验报告

课程名称

操作系统实验

实验项目名称

磁盘调度算法

学号

2010061304

班级

20100613

姓名

王鸿运

专业

计算机

学生所在学院

计算机科学与技术

指导教师

王红滨

实验室名称地点

计算机基础第七实验室

哈尔滨工程大学

计算机科学与技术学院

一、实验概述

1.实验名称磁盘调度算法

2.实验目的

(1)通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。

(2)观察EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法。

(3)编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。

3.实验类型验证,设计

4.实验内容

(1)准备实验

(2)验证先来先服务(FCFS)磁盘调度算法

(3)验证最短寻道时间优先(SSTF)磁盘调度算法

(4)验证SSTF算法造成的线程“饥饿”现象

()验证扫描(SCAN)磁盘调度算法

()验证SCAN算法能够解决“饥饿”现象

(6)改写SCAN调度算法

二、实验环境

EOS操作系统与IDE环境组成的“操作系统集成实验环境OSLab”。

三、实验过程

(一)实验问题及解答

1.实验指导验证先来先服务(FCFS)磁盘调度算法,要求请给出在“输出”窗口中的结果。

答:

输出结果复制如下:

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

31Cylinder:

8Offset:

2-

TID:

32Cylinder:

21Offset:

13+

TID:

33Cylinder:

9Offset:

12-

TID:

34Cylinder:

78Offset:

69+

TID:

35Cylinder:

0Offset:

78-

TID:

36Cylinder:

41Offset:

41+

TID:

37Cylinder:

10Offset:

31-

TID:

38Cylinder:

67Offset:

57+

TID:

39Cylinder:

12Offset:

55-

TID:

40Cylinder:

10Offset:

2-

Totaloffset:

360Transfertimes:

10Averageoffset:

36

2.实验指导验证验证最短寻道时间优先(SSTF)磁盘调度算法,要求请给出在“输出”窗口中的结果。

答:

输出结果复制如下:

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

37Cylinder:

10Offset:

0=

TID:

40Cylinder:

10Offset:

0=

TID:

33Cylinder:

9Offset:

1-

TID:

31Cylinder:

8Offset:

1-

TID:

39Cylinder:

12Offset:

4+

TID:

32Cylinder:

21Offset:

9+

TID:

36Cylinder:

41Offset:

20+

TID:

38Cylinder:

67Offset:

26+

TID:

34Cylinder:

78Offset:

11+

TID:

35Cylinder:

0Offset:

78-

Totaloffset:

150Transfertimes:

10Averageoffset:

15

3.实验指导验证SSTF算法造成的线程“饥饿”现象,要求请给出在“输出”窗口中的结果。

答:

输出结果复制如下:

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

37Cylinder:

10Offset:

0=

TID:

40Cylinder:

10Offset:

0=

TID:

33Cylinder:

9Offset:

1-

TID:

34Cylinder:

8Offset:

1-

TID:

35Cylinder:

11Offset:

3+

TID:

39Cylinder:

12Offset:

1+

TID:

32Cylinder:

21Offset:

9+

TID:

36Cylinder:

41Offset:

20+

TID:

38Cylinder:

67Offset:

26+

TID:

31Cylinder:

78Offset:

11+

Totaloffset:

72Transfertimes:

10Averageoffset:

7

4.实验指导验证扫描(SCAN)磁盘调度算法,要求在非饥饿(即《实验指导》节中的数据)和饥饿(即《实验指导》节中的数据)请给出在“输出”窗口中的结果,并且要求在每次输入两次“ds”命令(注意不要连续输入,要等第一次“ds”命令执行完,再输入第二次“ds”命令),分析结果为什么不同。

答:

输出结果复制如下:

(1)非饥饿状态,两次输入ds指令

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

37Cylinder:

10Offset:

0=

TID:

40Cylinder:

10Offset:

0=

TID:

39Cylinder:

12Offset:

2+

TID:

32Cylinder:

21Offset:

9+

TID:

36Cylinder:

41Offset:

20+

TID:

38Cylinder:

67Offset:

26+

TID:

34Cylinder:

78Offset:

11+

TID:

33Cylinder:

9Offset:

69-

TID:

31Cylinder:

8Offset:

1-

TID:

35Cylinder:

0Offset:

8-

Totaloffset:

146Transfertimes:

10Averageoffset:

14

******Diskschedulestopworking******

 

******Diskschedulestartworking******

StartCylinder:

10

TID:

47Cylinder:

10Offset:

0=

TID:

50Cylinder:

10Offset:

0=

TID:

43Cylinder:

9Offset:

1-

TID:

41Cylinder:

8Offset:

1-

TID:

45Cylinder:

0Offset:

8-

TID:

49Cylinder:

12Offset:

12+

TID:

42Cylinder:

21Offset:

9+

TID:

46Cylinder:

41Offset:

20+

TID:

48Cylinder:

67Offset:

26+

TID:

44Cylinder:

78Offset:

11+

Totaloffset:

88Transfertimes:

10Averageoffset:

8

(2)饥饿状态,两次输入ds指令

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

37Cylinder:

10Offset:

0=

TID:

40Cylinder:

10Offset:

0=

TID:

35Cylinder:

11Offset:

1+

TID:

39Cylinder:

12Offset:

1+

TID:

32Cylinder:

21Offset:

9+

TID:

36Cylinder:

41Offset:

20+

TID:

38Cylinder:

67Offset:

26+

TID:

31Cylinder:

78Offset:

11+

TID:

33Cylinder:

9Offset:

69-

TID:

34Cylinder:

8Offset:

1-

Totaloffset:

138Transfertimes:

10Averageoffset:

13

******Diskschedulestopworking******

 

******Diskschedulestartworking******

StartCylinder:

10

TID:

47Cylinder:

10Offset:

0=

TID:

50Cylinder:

10Offset:

0=

TID:

43Cylinder:

9Offset:

1-

TID:

44Cylinder:

8Offset:

1-

TID:

45Cylinder:

11Offset:

3+

TID:

49Cylinder:

12Offset:

1+

TID:

42Cylinder:

21Offset:

9+

TID:

46Cylinder:

41Offset:

20+

TID:

48Cylinder:

67Offset:

26+

TID:

41Cylinder:

78Offset:

11+

Totaloffset:

72Transfertimes:

10Averageoffset:

7

分析两次结果为何不同:

执行完一次ds命令后,该次搜索的指针方向被保存,但是和初始值相比,搜索的方向发生了变化。

根据SCAN算法,按一个方向访问磁盘,一个方向访问到尽头后再换一个方向继续访问。

下次访问,按上次访问结束时的方向继续访问。

于是第二次访问的方向会与第一次不同,造成两次DS命令输出的结果不同。

(2)实验代码及解释

实验结果:

制作软盘镜像...

正在启动VirtualPC...

开始调试...

******Diskschedulestartworking******

StartCylinder:

10

TID:

37Cylinder:

10Offset:

0=

TID:

40Cylinder:

10Offset:

0=

TID:

39Cylinder:

12Offset:

2+

TID:

32Cylinder:

21Offset:

9+

TID:

36Cylinder:

41Offset:

20+

TID:

38Cylinder:

67Offset:

26+

TID:

34Cylinder:

78Offset:

11+

TID:

33Cylinder:

9Offset:

69-

TID:

31Cylinder:

8Offset:

1-

TID:

35Cylinder:

0Offset:

8-

Totaloffset:

146Transfertimes:

10Averageoffset:

14

******Diskschedulestopworking******

 

******Diskschedulestartworking******

StartCylinder:

10

TID:

47Cylinder:

10Offset:

0=

TID:

50Cylinder:

10Offset:

0=

TID:

43Cylinder:

9Offset:

1-

TID:

41Cylinder:

8Offset:

1-

TID:

45Cylinder:

0Offset:

8-

TID:

49Cylinder:

12Offset:

12+

TID:

42Cylinder:

21Offset:

9+

TID:

46Cylinder:

41Offset:

20+

TID:

48Cylinder:

67Offset:

26+

TID:

44Cylinder:

78Offset:

11+

Totaloffset:

88Transfertimes:

10Averageoffset:

8

 

源代码:

PREQUEST

IopDiskSchedule(

VOID

{

PLIST_ENTRYpListEntry;

PREQUESTpRequest;

LONGOffset;

ULONGInsideShortestDistance=0xFFFFFFFF;

ULONGOutsideShortestDistance=0xFFFFFFFF;

PREQUESTpNextRequest0=NULL,pNextRequest1=NULL,pNextRequest2=NULL;

//

//需要遍历请求队列一次或两次

//

for(pListEntry=;//请求队列中的第一个请求是链表头指向的下一个请求。

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=Offset;

pNextRequest1=pRequest;

}

}if(Offset<0){

//

//记录向外移动距离最短的线程

//

if(-Offset

OutsideShortestDistance=-Offset;

pNextRequest2=pRequest;

}

}

}

if(ScanInside)//判断磁头是否有向内移动。

如果是则执行下面指令

{

if(pNextRequest1)//判断是否有向内移动的线程。

{

returnpNextRequest1;//有则返回向内移动距离最短的线程

}

else

{

ScanInside=!

ScanInside;//改变磁头运动方向向外

returnpNextRequest2;//没有则返回向外移动距离最短的线程

}

}

else//如果否则执行下边的指令

{

if(pNextRequest2)//判断是否有向外移动的线程

{

returnpNextRequest2;//有则返回向外移动距离最短的线程

}

else

{

ScanInside=!

ScanInside;//并改变磁头运动方向向内

returnpNextRequest1;//没有则返回向内移动距离最短的线程

}

}

}

4、实验体会

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

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

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

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

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

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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