linux设备驱动程序之并发和竞态(一)

信号量的头文件在<asm/semaphore.h>,所以要使用信号量就必须包含这个头文件。 声明:struct semaphore sem; 初始化: 1、静态初始化: DECLARE_MU...

2015-06-28 12:59:33

阅读数:756

评论数:0

linux 文件系统之SSD

固态驱动器当前非常流行,但是嵌入式系统很久以前就开始使用固态驱动器进行存储。您可以看到 flash 系统被用于个人数字助理(PDA)、手机、MP3 播放器、数码相机、USB flash 驱动(UFD),甚至笔记本电脑。很多情况下,商业设备的文件系统可以进行定制并且是专有的,但是它们会遇到以下挑战。...

2015-06-17 11:24:58

阅读数:2026

评论数:0

SSD 之wl(wear leveling)算法分析

转来一篇关于NAND FLASH均衡算法的文章,加上一点思考和笔记,认为这种思考有助于更深刻的理解,更好的记忆,所以也算半原创了吧,最起码笔记是原创的。有意思的是,帖子提起这个算法并不是因为嵌入式开发的需要,而是企业存储。因为提到硬盘驱动器HDD的速度硬伤,目前估计就SSD一种好的存储介质解决方案...

2015-06-17 11:17:19

阅读数:3408

评论数:0

linux环境编程之多线程同步

多线程同步,当有多个线程同时访问共享内存时就会产生数据不一致性。所以为了保证数据的一致性必须让线程同步,同步方式有下面几种: 互斥量         互斥量从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,访问完后释放互斥量上的锁。对互斥量加锁后,任何其他的线程对互斥量加锁都会被阻塞,直到互...

2015-06-16 20:46:05

阅读数:753

评论数:0

SSD 之LBA和PBA

