我正在尝试用perl握住。我试图写一些脚本作为调度模拟器。FCF,SSTF和扫描和外观
我有一个数组,其中有一个块请求列表,另一个则充当缓冲区。首先,我将复制第一个请求,然后我需要确定从第一个到第二个块所需的时间。
缓冲区以每毫秒为1,寻求,搜索和访问时间为1毫秒,以使计算变得更容易,模拟器总是在块1轨道1中开始。
。http://postimg.org/image/d9osb8tkj/
因此,如果第一个块为5,则搜索时间将为3ms到第五块开始时,搜索时间将为零,因为它在同一轨道上,并且读取块的访问时间将始终为1ms。这意味着此请求的时间为4ms,因此模拟器将在接下来的4个请求中读取到缓冲区中。在第一次出现的情况下,这将是向请求提供的顺序。
因此,如果下一个服务的请求为12,则ARM在第五块的末端,因此需要2ms才能到达正确的轨道,然后1毫秒才能到达第12块块的开始,而另外1毫秒才能访问它。
我只是想知道是否有人能给我一些了解,我该如何表达为算法。只有一些指示将不胜感激。
写一个类HardDiskSim::Abstract
、3 Subs seek_time()
,spin_time()
和read_time()
为三种方法的每组不同的值/逻辑编写一个摘要disk子类。
fir示例:
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,班级编写这种代码。