hdd(hard disk drive)
ssd(solid-state drive)
![]() | ![]() |
|---|---|
![]() | ![]() |
| Exploded line drawing of a modern hard disk, showing the major components. 现代硬盘的分解线图,显示了主要部件 ref link | Architecture of a solid-state drive(SSD) |
每个磁道又划分为一个个扇区
磁盘读写的最小单位是扇区(或者称为块)🎈
其中,最内侧磁道上的扇区面积最小,因此数据密度最大
扇区数:表示每条磁道上有多少个扇区
在一个盘组中,不同记录面的相同编号(位置)的诸多磁道构成一个圆柱面
每个盘面对应一个磁头 所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”
柱面数:表示硬盘每面上有多少条磁道
是指按照某种特定的记录格式所能存储信息的总量
格式化后的容量比非格式化容量要小 🎈
称为格式化后的实际容量(有效容量)(用户可以使用的容量)
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率
设
磁盘转数为r转/秒
每条磁道容量N字节
则数据传输率(DataRate: D r D_r Dr)为
有时也用旋转周期时间 T r , 简 化 记 为 T T_r,简化记为T Tr,简化记为T来描述磁盘转速:
完成一转(round)需要的时间(平均时间)
1 r / 1 T , 即 1 r : 1 T 1r/1T,即1r:1T 1r/1T,即1r:1T
如果知道转速为:
m ( r / m i n ) , 可 以 写 成 : m r m i n = 1 r 1 m m i n m r : 1 m i n 1 r : 1 m m i n = 60 m s m\ (r/min),可以写成: \\m\frac{r}{min}=\frac{1r}{\frac{1}{m}min} \\m\ r:1min \\1r:\frac{1}{m}min=\frac{60}{m}s m (r/min),可以写成:mminr=m1min1rm r:1min1r:m1min=m60s
某磁盘转速为7200 r/min
每个磁道上有160扇区(sectors)
每扇区512字节
理想情况下的传输速率DataRate?
平均存取时间由
综上:
由于寻道和找扇区的距离远近不一,故寻道时间和旋转延迟时间(扇区定位)通常取平均值
磁头寻找目标磁道的时间(寻道时间 t s t_s ts)
从磁盘读出或者向磁盘写入数据所经历的时间
这个时间取决于
每次读写的字节数b
磁盘的旋转速度r
一个磁道上的字节数N
T t = b r N T_t=\frac{b}{rN} Tt=rNb
磁头从需要读取的若干个扇区中的第一个扇区开始旋转到结束扇区的这段时间
想时间不考虑延迟和寻道的时间(只计算直接读取所需要扇区的时间)
磁盘转速为V=7200 r/min
磁盘平均寻道 T t r a c k T_{track} Ttrack时间为8ms
每一个磁道有n=1000扇区,那么读取一个扇区的纯读取时间为
1 n T = 1 1000 1 120 = 0.083 × 1 0 − 4 s = 0.083 × 1 0 − 1 × 1 0 − 3 s = 0.0083 m s ≈ 0.01 m s \frac{1}{n}T=\frac{1}{1000}\frac{1}{120} =0.083\times10^{-4}s \\ =0.083\times{10^{-1}\times{10^{-3}}}s =0.0083ms \\ \approx{0.01}ms n1T=100011201=0.083×10−4s=0.083×10−1×10−3s=0.0083ms≈0.01ms
因此:读取一个扇区的读取时间大约为0.01ms
访问一个扇区的平均存取时间为?
先来先服务(First Come First Served,FCFS)算法
FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,
该算法的优点是具有公平性。
若只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能:
若有大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度。
所以,实际磁盘调度中会考虑一些更为复杂的调度算法。
例如
磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头的初始位置是磁道100,
采用FCFS算法时磁头的运动过程中,磁头共移动了(45+3+19+21+72+70+10+112+146)=498个磁道,平均寻找长度=498/9=55.3.
s = ∑ i = 1 n Δ i t i 表 示 t t r a c k i , 表 示 第 i 次 访 问 的 磁 道 Δ i = ∣ t i − t i − 1 ∣ 定 义 t 0 为 初 始 磁 道 位 置 s=\sum_{i=1}^{n}{\Delta_{i}} \\t_i表示t_{track_i},表示第i次访问的磁道 \\ \Delta_i=|t_i-t_{i-1}| \\定义t_0为初始磁道位置 s=i=1∑nΔiti表示ttracki,表示第i次访问的磁道Δi=∣ti−ti−1∣定义t0为初始磁道位置
扫描(SCAN)算法(又称电梯调度算法)
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,
由于磁头移动规律与电梯运行相似,因此又称电梯调度算法。
假设访问序列(磁道号(而非扇区号))为S0= A 1 , ⋯ , A i , ⋯ , A n A_1,\cdots,A_i,\cdots,An A1,⋯,Ai,⋯,An
序列中理论上不应该(不必要)出现重的磁道(没有相等的元素,除非条件刻意强调)
因为,对于某个确定的(有限的)访问序列,可以在磁头到达某个磁道后将所有需要所有块一并读出到内存
假设S1是对S0排序后的结果序列 B 1 , ⋯ , B i , ⋯ , B n B_1,\cdots,B_i,\cdots,Bn B1,⋯,Bi,⋯,Bn
A 0 A_0 A0表示初始磁头所在的磁道号
典型情况
SCAN算法对最近扫描过的区域不公平,因此它在访问局部性方面不如FCFS算法和SSTF算法好。
例如,磁盘请求队列中的请求顺序分别为55,58,39,18,90,160,150,38,184,磁头初始位置是磁道100。采用SCAN算法时,不但要知道磁头的当前位置,而且要知道磁头的移动方向,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程 :
循环扫描(CircularSCANC-SCAN)算法
在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。
由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求
所以使用改进型的C-SCAN算法来避免这个问题(C-SCAN可以同时兼顾最内到和最外道及其附近磁道的访问)
采用SCAN算法和C-SCAN算法时,磁头总是严格地遵循从盘面的一端到另一端
假设访问序列(磁道号(而非扇区号))为S0= A 1 , ⋯ , A i , ⋯ , A n A_1,\cdots,A_i,\cdots,An A1,⋯,Ai,⋯,An
A 0 A_0 A0表示初始磁头所在的磁道号
如果序列S0中同时存在
A
p
<
A
0
Ap
实际磁道的访问序列从 B i → ⋯ → B n → B 1 → ⋯ → B k B_i\to\cdots{\to}{B_n}\to{B_1}\to\cdots\to{B_k} Bi→⋯→Bn→B1→⋯→Bk
那么C-SCAN算法至少会分别经过一次磁盘最外道和磁盘最内道(2次空服务转折)
例如
但是,通常的SCAN算法和C-SCAN算法指的是它们的改进版本:LOOK和C-LOOK
FCFS算法太过简单,性能较差,仅在请求队列长度接近于1时才较为理想;
SSTF算法较为通用和自然:
SCAN算法和C-SCAN算法在磁盘负载较大时比较占优势。
| 优 点 | 缺 点 | |
|---|---|---|
| FCFS算法 | 公平、简单 | 平均寻道距离大,仅应用在磁盘I/O较少的场合 |
| SSTF算法 | 性能比"先米先服务"好 | 不能保证平均寻道时间最短,可能出现"饥饿"现象 |
| SCAN算法(LOOK) | 寻道性能较好,可避免"饥饿"现象 | 不利于远离磁头一端的访问请求 |
| C-SCAN算法(C-LOOK) | 消除了对两端磁道请求的不公平 | 总体较好 |
假系统中有4个磁盘驱动器(需要2bit区分)
每个扇区地址要2+8+4+4=18bit二进制代码
RAID(磁盘阵列(Redundant Array of Independent Disks))
是指将多个独立的物理磁盘组成一个独立的逻辑盘
数据在多个物理盘上分割交叉存储、并行访问
具有更好的
存储性能
可靠性
安全性
在 RAID1~RAID5几种方案中,无论何时有磁盘损坏,都可随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏,提升了系统的可靠性
RAID0
RAID1:
提高RAID可靠性的方法
总之
闪存也有不同类型,其中主要分为NOR型和NAND型两大类。
NOR型与NAND型闪存的区别很大
NAND型比NOR型更加常见,下面主要是关于NAND型的描述
NAND(NAND flash memory)闪存是一种比硬盘驱动器更好的存储设备,在不超过4GB的低容量应用中表现得尤为明显。
结合了EPROM和EEPROM结构
NAND闪存是一种非易失性存储技术,即断电后仍能保存数据。
它的发展目标就是降低每比特存储成本、提高存储容量。
与EPROM相似,它是在EPROM基本单元电路的浮空栅极的上面再生成一个浮空栅,前者称为第一级浮空栅,后者称为第二级浮空栅。
…
这里我们还需要端正一个概念,那就是闪存的速度其实很有限,它本身操作速度、频率就比内存低得多,而且NAND型闪存类似硬盘的操作方式效率也比内存的直接访问方式慢得多。
因此,不要以为闪存盘的性能瓶颈是在接口
前面提到NAND型闪存的操作方式效率低,这和它的架构设计和接口设计有关,
NAND型闪存以块为单位进行擦除操作。
闪存的写入操作必须在空白区域进行,如果目标区域已经有数据,必须先擦除后写入,因此擦除操作是闪存的基本操作。
一般每个块包含32个512字节的页,容量16KB;
而大容量闪存采用2KB页时,则每个块包含64个页,容量128KB。
每颗NAND型闪存的I/O接口一般是8条,每条数据线每次传输(512+16)bit信息,8条就是(512+16)×8bit,也就是前面说的512字节。
但较大容量的NAND型闪存也越来越多地采用16条I/O线的设计,
一个闪存由B块组成,每块由Р页组成
![]() | expload View Solid state Drive |
|---|
除了主控芯片和缓存芯片外,PCB板上其余大部分位置都是[NAND Flash](https://baike.baidu.com/item/NAND Flash/4883033?fromModule=lemma_inlink)闪存芯片。
[NAND Flash](https://baike.baidu.com/item/NAND Flash/4883033?fromModule=lemma_inlink)闪存芯片又分为
通常,页的大小是512B4KB,每块由32~128页组成,块的大小为16KB512KB
数据是以页(page)为单位读写的 只有在一页所属的块全部被擦除后,才能写这一页
优点(比起传统磁盘)
缺点
闪存翻译层中有一个平均磨损逻辑