1. 磁盘存储器管理概述
磁盘存储器作为计算机系统中最重要的外存设备,其管理效率直接影响整个系统的性能。操作系统通过抽象磁盘的物理结构,将其转化为可管理的逻辑单元,并采用多种策略优化存储空间利用率和I/O性能。
在磁盘物理层面,数据存储在磁道(同心圆)和扇区(磁道分割的最小单元)上。操作系统需要将这些物理特性转化为文件系统可管理的逻辑块。现代磁盘通常采用柱面-磁头-扇区(CHS)或逻辑块寻址(LBA)方式来定位数据。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 外存组织方式详解
2.1 连续分配策略
连续分配是最直观的外存组织方式,文件被存储在磁盘上连续的块中。这种方式的优势在于:
- 顺序访问性能极佳:磁头几乎不需要移动
- 实现简单:只需记录起始块号和长度
- 随机访问快速:可直接计算目标块位置
但缺点也很明显:
- 外部碎片问题:随着文件创建和删除,会产生大量无法利用的小空间
- 文件扩展困难:相邻空间可能已被占用
cpp复制// 连续分配的核心代码实现
int DiskManager::continuous_allocate(int n) {
int count = 0;
int start = -1;
for (int i = 0; i < TOTAL_BLOCKS; ++i) {
if (!disk[i].is_used) {
if (count == 0) start = i;
count++;
if (count == n) {
for (int j = start; j < start + n; ++j)
disk[j].is_used = true;
return start;
}
} else {
count = 0;
start = -1;
}
}
return -1; // 分配失败
}
提示:连续分配适合存储大型、不常修改的文件,如视频、备份数据等。
2.2 链接分配策略
链接分配通过指针将文件的各个块连接起来,分为两种实现方式:
隐式链接
- 指针存储在块内部
- 需要顺序遍历才能访问任意块
- 单个指针损坏会导致后续数据丢失
显式链接(FAT文件系统)
- 使用专门的FAT表存储指针
- 支持随机访问
- FAT表需要常驻内存
cpp复制// 链接分配的核心代码实现
int DiskManager::linked_allocate(int prev_block) {
for (int i = 0; i < TOTAL_BLOCKS; ++i) {
if (!disk[i].is_used) {
disk[i].is_used = true;
if (prev_block != -1)
disk[prev_block].
