CSCAN磁盘调度算法 操作系统课程设计报告_(4)

上传人:油条 文档编号:28519120 上传时间:2018-01-17 格式:DOC 页数:18 大小:162.50KB
返回 下载 相关 举报
CSCAN磁盘调度算法 操作系统课程设计报告_(4)_第1页
第1页 / 共18页
CSCAN磁盘调度算法 操作系统课程设计报告_(4)_第2页
第2页 / 共18页
CSCAN磁盘调度算法 操作系统课程设计报告_(4)_第3页
第3页 / 共18页
CSCAN磁盘调度算法 操作系统课程设计报告_(4)_第4页
第4页 / 共18页
CSCAN磁盘调度算法 操作系统课程设计报告_(4)_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《CSCAN磁盘调度算法 操作系统课程设计报告_(4)》由会员分享,可在线阅读,更多相关《CSCAN磁盘调度算法 操作系统课程设计报告_(4)(18页珍藏版)》请在金锄头文库上搜索。

1、 哈 尔 滨 理 工 大 学课程设计( 计 算 机 操 作 系 统 )题目: CSCAN 磁盘调度算法班级: 姓名:指导教师:系 主 任 : 2014 年 03 月 01 日- II-目 录1CSCAN 磁盘调度算法问题课程设计 .11.1 题目分析 .11.2 数据结构 .11.3 流程图 .11.4 实现技术 .21.5 设计结论和心得 .22 Linux 代码分析 .42.1 功能说明 .42.2 接口说明 .42.3 局部数据结构 .42.4 流程图 .42.5 以实例说明运行过程 .5哈尔滨理工大学课程设计报告- 0-1CSCAN 磁盘调度算法问题课程设计1.1 分析题目 将 que

2、uen进行由小到大的排序,首先定位当前调度磁 headstarts 在 queuen的位置,然后在此位置按给定的方向遍历 queuen,当道端点(queue0或 queuen-1)时,反向到另一端点再以此方向进行遍历,直到 queuen中所有都调度完。当调度磁道不在 queue 端点时,总的寻道长度为为前一个磁道与后一个磁道差值的累加,当到达端点且 queuen未全调度时,总寻道长度加上端点值再加上磁盘磁道总长度,再加上下一个调度磁道的值,再按前面的算法进行,直到磁道全部都调度完毕,得到总的寻道长度,除以 n 得到平均寻道长度。1.2 数据结构Hand:当前磁道号; DiscLine10:随机

3、生成的磁道号; void SetDI(int DiscL)生成随机磁道号算法; void CopyL(int Sour,int Dist ,int x) 数组 Sour 复制到数组 Dist 复制到 x 个数 四 详细设计; void DelInq(int Sour,int x,int y) 数组 Sour 把 x 位置的数删除,x 后的数组元素向前挪一位. void PaiXu()寻道长度由低到高排序void CSCAN(int Han,int DiscL)循环扫描算法(CSCAN)1.3 流程图哈尔滨理工大学课程设计报告- 1-哈尔滨理工大学课程设计报告- 2-1.4 实现技术为实现上述设

4、计,采用 C+语言,VS2008 开发环境。具体采用的技术如下:循环扫描算法实现步骤如下:输入总磁道数(你可以输入 200),点确定,进入第二个界面,再输入磁盘调度序列个数(你可以输入 5),然后点确定。依次输入 5 个值,再输入正在调入的磁道,选择磁盘调度算法 1 2 中的任意一个,若选择 1 后确认,选择磁道走向 1.2 若选择 1,点确定,先输出排序后的磁盘序列:(13 20 89 113 189 ),再输出调度序列为:( 89 20 13 189 113 89)并且求出了总寻道长度为 352,平均寻道长度为 70.4。运行结果如下:1.5 设计结论和心得通过课程设计得到如下结论:本次实

