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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

磁盘调度实验报告.docx

1、磁盘调度实验报告实验五 磁盘调度实验学时:2学时实验类型:设计实验要求:必修一、 实验目的:磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。本实验要求学生模拟设计一个磁盘调度程序,观察调度程序的动态运行过程。通过实验让学生理解和掌握磁盘调度的职能。二、 实验内容:模拟电梯调度算法,对磁盘进行移臂操作三、 提示及要求:1、 假设磁盘只有一

2、个盘面,并且磁盘是可移动头磁盘。2、 磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。3、 由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请访问磁道,为此设置“接受请求”进程。4、 为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,程序结构图参考附图:5、

3、 “接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘的进程要求访问的磁道,表的格式如下:进程名要求访问的磁道号6、 “磁盘调度”的功能是查“请求I/O”表,当有等待访问的进程时,按电梯调度算法(SCAN算法)从中选择一个等待访问的进程,按其指定的要求访问磁道。SCAN算法参考课本第九章。算法模拟框图略。7、 附图中的“初始化”工作包括:初始化“请求I/O”表,设置置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”表中已有若干进程(48个)申请访问相应磁道。四、 实验报告:1、 实验题目。2、 程序中用到的数据结构及其说明。3、 打印源程序并附注释。4、 实验结果内容如下:

4、打印“请求I/O”表,当前磁道号,移臂方向,被选中的进程名和其要求访问的磁道,看是否体现了电梯调度(SCAN)算法。5、 体会与问题。五、 附图:开始初始化磁盘调度随机数1/2继续?接受请求输入在0,1区间内的随机数结束六 实验源程序主函数控制台main.cpp#include#includenode.h#includefcfs.h#include sstf.h#include scan.hvoid main() struct node *first=creatlist(); int n=0; while (n!=4) cout请输入你的选择:n1:先来先服务(FCFS)n; coutn; s

5、witch (n) case 1:fcfs(first);break; case 2:sstf(first);break; case 3:scan(first);break; case 4:break; default:break; 先来先服务FCFS.h#ifndef FCFS_H#define FCFS_H#include void fcfs(struct node *first) int total=0; struct node*p=first-next; int start=p-track; int last=p-track; cout该算法扫描磁道的顺序为n; while (p) t

6、otal +=abs(start-last); /coutabs(start-last)endl; couttrack; p=p-next; if (p) last=start; start=p-track; coutn先来先服务总共寻道长度:totalendl; cout先来先服务平均寻道长度:float(total)/9next; struct node*head=new node; head-next=NULL; coutnum=p-num; s-track=p-track; insert(head,s); p=p-next; struct node*p2=head-next; stru

7、ct node*p1=head; int total=0; while (head-next) while (1) couttrack; del1(p1,p2); p1=search1(head,p2,1); if (p1=NULL) break; if (p1-next) total +=abs(p2-track - p1-next-track); p2=p1-next; while (1) p1=search1(head,p2,-1); if(p1=NULL) break; if (p1-next) total +=abs(p2-track - p1-next-track); p2=p1-

8、next; couttrack; del1(p1,p2); coutn扫描(SCAN)一共寻道长度:totalendl; cout扫描(SCAN)平均寻道长度:double(total)/9next,*re=NULL,*q1=head; int a1=0,a2=0; if (q) a1=a*(q-track - p2-track); while (q) a2=a*(q-track - p2-track); if (a1=0 )|(0=a2&a2next; return re;/返回相对当前磁道距离最短的磁道的前一进程要求访问的磁道位置void del1(struct node*p1,struc

9、t node*p2) p1-next=p2-next;#endif最短距离优先调度算法sstf.h#ifndef SSTF_H#define SSTF_Hstruct node*search(struct node*,struct node*);void del(struct node*,struct node*);void sstf(struct node*first) struct node*p=first-next; struct node*head=new node; head-next=NULL; coutnum=p-num; s-track=p-track; insert(head

10、,s); p=p-next; struct node*p2=head-next; struct node*p1=head; int total=0; while (p2) couttrack; del(p1,p2); p1=search(head,p2); if (p1-next) total +=abs(p2-track - p1-next-track); p2=p1-next; coutn最短寻道时间优先一共寻道长度:totalendl; cout最短寻道时间优先平均寻道长度:double(total)/9next,*re=head,*q1=head; int a1=0,a2=0; if

11、(q) a1=abs(q-track - p2-track); while (q) a2=abs(q-track - p2-track); if (a2next; return re;/返回相对当前磁道距离最短的磁道的前一进程要求访问的磁道位置void del(struct node*p1,struct node*p2) p1-next=p2-next;#endif公共节点头信息node.h#ifndef NODE_H#define NODE_Hstruct node int num; /进程号 int track; /进程要求访问的磁道号 node *next; ;struct node*c

12、reatlist();void insert(struct node *first,struct node *s); /插入一个节点(尾插法)struct node*creatlist() struct node*first=new node; first-next=NULL; int trackk10=100,55,58,39,18,90,160,150,38,184; for (int i=0;inum=i; s-track=trackki; insert(first,s); return first;void insert(struct node *first,struct node *s) struct node *r=first; struct node *p; while(r)p=r;r=r-next; p-next=s;p=s; p-next=NULL;#endif七实验结果

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

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