硬盘调度模拟器算法(跟踪定时)Perl

时间:2015-05-09 12:49:33

标签: algorithm perl scheduling timing disk

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

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

缓冲区以每毫秒1个块的形式读取,搜索,搜索和访问时间均为1ms,使计算更容易,模拟器始终在块1轨道1上启动。

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

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

因此,如果下一个服务请求是12,则arm位于第5个块的末尾,因此需要2ms才能到达正确的轨道,然后1ms到达第12个块的开始,再过1ms来访问它。

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

1 个答案:

答案 0 :(得分:0)

写一个课程HardDiskSim::Abstract,3个潜行seek_time()spin_time()read_time()

为三种方法的每个不同的值/逻辑集编写AbstractDisk的子类。

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中编写了这类代码,这是一个类。