【精编范文】降低磁盘队列长度-范文模板 (9页)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
== 本文为word格式,下载后可方便编辑和修改! ==
降低磁盘队列长度
篇一:操作系统磁盘寻道练习题及答案
1 假设磁盘有200个磁道,磁盘请求队列中是一些随机请求,它们按照到达的次分别处于55、58、39、18、90、160、150、38、184号磁道上,当前磁头在100号磁道上,并向磁道号增加的方向上移动,请给出按FCFS、SSTF、SCAN及CSCAN算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度?
答:FCFS SSTF SCAN CSCAN 下一磁道移动数下一磁道移动数下一磁道移动数下一磁道移动数 55 45
58 3
39 19
18
90 21 72 90585539 10150 50 150 50 32160 10 160 10 3 184 24 184 24 16 9090 18 166 38 1 58 32 3820
18
150 20 55339 1 1323965516 160 70 150 10
38 112 16010 38 1 58 3
18424 18 20 9032 184 149
平均寻道长度55.3 27.6 27.8 35.8 2 假定磁盘转速为20ms/圈,磁盘格式化时每个磁道被分成10扇区,今有10个逻辑记录(每个记录的大小刚好与扇区大小相等)存放在同一磁道上,处理程序每次从磁盘读出一个记录后要花4ms 进行处
理,现在要求顺序处理这10个记录,若磁头现在正处于首个逻辑记录的始点位置。
(1)按逆时针方向安排10个逻辑记录(磁盘顺时针方向转),处理程序处理
完这10个记录所花费的时间是多少?
(2)按最优化分布重新安排这10个逻辑记录,写出记录的安排,并计算出所
需要处理的时间。
答:
(1)读一个逻辑记录需2ms时间,读出记录后还需要4ms时间进行处理,故当磁头处于某记录的始点时,处理它共需6ms时间。逻辑记录是按逆时针方向安
排的,因此系统处理完一个逻辑记录后将磁头转到下一个逻辑记录的始点需要
16ms时间。从而可以计算出处理程序处理完这10个逻辑记录所需的时间为:
6+9*(16+6)=204ms
(2)按最优化分布重新按排这10个逻辑记录,可使处理程序处理完一个记录后,磁头刚好转到下一个记录的始点,此时,安顺时针方向安排的逻辑记录顺序分
别为:记录1、记录8、记录5、记录2、记录
9、记录6、记录3、记录10、记录7、记录4,而需要的处理时间为6*10=60ms。篇二:操作系统磁盘调度
一、实验目的:
磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的
辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有
若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次
序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需
要采用合适的寻道算法,以降低寻道时间。本实验要求学生模拟设计一个磁盘
调度程序,观察调度程序的动态运行过程。通过实验让学生理解和掌握磁盘调
度的职能。
二、实验题目:
模拟电梯调度算法,对磁盘进行移臂操作
三、提示及要求:
1、假设磁盘只有一个盘面,并且磁盘是可移动头磁盘。
2、磁盘是可供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其它想访问该磁盘的进程必须等待,直到
磁盘一次工作结束。当有多个进程提出输入输出请求而处于等待状态时,可用
电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。为此设置“驱动调度”进程。
3、由于磁盘与处理器是并行工作的,所以当磁盘在为一个进程服务时,占有处理器的其它进程可以提出使用磁盘(这里我们只要求访问磁道),即动态申请
访问磁道,为此设置“接受请求”进程。
4、为了模拟以上两个进程的执行,可以考虑使用随机数来确定二者的允许顺序,程序结构图参考附图:
5、“接受请求”进程建立一张“进程请求I/O”表,指出等待访问磁盘
6、按电梯调度算法(SCAN算法)从中选择一个等待访问的进程,按其指定的
要求访问磁道。SCAN算法参考课本第九章。算法模拟框图略。
7、图1中的“初始化”工作包括:初始化“请求I/O”表,设置置当前移臂方向;当前磁道号。并且假设程序运行前“请求I/O”表中已有若干进程(4~8个)申请访问相应磁道。
四、程序代码
#include
#include
using namespace std;
constint LENGTH=20; //定义请求磁盘队列长度
int order(int queue[],inti,int f)
inta,b,k,t;
for(a=0;a { b=a; for(k=a+1;k if(queue[k] t=queue[a];queue[a]=queue[b];queue[b]=t; } a=0,b=i-1; while(a<=b) { k=(a+b)/2; if(queue[k]==f) return k; else if(queue[k]>f) a=k+1; else b=k-1; } return k; } /***************************************************************/ void elevator(int queue[],inti,int f)//电梯调度算法先从里向外 { inta,b,flag=1; a=order(queue,i,f); cout<<"磁盘请求执行序列:"; while(flag) { for(b=a;b { if(rand()>10000) cout< else { cout<<"接受请求-->";b--; } } for(b=a-1;b>=0;b--)