硬盘调度模拟器算法(跟踪时序)perl



我正在尝试用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,班级编写这种代码。

最新更新