硬盘调度模拟器算法(track to track timing)Perl

Hard Disk scheduling simulator algorithm (track to track timing) Perl

我正在努力掌握 perl。我正在尝试编写一些脚本作为调度模拟器。 FCFS、SSTF 和扫描查看

我有一个数组,其中包含块请求列表,另一个数组用作缓冲区。首先我会复制第一个请求,然后我需要计算出从第一个块到第二个块所需的时间。

缓冲区以每毫秒 1 的速度读取块,查找、搜索和访问时间均为 1 毫秒,以使计算更容易一些,模拟器始终从块 1 轨道 1 开始。

http://postimg.org/image/d9osb8tkj/

所以如果第一个块是 5,搜索时间将是 3ms 遍历到第 5 个块的开始,寻道时间将为零,因为它在同一轨道上,读取块的访问时间将始终为 1ms。这意味着此请求的时间将为 4 毫秒,因此模拟器会将接下来的 4 个请求读入缓冲区。按照先到先得的原则,这就是请求的服务顺序。

因此,如果下一个服务请求是 12,则手臂位于第 5 个块的末尾,因此需要 2 毫秒才能到达正确的轨道,然后需要 1 毫秒才能到达第 12 个块的开始,另外需要 1 毫秒才能访问它。

我只是想知道是否有人可以告诉我如何将其表达为算法。只是一些指针将不胜感激。

写一个classHardDiskSim::Abstract、3个子seek_time()spin_time()read_time()

为这三种方法的每组values/logic写一个AbstractDisk的子class。

第一个例子:

 package HardDiskSim::Simple;
 use base qw(HardDiskSim::Abstract);

 our $SECTORS_PER_TRACK = 5;
 our $SEEK_TTIM_PER_TRACK = 1;
 sub read_time { return 1 }
 sub seek_time { 
   my $block = @_;
   my $tracks_to_seek = int($block / $SECTORS_PER_TRACK);
   return $tracks_to_seek * $SEEK_TTIM_PER_TRACK;
 }

 sub spin_time {
    # compute head position at end of seek using seek time and RPM of disk
    # compute number of sectors to spin past using computed head position
    # return number_of_sectors_to_spin_past * time_per_sector
 } 

我很高兴在 1985 年用 Fortran 编写这种代码,class。