硬盘调度模拟器算法(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。
我正在努力掌握 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。