Lab Week 18
实验内容:硬盘调度。
编写一个 C 程序模拟实现课件 Lecture25 中的硬盘磁头调度算法,包括FCFS、SSTF、SCAN 和 C-LOOK 调度策略。
- 固定一个硬盘柱面数;
- 输入一批随机的硬盘柱面请求序列,计算各个调度策略下的磁头移动平均总距离(假设磁头运动是理想匀速的,可以把移动距离看作是移动时间,将总时间除以请求数得到平均响应时间)。
分析上述实验结果。
磁盘调度
磁盘为现代计算机系统提供大量外存,容量以GB计数,结构如下所示。
每一层称为一个柱面,共有数千个柱面。每个柱面分有若干个扇区。每个扇区有若干个磁道。数据可以理解为储存在某个柱面的某个扇区的某个磁道上。
在通电后磁盘高速旋转每秒约转60~250次。
读取和写入数据时,磁头要移动到对应的柱面,所需时间称为寻道时间
旋转磁头到目标扇区的时间称为选择延迟
本实验仅考虑寻道时间
操作系统的一个重要职责就是有效利用硬件,让磁盘有较快的访问速度和较宽的带宽。
磁盘带宽指一段传输的总字节数除以传输的时间
当程序需要进行磁盘I/O时,将调用系统调用,但磁盘速度远远慢于内存和CPU,磁盘需要建立等待队列,维护多个待处理的请求。
磁头需要根据磁盘调度算法移动和读写信息。
本实验中不考虑磁头的读写时间。
FCFS先来先服务调度算法
按加入顺序处理I/O请求
貌似对所有进程都是公平的
如果有许多进程/请求,则在性能上接近随机调度
即每一次寻道时间的期望为三分之一的柱面数
代码中用数组模拟的FIFO队列实现
关键代码如下
if(!tim1)
{
//FCFS算法
while(fifo[h1]==pos1 && h1<=t1)
{
// 若到达了目标柱面,就执行读写
h1++;
ans1++;
}
if(h1<=t1)
{
if( fifo[h1]> pos1)
pos1++;
else
pos1--