第五讲 磁盘调度算法.docx
- 文档编号:26152583
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:12
- 大小:17.20KB
第五讲 磁盘调度算法.docx
《第五讲 磁盘调度算法.docx》由会员分享,可在线阅读,更多相关《第五讲 磁盘调度算法.docx(12页珍藏版)》请在冰豆网上搜索。
第五讲磁盘调度算法
操作系统
实验报告
课程名称
操作系统实验
实验项目名称
磁盘调度算法
学号
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算法造成的线程“饥饿”现象
(5.1)验证扫描(SCAN)磁盘调度算法
(5.2)验证SCAN算法能够解决“饥饿”现象
(6)改写SCAN调度算法
二、实验环境
EOS操作系统与IDE环境组成的“操作系统集成实验环境OSLab”。
三、实验过程
(一)实验问题及解答
1.实验指导P176-3.2验证先来先服务(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.实验指导P177-3.3验证验证最短寻道时间优先(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.实验指导P178-3.4验证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.实验指导P179-3.5验证扫描(SCAN)磁盘调度算法,要求在非饥饿(即《实验指导》P176-3.2节中的数据)和饥饿(即《实验指导》P178-3.4节中的数据)请给出在“输出”窗口中的结果,并且要求在每次输入两次“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:
Transfertimes:
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=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=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、实验体会 这是操作系统实验的最后一次实验课,反观这一系列的实验,收获很多。 实际的操作过程中遇到了很多问题,上机实验就是给我们机会去遇到问题,然后让我们去提高解决问题的能力。 编程能力一直是弱点,经过几次试验之后这个短板有所改善,但还是不够,这需要在接下来的学习生活中努力加强。 操作系统这门课我一直很重视,上课听得很认真,实验课也是非常重视,加深对理论的理解并且应用到实际中去。 这一系列的实验我自己感觉,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五讲 磁盘调度算法 第五 磁盘 调度 算法