《SSTF磁盘调度算法操作系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《SSTF磁盘调度算法操作系统课程设计报告.doc(11页珍藏版)》请在三一办公上搜索。
1、哈尔滨理工大学课程设计(课程名称)题目: SSTF磁盘调度算法班级: 姓名: 指导教师:系主任: 2014年03月01日目 录1SSTF磁盘调度算法课程设计11.1 题目分析11.2 数据结构11.3 流程图11.4 实现技术21.5 设计结论和心得22 Linux代码分析32.1 功能说明32.2 接口说明32.3 局部数据结构32.4 流程图32.5 以实例说明运行过程4第1章1SSTF磁盘调度算法课程设计1.1 题目分析SSTF磁盘调度算法问题是操作系统中的一个重要问题。主要要求访问的磁道与当前磁头所在磁道距离最近,以使每次的寻道时间最短。故SSTF较之FCFS有更好的寻道性能。1.2
2、数据结构SSTF磁盘调度算法问题中涉及的数据结构是定义数组str,存放输入的数据,用stri表示输入第i+1个数据,数组cidao和str意义一样。全局变量n,表示磁道的最大个数,now表示当前磁道号,全局变量sum和ave,表示总的寻道时间和平均寻道长度。用变量i和j,表示第i+1和j+1磁道,变量k表示任意磁道,变量d表示选择移动的方向,有两个取值 1表示向外,0表示向内。用伪代码表示如下:intscan(LinklistL,intCurrent)LNode*p,*q,*s;floatsum=0;if(L-next!=NULL)p=L-next; while(p-datanext; 用主要
3、代码表示如下:Now=printnow(0;if(cidaom-i=now) sum=printin(cidao,now,m);if(nowcidao0nowcidaom-i)Count”磁盘扫描序列为:”;While(cidaok=0)&(rm)if(now-cidaoi20)&0xffc);/*_pg_dir=0*/to_dir=(unsignedlong*)(to20)&0xffc); /计算要复制的内存块占用的页表数(也即目录项数)。size=(unsigned)(size+0x3fffff) /下面开始对每个占用的页表依次进行复制操作。Outofmemory,seefreeing*/
4、22;for(size-0from_dir+,to_dir+) /如果目的目录项指定的页表已经存在(P=1),则出错,死机。if(1&*to_dir) panic(copy_page_tables:alreadyexist); /如果此源目录项未被使用,则不用复制对应页表,跳过。if(!(1&*from_dir)continue; /取当前源目录项中页表的地址from_page_table。from_page_table=(unsignedlong*)(0xfffff000&*from_dir); /为目的页表取一页空闲内存,如果返回是0则说明没有申请到空闲内存页面。返回值=-1,退出。if(
5、!(to_page_table=(unsignedlong*)get_free_page()return-1;/*Outofmemory,seefreeing*/ /设置目的目录项信息7是标志信息,表示(Usr,R/W,Present)。*to_dir=(unsignedlong)to_page_table)|7; /针对当前处理的页表,设置需复制的页面数。如果是在内核空间,则仅需复制160页,否则需要/复制1个页表中的所有1024页面nr=(from=0)?0xA0:1024; /对于当前页表,开始复制指定数目nr个内存页面。for(nr-0from_page_table+,to_page_
6、table+)this_page=*from_page_table;/取源页表项内容。if(!(1&this_page)/如果当前源页面没有使用,则不用复制。continue; /复位页表项中R/W标志置0)。(如果U/S位是0,则R/W就没有作用。如果U/S是1,而R/W是0,/那么运行在用户层的代码就只能读页面。如果U/S和R/W都置位,则就有写的权限。)this_page&=2; *to_page_table=this_page;/将该页表项复制到目的页表中。/如果该页表项所指页面的地址在1M以上,则需要设置内存页面映射数组mem_map,于是计算/页面号,并以它为索引在页面映射数组相应
7、项中增加引用次数。if(this_pageLOW_MEM)*from_page_table=this_page;/令源页表项也只读?。this_page-=LOW_MEM;this_page=12;mem_mapthis_page+; invalidate();/刷新页变换高速缓冲。return0;2.1 功能说明这一段程序的主要功能为:(1)复制进程的页目录页表;2.2 接口说明本程序的输入参数为:unsignedlongfrom,unsignedlongto,longsize输出结果:为将进程的页目录页表复制:2.3 局部数据结构本程序共有5个局部变量及数据结构,其类型定义及语义如下:un
8、signed long * from_page_table;/记录复制文件的位置unsigned long * to_page_table;/目标文件位置unsigned long this_page;/页目录unsigned long * from_dir, * to_dir;/页表unsigned long nr;记录页表页面数2.4 流程图本程序的流程图如图2所示图2程序流程图2.5 以实例说明运行过程例如,当有多个进程到达,P表示生产者进程,C表示消费者进程,到达序列为PPPCCPP时,根据分析,运行结果应为:例如,系统需要交换页面时,需要对页面复制,根据分析,运行结果应为:交换成功。返回值为零 实际运行结果如下: 返回值为零,页面已交换。实际运行结果如下: