小时候,经常被教育学雷锋,要助人为乐,要有钉子精神,每年还有学雷锋日。
那个时候从来没有想过:
雷锋同志作为一名普通的解放军战士(每个月津贴几块钱),怎么能随便就捐出200块。
一个普通士兵怎么会有那么多,那么好的照片。
重点是做好事从来不留名,全部记在日记里。
雷锋日记(1957-1962)应该考虑去申请吉尼斯世界纪录 – 世界上传播最广,副本最多的日记。
他影响了整整几代人,不管你信不信,反正我是被教育到了。
另外,在山的那边,海的那边的斯坦福大学胡佛档案馆,有另外一部很有名日记– 蒋介石日记(1915-1972)
据说你只要去斯坦福大学,找到胡佛档案馆,跑去问前台(也可能不是前台是地下室)大妈 – 我想看Chiang Kai-shek的日志,她不会问你是谁,从哪来,为啥看等一系列问题。
她只会问你一个问题 – which month? … 你没有看错,是个人去就给看啊。
然后你说我要看1949年10月的,大妈立马从手边的一堆箱子里翻出来拿给你看 — 是复印件。
一次只能拿一个月的,你坐在那里看,看完换下一个月的。
不能拍照,不能复印,可以手抄。
这么珍贵而且可以显摆的历史资料,早年去美国出差的时候,应该去看看啊。
这两本日记截然不同的存在方式 – 绝对集中vs广泛分散。
SSD的映射信息存放也有对应的两种方式:
-
Map block method映射块法
把映射信息集中存在特定的block上,如下图所示(这里用的是块映射)。
在map block1的第一个page里,每一个小方块序号代表逻辑块序号,小方块里存放着对应的物理块地址。
虽然在使用块映射的情况下,一个Block就可以放下全部的映射信息。但是因为映射信息更新非常频繁,这样导致erase count会增加的非常快(而且erase相对于read/program来说非常慢),一般都会使用多个Block存放映射信息从而降低erase count. (求证:是不是有把TLC模拟成SLC的方式来做map block的做法?)
二. Per block method
映射信息也可以直接分别存到每个Block中,一般存在每个Block的第一个Page的spare area中,如下图所示。
为了保证逻辑Block和物理Block之间Page的映射,逻辑页的信息直接存在该物理块的各个page的spare area里 (这块我不清楚细节,欢迎在留言里指教)
在需要Rebuild映射表时,以上两块信息都需要用到。
补充说一下:
上电时,固件都会从Flash中读出最新的映射信息并加载到RAM中,从而保证快速查询。
在工作中,固件会定期将RAM中的映射信息写入Flash中. (那些DRAMless设计,这块如何实现的?牺牲一部分性能 or 用Host方面的RAM)
而load到RAM里的,长下面这个样子:
- 1个Block有16个page
- Logical Block 00映射为Physical Block 00和10
- Logical Block 00的Page 0 存在Physical Block 10 的Page 0 上 (为什么是Physical Block 10 而不是 00,不解)
- Move flag:该Block的一些page存在另一个Block上
- Used flag:该Block正在被使用
- Old flag:该Block中数据是无效的
- Defect flag:这是一个坏块
感觉这篇文章有诸多不够透彻的地方,请大家踊跃拍砖,帮我解惑。 – by 写文章总想加点段子的SSD攻城狮