操作系统实验 磁盘调度算法Word格式.docx

上传人:b****6 文档编号:21254853 上传时间:2023-01-28 格式:DOCX 页数:10 大小:284.35KB
下载 相关 举报
操作系统实验 磁盘调度算法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

王红滨

实验室名称地点

软件工程实验室21B282

哈尔滨工程大学

第五讲磁盘调度算法

一、实验概述

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)磁盘调度算法

2.验证SCAN算法能够解决“饥饿”现象

(6)改写SCAN调度算法

2、实验环境

操作系统:

Windowsxp

实验环境:

Oslab;

编程语言:

C++

三、实验过程

1.源程序并附上注释

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;

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

}

2.程序运行时的初值和运行结果:

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

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

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

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

//先来先服务的磁柱调度算法

******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

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

//磁柱顺序未改变电梯调度结果

0=

2+

9+

20+

26+

11+

69-

1-

8-

146Transfertimes:

14

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

//磁柱顺序未改变最邻近优先调度结果

4+

150Transfertimes:

15

//磁柱顺序改变后最邻近优先调度结果,78排在队列首,却在最后被调度,孩子被饿到了

11Offset:

3+

1+

72Transfertimes:

7

//验证电梯调度解决最邻近优先的饥饿,78在调度队列首

138Transfertimes:

13

四、实验体会

通过本次实验,了解了磁盘调度的算法,直观的观察了FCFS、SSTF、SCAN算法的结果。

从根本上理解了饥饿现象,把以前只是理论的知识运用到实验中,理解的更深刻。

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

当前位置:首页 > 高等教育 > 医学

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

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