您是第 位访客

flashsim 源码分析(五): flashsim 的初始化

flashsim 的配置

flashsim 的源码目录下有个 ssd.conf 文件,对于 SSD 的一些参数可以在这个文件里面进行设置。还有一些默认的参数会在 ssd_config.cpp 文件中作为全局变量进行设置。

当需要模拟一个 SSD 时,首先需要调用 load_config(), 这个函数会读取配置文件,将配置文件中的信息保存在一些全局变量中。

flashsim 的初始化

flashsim 源码分析(三): 总线通道中的交叉

在 SSD 的读写中,很多过程都需要占用总线,有效利用总线的空闲时间可以降低 SSD 的响应时间。如果交叉地进行读写操作,这样可以提高总线的利用效率。

每一个总线通道(bus channel)上连接一个 package 里的所有 die。每个总线通道都是独立和并行的,不同通道上的操作是互相不干扰的。

flashsim 源码分析(一):安装 flashsim

关于 flashsim,现在有两个版本,一个是需要结合 disksim-3.0 一起使用的,一个是可以独立运行的。

这里介绍的是在 github 开源的可以独立运行的那个 flashsim。关于与 disksim-3.0 结合使用的 flashsim 后面会介绍。

flashsim 是利用 C++ 开发的闪存模拟工具,同时还实现了几种不同的 FTL 算法。

flashsim 需要运行在 64 位的操作系统上。

利用概率算法求解八皇后问题

前面介绍了通过回溯法求解八皇后问题

但是当皇后的数量较多时,回溯法非常地耗时。所以提出了一种基于概率地随机放置皇后的方法。

每次都将8个皇后随机放在8行,如果满足条件就成功,否则全部重新放置,直到成功为止。

实验表明,这样地放置方法比回溯法更快。

还有一种优化就是对于一部分皇后随机放置,另一部分皇后采用回溯法放置,这样效果会更好。

回溯法求解八皇后问题

Problem

该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出的,在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

利用概率算法估算集合大小

原理

设集合 $ X $ 中有 $ n $ 个元素,如果有放回地随机均匀和独立地从 $ X $中选取元素,设取第 $ k $ 次时,恰好第一次重复出现之前所选取的元素。如果 $n$ 足够大,那么 $k$ 的期望趋近为:

$$ E(k) = \beta \sqrt{n} $$

其中,

$$ \beta = \sqrt{\pi/2} \approx 1.253 $$