5、验首先要了解磁盘调度方法的工作原理。在课程设计前的准备工作时,先把这部分工作做完了。在设计总的程序框架的时候,要注意各功能模块的位置,尽量做到简洁、有序;各功能模块与哈尔滨理工大学课程设计报告- 3-主程序要正确衔接。 有如下几点心得体会:至此,计算机操作系统课程设计算法已经完成。此次设计基本完成了所规定的功能,但由于这次设计的时间比较仓促,其中不免会有些纰漏,比如在程序的实现上还不够严谨,出错处理不够完善等多方面问题,这些都有进一步改善。由于平时上课不是很认真许多概念没有理解清楚,导致在做设计时有点无从下手的感觉,只好边实验边看书直到弄懂概念后才开始做设计导致时间有点紧张,最终在同学和老师的

6、指导下我完成了设计,此设计基本能够实现规定的要求但是还是不够完善,很多东西做的不够好,程序不够完善和严谨。此次课程设计中我学到了很多东西,无论在理论上还是实践中,都得到不少的提高,这对于我以后的工作和学习都有一种巨大的帮助。#include#include#includeusing namespace std;void menu() coutqueuei ) i+; 哈尔滨理工大学课程设计报告- 4-if ( in-1 ) return n-1; /当前磁道号大于磁盘请求序列中的所有磁道 if ( i=0 ) return -1; /当前磁道号小于磁盘请求序列中的所有磁道 else retur

7、n i-1; /返回小于当前磁道号中最大的一个/*=使用冒泡算法从小到大排序=*/int *bubble(int queue,int m) int i,j;int temp;for( i=0; i queuej) temp=queuei; queuei=queuej; queuej=temp; coutdirection; int count=0; /count 表示磁道移动的长度 *bubble(queue,n); fixi=fix(queue,n,headstarts); cout-1;-i) cout-1;-i) cout-1;i-) coutfixi;i-) cout diskrode

8、; coutn; int *queue; queue =(int*)malloc(n*sizeof(int); /给 queue 数组分配空间. int *queue_copy; queue_copy =(int*)malloc(n*sizeof(int); coutqueuei; for ( i=0;iheadstarts; int menux; menu(); coutmenux; while (menux !=0) 哈尔滨理工大学课程设计报告- 9- if (menux =1) CSCAN(queue,n,diskrode,headstarts);if (menux =2) coutme

9、nux; coutPAGE_SHIFT);out:return ret; 2.1 功能说明这一段程序的主要功能为:(1)进程对内存区域的分配最终多会归结到 do_mmap()函数上来,同样释放一个内存区域使用函数 do_ummap(),它会销毁对应的内存区域。 (这里 do_ummap 暂不做说明)(2)Linux 使用内核函数 do_mmap()完成可执行映像等向虚拟区域的映射,由它建立有关的虚存区域,并指定虚存区域的开始地址、虚存大小以及属性等。2.2 接口说明本程序的输入参数为:file :表示要映射的文件。offset:文件内的偏移量,因为我们并不是 下子全部映射一个文件,可能只是 映

10、射文件的一部分,offset 就表示那部分的起始位置。len:要映射的文件部分的长度。addr:虚拟空间的一个地址,表示从这个地址开始查找一个空闲的虚拟区。prot:指定对这个虚拟区的存取权限。输出结果为:该段程序返回的应为 long 类型的数据,为经过 do_mmap()映射处理后的虚存区域的起始地址。否则则返回 MAP_FAILED(1) 。哈尔滨理工大学课程设计报告- 12-2.3 局部数据结构本程序共有 4 个局部变量及数据结构,其类型定义及语义如下:struct mm_struct/mm_struct 结构包含了用户进程与存储有关的信息struct vm_area_struct mm

11、ap; /*指向虚拟内存段双向链表指针 */struct vm_area_struct *mmap_avl;/*指向虚拟内存段 AVL 树指针 */pgd_t *pgd; /*进程页目录起始地址 */int map_count; /*此进程所用虚拟内存的块数*/unsigned long start_code,end_code; /*进程代码段起始地址和结束地址*/unsigned long start_data,end_data;/*进程数据段起始地址和结束地址 */unsigned long start_stack; /*进程堆栈段起始地址 */unsigned long rss; /*进程驻留在物理内存的页面总数 */struct vm_struct/为虚拟内存结构体unsigned l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号