操作系统实习报告--文件管理模拟.docx_第1页
操作系统实习报告--文件管理模拟.docx_第2页
操作系统实习报告--文件管理模拟.docx_第3页
操作系统实习报告--文件管理模拟.docx_第4页
操作系统实习报告--文件管理模拟.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统小学期 -文件管理模拟 学院:信息科学与技术 专业:计算机科学与技术 年级: 班级: 姓名: 学号: 日期:2011年9月 一. 问题描述 文件管理是操作系统的五大职能之一,主要涉及文件的逻辑组织和物理组织,目录的结构和管理。主要的磁盘调度算法有:1.先来先服务算法(fcfs); 2.最短寻道时间优先算法(sstf); 3.扫描算法(scan); 4.循环扫描算法(cscan)等。用程序模拟磁盘的调度过程,并计算各磁盘调度算法包括先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法的平均寻道长度。二. 问题分析在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。先来先服务(fcfs :afirst-come-first-served)的策略,即先来的请求先被响应。fcfs策略看起来似乎是相当公平的,但是当请求的频率过高的时候fcfs策略的响应时间就会大大延长。fcfs策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用fcfs策略。这个过程就叫做磁盘调度管理。有时候fcfs也被看作是最简单的磁盘调度算法。 最短时间优先算法(sstf)选择这样的进程。要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。 扫描(scan)调度算法:该算法不仅考虑到欲访问 的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,scan算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。 循环扫描(cscan)算法:当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,cscan算法规定磁头单向移动,本实验已完全能演示循环扫描的全过程。三. 数据模型描述int hand = 10; /初始的磁道数 int limit = 10; /寻找的范围int jage=0;float aver = 0; int nall = 0;int dis = new int10;/存放寻道顺序 int, best=new int50,2; /best1存放移动磁道数,best0存放算法的序号 四. 算法描述(1)先来先服务算法(fcfs)public void fcfs(int han,int discl) int rline = new int10; int i,k,all,temp;/temp是算移动的磁道距离的临时量 all=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数 copyl(discl,rline,9); /复制磁道号到临时数组rline all=han-rline0; for(i=0;i=9;i+) temp=rline0-rline1; if(temp0) temp=(-temp);/移动磁道数为负数时算出相反数作为移动磁道数 result.text += rline0+ ; all=temp+all; delinq(rline,0,k); k-; bestjage,1=all;/best1存放移动磁道数 bestjage,0=1; /best0存放算法的序号为:1 jage+; aver=(float) all)/10;/求平均寻道次数 label7.text = all.tostring();label9.text = aver.tostring(); 流程图如下: (2)最短时间优先算法(sstf)public void sstf(int han,int discl) int i,j,k,h,all; int temp; /temp是计算移动的磁道距离的临时变量 int rline=new int10;/将随机生成的磁道数数组discl复制给数组rline int min; h = 0; all=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数 copyl(discl,rline,9); /复制磁道号到临时数组rline for(i=0;i=9;i+) min=64000; for(j=0;jhan)/如果第一个随机生成的磁道号大于当前的磁道号执行下一句 temp=rlinej-han; /求出临时的移动距离 else temp=han-rlinej; /求出临时的移动距离 if(tempmin) /如果每求出一次的移动距离小于min执行下一句 min=temp; /temp临时值赋予min h=j; /把最近当前磁道号的数组下标赋予h all=all+min; /统计一共移动的距离 result.text += rlineh + ; han=rlineh; delinq(rline,h,k); /每个磁道数向前移动一位 k-; bestjage,1=all;/best1存放移动磁道数 bestjage,0=2;/best0存放算法的序?为a:2 jage+;/排序序号加 aver=(float)all)/10;/求平均寻道次数 label7.text = all.tostring(); label9.text = aver.tostring(); 流程图如下:将磁道号从小到大排序输入当前磁道号arraym-1=0输出磁盘调度序列arrayj(array0=now磁头移动总距离目前的位置变为当前的位置im确定当前磁道在已排的序列中的位置now-arrayl)=(arrayr-now先向磁道号减小方向访问,再向磁道号增加方向访问输出磁盘调度序列先向磁道号增加方向访问,再向磁道号减小方向访问输出磁盘调度序列输出平均寻道长度(3)扫描算法(scan)public int scan(int han,int discl,int x,int y) int j,n,k,h=0,m,all;int t=0; int temp; int min; int rline=new int10; /将随机生成的磁道数数discl复制给数组rline int order; order=1;k=y; m=2; /控制while语句的执行 all=0; /统计全部的磁道数变量 copyl(discl,rline,9); /复制磁道号到临时数组rlinemin=64000; for(j=x;jhan) /如果第一个磁道号大于当前的磁道号执行下一句 temp=rlinej-han; /求出临时的移动距离 else temp=han-rlinej; /求出临时的移动距离 if(temp=han) /判断磁道的移动方向,即是由里向外还是由外向里 order=0; t=1; han=rlineh; delinq(rline,h,k); /每个磁道数向前移动一位 k-;while(m0) if(order=1) /order是判断磁盘扫描的方向标签,order是1的话磁道向内移动 for(j=x;j=y;j+) h=-1; min=64000; for(n=x;n=k;n+) /判断离当前磁道最近的磁道号? if(rlinen=han) temp=han-rlinen; if(tempmin) min=temp; /temp临时值赋予min h=n; /把最近当前磁道号的数组下标赋予 if(h!=-1) all=all+min; /叠加移动距离 result.text += rlineh + ; han=rlineh; /最近磁道号作为当前磁道 delinq(rline,h,k); k-; order=0; /当完成向内的移动order赋予0执行delse语句,使磁道向外移动 m-; /向内完成一次,m减一次,保证while循-环执行两次 else /order是0的话,磁道向外移动 for(j=x;j=y;j+) h=-1;min=64000; for(n=x;n=han) temp=rlinen-han; if(temp5) bestjage,1=all;/best1存放移动磁道数 bestjage,0=3;/best0存放算法的序号为:3 jage+;/排序序号加1 aver=(float)all)/10;/求平均寻道次数 label7.text = all.tostring(); label9.text = aver.tostring(); return(han);流程图如下:将磁道号从小到大排序输入当前磁道号, 移动臂的移动的方向arraym-1=0(array0=now输出磁盘调度序列i=0) for(j=0;j=9;j+) /从当前磁道号开始由内向外搜索离当前磁道最近磁道号 h=-1; min=64000; for(n=0;n=han) temp=rlinen-han; if(temp=0) tmp=rline0; for(i=0;irlinei) tmp=rlinei; han=tmp;/把最小的磁道号赋给han temp=last-tmp;/求出最大磁道号和最小磁道号的距离差 all=all+temp; /end whlie bestjage,1=all;/best1存放移动磁道数 bestjage,0=4;/best0存放算法的序号为:4 jage+;/排序序号加1 aver=(float)all)/10;/求平均寻道次数 label7.text = all.tostring(); label9.text = aver.tostring(); 流程图如下:五. 实习心得此次设计基本完成了所规定的功能,但由于这次设计的时间比较仓促,其中不免会有些纰漏,比如在程序的实现上还不够严谨,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论