1、操作系统实验10操作系统实 验 报 告课程名称操作系统实验实验项目名称磁盘调度算法学号班级姓名专业学生所在学院指导教师实验室名称地点一、实验概述1. 实验名称磁盘调度算法2. 实验目的熟悉操作系统集成实验环境OS Lab的基本使用方法。 练习编译、调试EOS操作系统内核以及EOS应用程序。3. 实验类型验证二、实验环境OS Lab三、实验过程 3.2验证先来先服务磁盘调度算法输入:* Disk schedule start working *Start Cylinder: 10TID: 31 Cylinder: 8 Offset: 2 -TID: 32 Cylinder: 21 Offset:
2、 13 +TID: 33 Cylinder: 9 Offset: 12 -TID: 34 Cylinder: 78 Offset: 69 +TID: 35 Cylinder: 0 Offset: 78 -TID: 36 Cylinder: 41 Offset: 41 +TID: 37 Cylinder: 10 Offset: 31 -TID: 38 Cylinder: 67 Offset: 57 +TID: 39 Cylinder: 12 Offset: 55 -TID: 40 Cylinder: 10 Offset: 2 -Total offset: 360 Transfer times:
3、10 Average offset: 36* Disk schedule stop working * Disk schedule start working *Start Cylinder: 10TID: 41 Cylinder: 8 Offset: 2 -TID: 42 Cylinder: 21 Offset: 13 +TID: 43 Cylinder: 9 Offset: 12 -TID: 44 Cylinder: 78 Offset: 69 +TID: 45 Cylinder: 0 Offset: 78 -TID: 46 Cylinder: 41 Offset: 41 +TID: 47
4、 Cylinder: 10 Offset: 31 -TID: 48 Cylinder: 67 Offset: 57 +TID: 49 Cylinder: 12 Offset: 55 -TID: 50 Cylinder: 10 Offset: 2 -Total offset: 360 Transfer times: 10 Average offset: 36* Disk schedule stop working * Disk schedule start working *Start Cylinder: 10TID: 51 Cylinder: 8 Offset: 2 -TID: 52 Cyli
5、nder: 21 Offset: 13 +TID: 53 Cylinder: 9 Offset: 12 -TID: 54 Cylinder: 78 Offset: 69 +TID: 55 Cylinder: 0 Offset: 78 -TID: 56 Cylinder: 41 Offset: 41 +TID: 57 Cylinder: 10 Offset: 31 -TID: 58 Cylinder: 67 Offset: 57 +TID: 59 Cylinder: 12 Offset: 55 -TID: 60 Cylinder: 10 Offset: 2 -Total offset: 360
6、Transfer times: 10 Average offset: 36* Disk schedule stop working *3.3验证最短寻道时间优先磁盘调度算法输出窗口:* Disk schedule start working *Start Cylinder: 10TID: 37 Cylinder: 10 Offset: 0 =TID: 40 Cylinder: 10 Offset: 0 =TID: 33 Cylinder: 9 Offset: 1 -TID: 31 Cylinder: 8 Offset: 1 -TID: 39 Cylinder: 12 Offset: 4 +TI
7、D: 32 Cylinder: 21 Offset: 9 +TID: 36 Cylinder: 41 Offset: 20 +TID: 38 Cylinder: 67 Offset: 26 +TID: 34 Cylinder: 78 Offset: 11 +TID: 35 Cylinder: 0 Offset: 78 -Total offset: 150 Transfer times: 10 Average offset: 15* Disk schedule stop working * Disk schedule start working *Start Cylinder: 10TID: 4
8、7 Cylinder: 10 Offset: 0 =TID: 50 Cylinder: 10 Offset: 0 =TID: 43 Cylinder: 9 Offset: 1 -TID: 41 Cylinder: 8 Offset: 1 -TID: 49 Cylinder: 12 Offset: 4 +TID: 42 Cylinder: 21 Offset: 9 +TID: 46 Cylinder: 41 Offset: 20 +TID: 48 Cylinder: 67 Offset: 26 +TID: 44 Cylinder: 78 Offset: 11 +TID: 45 Cylinder:
9、 0 Offset: 78 -Total offset: 150 Transfer times: 10 Average offset: 15* Disk schedule stop working * Disk schedule start working *Start Cylinder: 10TID: 57 Cylinder: 10 Offset: 0 =TID: 60 Cylinder: 10 Offset: 0 =TID: 53 Cylinder: 9 Offset: 1 -TID: 51 Cylinder: 8 Offset: 1 -TID: 59 Cylinder: 12 Offse
10、t: 4 +TID: 52 Cylinder: 21 Offset: 9 +TID: 56 Cylinder: 41 Offset: 20 +TID: 58 Cylinder: 67 Offset: 26 +TID: 54 Cylinder: 78 Offset: 11 +TID: 55 Cylinder: 0 Offset: 78 -Total offset: 150 Transfer times: 10 Average offset: 15* Disk schedule stop working *3.4 验证SSTF算法造成的线程“饥饿”现象 修改代码 :输出窗口:* Disk sche
11、dule start working *Start Cylinder: 10TID: 37 Cylinder: 10 Offset: 0 =TID: 40 Cylinder: 10 Offset: 0 =TID: 33 Cylinder: 9 Offset: 1 -TID: 34 Cylinder: 8 Offset: 1 -TID: 35 Cylinder: 11 Offset: 3 +TID: 39 Cylinder: 12 Offset: 1 +TID: 32 Cylinder: 21 Offset: 9 +TID: 36 Cylinder: 41 Offset: 20 +TID: 38
12、 Cylinder: 67 Offset: 26 +TID: 31 Cylinder: 78 Offset: 11 +Total offset: 72 Transfer times: 10 Average offset: 7* Disk schedule stop working *3.5 验证扫描磁盘调度算法输出窗口* Disk schedule start working *Start Cylinder: 10TID: 37 Cylinder: 10 Offset: 0 =TID: 40 Cylinder: 10 Offset: 0 =TID: 39 Cylinder: 12 Offset
13、: 2 +TID: 32 Cylinder: 21 Offset: 9 +TID: 36 Cylinder: 41 Offset: 20 +TID: 38 Cylinder: 67 Offset: 26 +TID: 34 Cylinder: 78 Offset: 11 +TID: 33 Cylinder: 9 Offset: 69 -TID: 31 Cylinder: 8 Offset: 1 -TID: 35 Cylinder: 0 Offset: 8 -Total offset: 146 Transfer times: 10 Average offset: 14* Disk schedule
14、 stop working * Disk schedule start working *Start Cylinder: 10TID: 47 Cylinder: 10 Offset: 0 =TID: 50 Cylinder: 10 Offset: 0 =TID: 43 Cylinder: 9 Offset: 1 -TID: 41 Cylinder: 8 Offset: 1 -TID: 45 Cylinder: 0 Offset: 8 -TID: 49 Cylinder: 12 Offset: 12 +TID: 42 Cylinder: 21 Offset: 9 +TID: 46 Cylinde
15、r: 41 Offset: 20 +TID: 48 Cylinder: 67 Offset: 26 +TID: 44 Cylinder: 78 Offset: 11 +Total offset: 88 Transfer times: 10 Average offset: 8* Disk schedule stop working * Disk schedule start working *Start Cylinder: 10TID: 57 Cylinder: 10 Offset: 0 =TID: 60 Cylinder: 10 Offset: 0 =TID: 59 Cylinder: 12
16、Offset: 2 +TID: 52 Cylinder: 21 Offset: 9 +TID: 56 Cylinder: 41 Offset: 20 +TID: 58 Cylinder: 67 Offset: 26 +TID: 54 Cylinder: 78 Offset: 11 +TID: 53 Cylinder: 9 Offset: 69 -TID: 51 Cylinder: 8 Offset: 1 -TID: 55 Cylinder: 0 Offset: 8 -Total offset: 146 Transfer times: 10 Average offset: 14* Disk sc
17、hedule stop working *验证解决饥饿现象 输出窗口:* Disk schedule start working *Start Cylinder: 10TID: 37 Cylinder: 10 Offset: 0 =TID: 40 Cylinder: 10 Offset: 0 =TID: 35 Cylinder: 11 Offset: 1 +TID: 39 Cylinder: 12 Offset: 1 +TID: 32 Cylinder: 21 Offset: 9 +TID: 36 Cylinder: 41 Offset: 20 +TID: 38 Cylinder: 67 Of
18、fset: 26 +TID: 31 Cylinder: 78 Offset: 11 +TID: 33 Cylinder: 9 Offset: 69 -TID: 34 Cylinder: 8 Offset: 1 -Total offset: 138 Transfer times: 10 Average offset: 13* Disk schedule stop working *3.6 改写SCAN算法 源代码:BOOL ScanInside =TRUE;PREQUESTIopDiskSchedule( VOID ) PLIST_ENTRY pListEntry; PREQUEST pRequ
19、est; LONG Offset; ULONG InsideShortestDistance = 0xFFFFFFFF; ULONG OutsideShortestDistance = 0xFFFFFFFF; PREQUEST pNextRequest = NULL; PREQUEST INpNextRequest = NULL; PREQUEST OUTpNextRequest = NULL; / / 需要遍历请求队列一次或两次 / for (pListEntry = RequestListHead.Next; / 请求队列中的第一个请求是链表头指向的下一个请求。 pListEntry !=
20、 &RequestListHead; / 遍历到请求队列头时结束循环。 pListEntry = pListEntry-Next) / / 根据链表项获得请求的指针 / pRequest = CONTAINING_RECORD(pListEntry, REQUEST, ListEntry); / / 计算请求对应的线程所访问的磁道与当前磁头所在磁道的偏移(方向由正负表示) / Offset = pRequest-Cylinder - CurrentCylinder; if (0 = Offset) / / 如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。 / pNextRequest
21、= pRequest; goto RETURN; else if ( Offset 0) / / 记录向内移动距离最短的线程 / if (Offset InsideShortestDistance) InsideShortestDistance = Offset; INpNextRequest = pRequest; else if ( Offset 0) / / 记录向外移动距离最短的线程 / if (-Offset Next) / / 根据链表项获得请求的指针 / pRequest = CONTAINING_RECORD(pListEntry, REQUEST, ListEntry); /
22、 / 计算请求对应的线程所访问的磁道与当前磁头所在磁道的偏移(方向由正负表示) / Offset = pRequest-Cylinder - CurrentCylinder; if (0 = Offset) / / 如果线程要访问的磁道与当前磁头所在磁道相同,可立即返回。 / pNextRequest = pRequest; goto RETURN; else if ( Offset 0) / / 记录向内移动距离最短的线程 / if (Offset InsideShortestDistance) InsideShortestDistance = Offset; INpNextRequest
23、= pRequest; else if ( Offset OutsideLongestDistance) OutsideLongestDistance= -Offset; OUTpNextRequest = pRequest; / / 如果第一次遍历没有线程访问指定方向上的磁道,就变换方向, / 进行第二次遍历。在这两次遍历中一定能找到合适的线程。 / if(INpNextRequest) return INpNextRequest; else return OUTpNextRequest; RETURN: return pNextRequest;输出窗口:* Disk schedule start working *Start Cylinder: 10TID: 37 Cylinder: 10 Offset: 0 =TID: 40 Cylinder: 10 Offset: 0 =TID: 39 Cylinder: 12 Offset: 2 +TID: 32 Cylinder: 21 Offset: 9 +TID: 36 Cylinder: 41 Offset: 20 +TID: 38 Cylinder: 67 Offset: 26 +TID: 34 Cylinder: 78 Offset: 1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1