LBA,全称为Logical Block Address,是PC数据存储装置上用来表示数据所在位置的通用机制,我们最常见到使用它的装置就是硬盘。LBA可以指某个数据区块的地址或者某个地址上所指向的数据区块。打个比方来说,LBA就等于我们平常使用的门牌地址(如:中华人民共和国广东省广州市中山四路26...

2015-06-16 16:21:25

阅读数:2315

评论数:0

SSD 之WL磨损平衡

闪存寿命是以P/E次数来计算的,而WL就是确保闪存内每个块被写入的次数相等的一种机制。若没有这个机制,SSD内的闪存颗粒就无法在同一时间内挂掉,那对用户来说就是灾难。        会出现这种情况的原因在于,用户在LBA空间里的数据更新速度是不同的,有部分是经常需要更新,而有些却长期不需要变更,...

2015-06-16 16:19:51

阅读数:2182

评论数:0

SSD 之FTL转换层

闪存的读写单位为页,而页的大小一般为4KB或8KB,但我们的操作系统读写数据是按HDD的扇区尺寸进行的(512Byte(字节)),更麻烦的是闪存擦除以块作单位,而且未擦除就无法写入,这导致操作系统现在使用的文件系统根本无法管理SSD,需要更换更先进、复杂的文件去解决这个问题,但这样就会加重操作系统...

2015-06-16 16:18:33

阅读数:2160

评论数:0

SSD 之GC垃圾回收机制

在前面向大家讲解FTL时,我们提到了GC的操作,所谓GC就是把一个闪存块里的‘有效’页数据复制到一个‘空白’块里,然后把这个块完全擦除。GC是SSD里的一个非常关键的操作,其效率对性能有决定性影响。闪存块里‘有效’页的数量对GC效率有决定性的影响,因数量越少,需要复制的页就越少, 花费的时间也...

2015-06-16 16:17:06

阅读数:3047

评论数:0

SSD 之Trim指令

Trim,其实是一个ATA指令,并无正式中文名称,操作系统发送此指令给SSD主控,以通知它哪些数据占用的地址是‘无效’的。        在讲解Trim的重要性前,先说一点文件系统的相关知识。当我们在操作系统中删除一个文件时,系统并没有真正删掉这个文件的数据,它只是把这些数据占用的地址标记为‘空...

2015-06-16 16:15:24

阅读数:2529

评论数:0

SSD 之OP预留空间

SSD上的OP指的是用户不可操作的容量,大小为实际容量减去用户可用容量,OP区域一般被用于优化操作如:WL,GC和坏块映射等。        OP一般分三层(见下图)。第一层容量固定为SSD标称容量的7.37%,这是因为标称容量采用千进制为单位,而NAND颗粒容量单位为1024进制,两者正好相差约...

2015-06-16 16:12:27

阅读数:2219

评论数:0

SSD 之WA写入放大

WA是闪存及SSD相关的一个极为重要的属性。由于闪存必须先擦除才能再写入的特性,在执行这些操作时,数据都会被移动超过1次。这些重复的操作不单会增加写入的数据量,还会减少闪存的寿命,更吃光闪存的可用带宽而间接影响随机写入性能。WA这个术语在2008年被Intel公司和SiliconSystems公司...

2015-06-16 16:09:41

阅读数:1199

评论数:0

SSD 之BBM坏块管理机制

不管WL算法如何高明,在使用中都会碰到一个头痛的问题,那就是坏块,所以一个SSD必须要有坏块管理机制。何谓坏块?一个闪存块里包含有不稳定的地址,不能保证读/写/擦时数据的准确性。        坏块分出厂坏块和使用过程中出现的坏块,SSD有坏块表来管理坏块。出厂坏块在上面会有标记,所以很容易...

2015-06-16 16:05:05

阅读数:1482

评论数:0

SSD 之ECC校验和纠错

ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法。上一节的BBM中我们提到过,NAND闪存在生产和使用中都会产生坏块,BBM就是坏块的管理机制,而要有效管理坏块的首要前提就是有可靠的坏块...

2015-06-16 16:02:10

阅读数:3837

评论数:0

SSD 之写入放大带来的难题

NAND闪存的写入(P/E循环)次数有限,SLC的量级是1万-10万次,而MLC普遍只有3000-5000次,TLC则更少,因此围绕SSD可靠性的争议和研究就没停止过,随便搜索SSD的资料见的最多的就是讨论SSD可靠性(reliability)的文章。        当然,也有一种说法称即便只有3...

2015-06-16 15:58:53

阅读数:1966

评论数:0

linux环境编程之线程基础知识

/tmp/ccc9R9dJ.o: In function `main': test.c:(.text+0x3c): undefined reference to `pthread_create' collect2: ld returned 1 exit status 就很可能是因为编译时没有加-l...

2015-06-14 21:46:12

阅读数:819

评论数:0

买哪种牌子的笔记本电脑好呢?

其实这是个被问烂了的问题,我想每个有电脑的人都问过这样的问题,因为谁买电脑的时候都想买个好一点的。我大一买电脑的时候也是这样的,找各种资料对比,我是从农村来的,上大学前我根本不知道电脑和电视有什么区别。为买个好电脑我查各种资料,过了一两个礼拜,我竟然对电脑的各种组件都有了一定的理解。比上课听老师讲...

2015-06-14 10:46:08

阅读数:3241

评论数:0

多线程的生产者和消费者问题

多线程的生产者和消费者问题是比较经典的多线程问题,如果知道编码解决生产者和消费者问题,那么对于多线程应该基本算掌握了。我不知道大家的生产者和消费者问题是怎么样的(应该有几个版本吧),这里我说下我的生产者和消费者问题: 有多个生产线程,他们只负责生产资源;有多个消费者,同样他们只负责...

2015-06-12 14:51:55

阅读数:2663

评论数:0

ubunte中用ibus-setup安装中文输入法

(process:2553): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale. Traceback (most recent call last): File "...

2015-06-09 23:15:43

阅读数:1878

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