> For the complete documentation index, see [llms.txt](https://aye10032.gitbook.io/os/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aye10032.gitbook.io/os/di-si-zhang-wen-jian-guan-li/4.3-ci-pan-de-zu-zhi-yu-guan-li.md).

# 4.3 磁盘的组织与管理

## 4.3.1 磁盘的结构

**磁盘**：磁盘的表面由一些磁性物质组成，可以用这些磁性物质来记录二进制数据

**磁道**：磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道。

**扇区**：一个磁道又被划分成一个个扇区，**每个扇区就是一个磁盘块**。各个扇区存放的**数据量相同**。

**盘面**：磁盘表面所有的扇区的集合。

**柱面**：所有盘面中**相对位置相同**的磁道组成柱面。

可以用（柱面号，盘面号，扇区号）来定位任意一个磁盘块。

## 4.3.2 磁盘调度算法

### 1、磁盘读写时间的计算

#### （1）寻找时间（寻道时间）$$\text T\_{S}$$

1. 启动磁头所需要的时间，设为s；
2. 移动磁头所需要的时间，假设磁头匀速运动，每跨越一个磁道的时间为m，总共跨越n条磁道，则：

$$
\text T\_{S} = s + m \times n
$$

#### （2）延迟时间$$\text T\_{R}$$

即转动磁盘，使磁头定位到目标扇区所用的时间，设磁盘转速为r，则平均所需的延时为；

$$
\text T\_{R} = \frac{1}{2} \times \frac{1}{r} = \frac{1}{2r}
$$

{% hint style="success" %}
找到目标分区平均需要转半圈，因此乘以$$\frac{1}{2}$$。
{% endhint %}

{% hint style="info" %}
减少延迟时间的方法：

**交替编号：若采用交替编号的策略，即让逻辑上相邻的扇区在物理上有一定的间隔**，可以使读取连续的逻辑扇区所需要的延迟时间更小。（磁头读取完一个扇区之后需要一段时间~~冷却~~）

错位命名：与交替编号类似，将不同盘面的编号错开来。
{% endhint %}

#### （3）传输时间$$\text T\_{t}$$

对磁盘进行读/写操作所需的时间。设磁盘转速为r，需要进行读/写的字节数为b，每个磁道上存储的字节数为N，则：

$$
\text T\_{t} = \frac{1}{r} \times \frac{b}{N} = \frac{b}{rN}
$$

其中，延迟时间与传输时间都取决于硬盘的转速，操作系统则可以通过不同的算法来影响寻道时间。

### 2、先来先服务算法（FCFS）

根据进程请求访问磁盘的先后顺序进行调度。

* 优点
  * 公平
  * 当访问的磁道比较集中时性能还彳亍
* 缺点
  * 有大量进程同时请求访问，且磁道十分分散，则性能很差

### 3、最短寻找时间优先（SSTF）

SSTF算法会优先处理的磁道是**与当前磁头最近的磁道**。可以保证每次的寻道时间最短，但是**并不能保证总的寻道时间最短**。

* 优点
  * 性能较好
  * 平均寻找时间短
* 缺点
  * 可能产生饥饿现象

### 4、扫描算法（SCAN）

SSTF算法会产生饥饿的原因在于：磁头有可能在一个小区域内来回来去地移动。

为了防止这个问题，可以规定**只有磁头移动到最外侧磁道的时候才能往内移动，移动到最内侧磁道的时候才能往外移动**。这就是扫描算法（SCAN）的思想。由于磁头移动的方式很像电梯，因此也叫**电梯算法**。

* 优点
  * 性能较好
  * 平均寻道时间短
  * 不会产生饥饿现象
* 缺点
  * 只有到达最边上的磁道才能开始反向移动（哪怕已经没有更外侧的磁道需要访问）
  * 对各个磁道的响应时间不均

### 5、LOOK调度算法

相较于扫描算法，在当前磁头移动方向前方若没有其他需要访问的磁道，LOOK算法允许磁头立刻开始反方向移动。

LOOK算法使得寻道时间进一步缩短。

### 6、循环扫描算法（C-SCAN）

SCAN算法对于各个位置磁道的响应频率不平均，而C-SCAN算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求，而**返回时直接快速移动至起始端而不处理任何请求**。

### 7、C-LOOK算法

将LOOK算法与C-SCAN算法结合，得到C-LOOK算法。

如果磁头移动的方向上已经没有磁道访问请求了，就可以立即让磁头返回，返回途中不处理任何请求，并且磁头只需要返回到有磁道访问请求的位置即可。

## 4.3.3 磁盘管理

### 1、磁盘初始化

1. 进行低级格式化(物理格式化)
   * 将磁盘的各个磁道划分为扇区。
   * 一个扇区通常可分为头、数据区域、尾三个部分组成。
   * 管理扇区所需要的各种数据结构一般存放在头、尾两个部分，包括扇区校验码等
2. 将磁盘分区，每个分区由若干柱面组成（C盘、 D盘 、 E盘）
3. 进行逻辑格式化，创建文件系统
   * 包括创建文件系统的根目录、初始化存储空间管理所用的数据结构（如位示图、空闲分区表等）

### 2、引导块

计算机启动时需要运行一系列的**初始化程序（自举程序）**，用于初始化各软硬件。

完整的自举程序放在磁盘的**启动块（引导块 /启动分区）上，启动块位于磁盘的固定位置。在ROM中存放自举装入程序**，用于找到引导快并将其中的自举程序装入内存。

拥有启动分区的磁盘称为**启动磁盘**或是**系统盘**。

### 3、坏块

无法正常使用的扇区就是**坏块**。这属于硬件故障，操作系统是无法修复的。应该将坏块标记出来，以免错误地使用到它。

对于简单的磁盘，可以在逻辑格式化时对整个磁盘进行坏块检查，标明哪些扇区是坏扇区（在这种方式中，**坏块对操作系统不透明**）

对于复杂的磁盘，**磁盘控制器**（磁盘设备内部的一个**硬件部件**）会维护一个**坏块链表**。在磁盘出厂前进行**物理格式化时就将坏块链进行初始化**。会保留一些备用扇区，用于替换坏块。这种方案称为**扇区备用**。且这种处理方式中，**坏块对操作系统透明**。
