磁盘管理


基本概念

扇区sector:对于磁盘,每个磁道的扇区数并不是常量

磁道track:从外往里数,也就是说最外面为0磁道。外道数据访问速度更快(相同角速度下,半径越大线速度越大)

柱面cylinder:不同盘片相同半径的磁道所组成的圆柱

磁头head:每个磁盘有两个面,每个面都有一个磁头

Flash Disk

优点:低功耗、大容量、数据访问速度快

缺点:容量、价格、寿命、可靠性、读写不对称(读快、写慢)

两种技术:NADND、NOR

磁盘的组织与调度

主引导记录MBR

硬盘分区表DPT:64字节。分为四小部分,每个部分表示一个分区的信息,占16字节

CHS模式

柱面数NC:最大1024(10位)

磁头数NH:表示硬盘总共有几个磁头,也就是几个盘片,最多256个(8位)

扇区数NS:表示每一条磁道上有几个扇区,由于所有的0扇区用于存放固件以及一些硬盘的专用的文件,最大为63 (用 6 位存储)。用户可见扇区从1开始

8.46GB问题:
$$
1024 \times 256 \times 63 = 16,515,072 \
\text{这个扇区之前的所有物理扇区所包含的字节数} = 16,515,072 \times 512B = 8.46GB
$$

LBA模式

Logic Block Address,将磁盘驱动器可以看做一个一维的逻辑块的数组,逻辑块是最小的传输单位

CHS与LBA地址转换
$$
LBA = (NH×NS×C) + (NS×H) + (S-1)\
\
C = LBA / (NS×NH)\
H = (LBA / NS) mod NH\
S = (LBA mod NS) + 1
$$

磁盘空间的管理

位图:空闲为1,已分配为0

空闲表法:将所有空闲块记录在一个表中。主要记录两项内容:起始块号,块数

空闲链表法:把所有空闲块链成一个表,链会很长

成组链接法:把空白物理块分成组,再通过指针把组与组之间链接起来

磁盘访问时间

寻道时间:指的是把磁臂(磁头)从当前位置移动到指定磁道上所经历的时间。Ts=启动磁盘的时间s + 磁头移动n条磁道所花费的时间之和(m x n, m为常数)

旋转延迟时间:平均旋转延迟时间Tr=转一圈所需时间/2=1/(2*转速r)

传输时间:把数据从磁盘读出,或向磁盘写入数据所经历的时间,Tt = 每次所读/写的字节数b/(转速r*磁道上的字节数)

总访问时间Ta = Ts + Tr + Tt

磁盘调度算法

  1. 先来先服务算法(FCFS)
  2. 最短寻道时间优先算法(SSTF,Shortest Seek Time First):优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。可能出现饥饿现象
  3. 扫描算法(SCAN)
  4. 循环扫描算法(C-SCAN):移动臂到达最后一个柱面后,立即带动读写磁头快速返回到0号柱面,返回时不为任何的等待访问者服务,返回后可再次进行扫描。
  5. LOOK
  6. C-LOOK

提高磁盘I/O性能

  • 缓存

  • 优化数据布局

  • 提前读:顺序访问时,常采用提前读入下一块到缓冲区中

  • 延迟写:将本应立即写回磁盘的数据挂到空闲缓冲区的队列的末尾。直到该数据块移到链头时才将其写回磁盘,再作为空闲区分配出去

  • 虚拟盘:利用内存空间去仿真磁盘(RAM盘)

    Vitual disk 与disk cache的区别是:

    • Vitual disk的存放的内容由用户完全控制

    • Disk cache中的内容完全是由操作系统控制


Author: CuberSugar
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source CuberSugar !
  TOC