ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:208.13KB ,
资源ID:6842824      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6842824.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(磁盘调度算法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

磁盘调度算法.docx

1、磁盘调度算法磁盘调度算法2 学 号:_ 班 级: 指导老师: 姓名 : 目录 21课程设计目的 31.1编写目的 32课程设计内容 32.1设计内容 33课程设计方案 43.1模块划分 43.2子模块程序流程图 64测试数据和截图 74.1测试数据 74.2测试抓图 75总结体会 86程序源代码 8 2014.3.171课程设计目的1编写目的 本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对扫描算法以及循环扫描算法等磁盘调度算法的理解。2课程设计内容系统主界面可以灵活选择某种算法,算法包括:扫描算法(SCA

2、N)、循环扫描算法(CSCAN)。1、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优

3、先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。2、循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。3模块划分本系统划分为2个模块:扫描算法模块void SCAN()

4、和循环扫描算法模块:void CSCAN() 1.扫描算法模块:void SCAN() 将磁道号用冒泡法从小到大排序,输出排好序的序列,输入当前磁道号,选择移动臂的移动方向,根据当前磁道在已排的序列中的位置,选择扫描的顺序,求出平均寻道长度,输出移动的平均磁道数。主要代码:/=排序函数,将各进程申请的磁道按从小到大排列=void Sort()int temp;for(int i=N-1;i=0;i-)for(int j=0;jSortOrderj+1)temp=SortOrderj;SortOrderj=SortOrderj+1;SortOrderj+1=temp;/=SCAN,扫描算法= v

5、oid SCAN()int m,n,temp;temp=BeginNum;Sort();coutm;if(m=1)direction=true;else if(m=0)direction=false;elsecout输入错误!;for(int i=0;iN;i+)if(SortOrderiBeginNum)continue;elsen=i;break;if(direction=true)for(int i=n;i=0;j-)MoveDistanceN-1-j=abs(SortOrderj-temp);temp=SortOrderj;FindOrderN-1-j=SortOrderj;elsef

6、or(int i=n-1;i=0;i-)MoveDistancei=abs(SortOrderi-temp);temp=SortOrderi;FindOrdern-i-1=SortOrderi;for(int j=n;jN;j+)MoveDistancej=abs(SortOrderj-temp);temp=TrackOrderj;FindOrderj=SortOrderj;3程序流程图: 4.1测试数据,扫描算法(1)当前磁道号大于磁道序列中的最大的磁道号时 输入磁道序列:55 58 39 18 90 160 150 38 184当前磁道号:200(2)当前磁道号小于磁道序列中的最小的磁道号

7、时输入磁道序列:55 58 39 18 90 160 150 38 184当前磁道号:0(3)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号(磁头向外)时输入磁道序列:55 58 39 18 90 160 150 38 184当前磁道号:100(4)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号(磁头向内)时输入磁道序列:55 58 39 18 90 160 150 38 184当前磁道号:1004.2测试结果, 测试抓图扫描算法5体会通过此次课程设计,我对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种算法先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫

8、描算法(SCAN)、循环扫描算法(CSCAN)有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。6程序源代码#include#include#includeusing namespace std;const int MaxNumber=100;int TrackOrderMaxNumber;int MoveDistanceMaxNumber;/移动距离int FindOrderMaxNu

9、mber;/寻好序列double AverageDistance;/平均寻道长度bool direction;/方向 true时为向外,false为向里int BeginNum;/开始磁道号int M=500;/磁道数int N;/提出磁盘I/O申请的进程数int SortOrderMaxNumber;/排序后的序列bool FinishedMaxNumber;int DataNum(FILE *);struct StdudNode int no; struct StdudNode *next;struct StdudNode *head,*thisN,*newN;/struct StdudN

10、ode *begin;void NewNode(void) newN=(struct StdudNode *)malloc (sizeof(struct StdudNode); if(head=NULL) head=newN; else thisN=head; while(thisN-next!=NULL) thisN=thisN-next; thisN-next=newN; thisN=newN; coutnenter no:thisN-no; thisN-next=NULL;void Inith() coutN; for(int i=0;ino; thisN=thisN-next; for

11、(int j=0;jN;j+) MoveDistancej=0; coutBeginNum; for(int k=0;kN;k+) Finishedk=false; for(int l=0;lN;l+) SortOrderl=TrackOrderl;void FileReader()/从文件读取。 FILE *file; if(file=fopen(7.txt,r) N=DataNum(file); for(int i=0;iN;i+) fscanf(file,%d,&TrackOrderi); for(int j=0;jN;j+) MoveDistancej=0; coutBeginNum;

12、 for(int k=0;kN;k+) Finishedk=false; for(int l=0;lN;l+) SortOrderl=TrackOrderl; else coutFile not found!endl; int DataNum(FILE *f) int temp; int i=0; while(!feof(f) fscanf(f,%d,&temp);/ couttempendl; i+; fseek(f,0L,0);/ couti=0;i-)/ for(int j=0;ji;j+) for(int i=0;iN-1;i+) for(int j=0;jSortOrderj+1)

13、temp=SortOrderj; SortOrderj=SortOrderj+1; SortOrderj+1=temp; /=SCAN,扫描算法= void SCAN() int m,n,temp; temp=BeginNum; Sort(); coutm; if(m=1) direction=true; else if(m=0) direction=false; else cout输入错误!; for(int i=0;iN;i+) if(SortOrderiBeginNum) continue; else n=i; break; if(direction=true) for(int i=n;

14、i=0;j-) MoveDistanceN-1-j=abs(SortOrderj-temp); temp=SortOrderj; FindOrderN-1-j=SortOrderj; else for(int i=n-1;i=0;i-) MoveDistancen-1-i=abs(SortOrderi-temp); temp=SortOrderi; FindOrdern-1-i=SortOrderi; for(int j=n;jN;j+) MoveDistancej=abs(SortOrderj-temp); temp=SortOrderj; FindOrderj=SortOrderj; /=

15、CSCAN,循环扫描算法= void CSCAN() int m,n,temp; temp=BeginNum; Sort(); coutm; if(m=1) direction=true; else if(m=0) direction=false; else cout输入错误!; for(int i=0;iN;i+) if(SortOrderiBeginNum) continue; else n=i; break; if(direction=true) for(int i=n;iN;i+) MoveDistancei-n=abs(SortOrderi-temp); temp=SortOrder

16、i; FindOrderi-n=SortOrderi; for(int j=0;j=0;i-) MoveDistancen-1-i=abs(SortOrderi-temp); temp=SortOrderi; FindOrdern-1-i=SortOrderi; for(int j=N-1;j=n;j-) MoveDistanceN-j+n-1=abs(SortOrderj-temp); temp=SortOrderj; FindOrderN-j+n-1=SortOrderj; /=计算平均寻道时间=void Count() int Total=0; for(int i=0;iN;i+) To

17、tal+=MoveDistancei; AverageDistance=(double)Total)/(double)N);void Show() coutsetw(20)被访问的下一个磁道号setw(20)移动距离(磁道数)endl; for(int i=0;iN;i+) coutsetw(15)FindOrderisetw(15)MoveDistanceiendl; coutsetw(20)平均寻道长度:AverageDistanceendl; coutendl;int main() int y=1; int s1,s2; while(y) couts1;/ couts; switch(s

18、1) case 1: Inith(); couts2; switch(s2) case 1: SCAN();Count();Show(); break; case 2: CSCAN();Count();Show(); break; break;/ case 2:CSCAN();Count();Show();break; case 2: FileReader(); couts2; switch(s2) case 1: SCAN();Count();Show(); break; case 2: CSCAN();Count();Show(); break; break; coutp; y=p; / exit(0); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1