gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:29 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

写一个类HardDiskSim::Abstract,3个子类seek_time()spin_time(),和read_time()

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

第一个例子:

 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 语言编写这种代码很有趣。

关于algorithm - 硬盘调度模拟器算法(track to track timing)Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com