您是第 位访客

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

flashsim 的配置

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

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

flashsim 的初始化

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

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

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

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

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

以前 flashsim 是作为 disksim-3.0 的一个插件,需要先安装disksim-3.0 才能使用,后来 flashsim 做了修改,可以独立运行。大大简化了安装过程。

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 $$

论文阅读:基于闪存的缓冲区管理算法

SSD和传统的磁盘相比,有着许多不同的特性,比如读写不对称性,异地更新,先擦除后写入等。当为闪存设计缓存策略时,我们应该充分考虑到这些特性,如果直接把针对磁盘设计的缓冲区管理算法应用到闪存上,并不能充分发挥算法的性能。

这篇文章主要介绍了目前学术界关于闪存缓冲区管理的一些算法设计。前面部分介绍的是传统的缓冲区管理算法,后面部分介绍的是基于闪存优化的缓冲区管理算法。