# 5.2 文件的物理结构 ## 一、连续分配 ### 1.1 基本概念 **连续分配**:为文件分配连续的磁盘块。 ### 1.2 实现方式 **文件目录项**: - 起始块号 - 块数(长度) **例子**: ``` 文件A:起始块号0,长度3 磁盘:| A | A | A | 空 | 空 | ... | 0 1 2 3 4 ``` ### 1.3 优点 - **实现简单**:只需记录起始位置和长度 - **顺序访问快**:连续读取,磁头移动少 - **随机访问快**:可以直接计算位置 ### 1.4 缺点 - **产生外部碎片**:文件删除后留下空洞 - **需要紧凑**:定期整理磁盘 - **文件增长困难**:需要连续空间 --- ## 二、链接分配 ### 2.1 基本概念 **链接分配**:文件分散存储在磁盘块中,通过指针链接。 ### 2.2 隐式链接 **实现方式**: - 每个磁盘块包含数据和指向下一个块的指针 - 文件目录项记录起始块号和结束块号 **例子**: ``` 文件A:起始块号0 磁盘: 块0:数据A0 + 指针→1 块1:数据A1 + 指针→2 块2:数据A2 + 指针→-1(结束) ``` **优点**: - 无外部碎片 - 文件可以动态增长 **缺点**: - 只能顺序访问 - 指针占用存储空间 - 可靠性差(一个块损坏,后续都丢失) ### 2.3 显式链接(FAT) **实现方式**: - 使用文件分配表(FAT)记录链接关系 - 磁盘块只存储数据 - FAT表在内存中 **FAT表结构**: ``` 块号: 0 1 2 3 4 5 FAT: 1 2 -1 5 0 4 ``` **优点**: - 随机访问较快(查FAT表) - 可靠性提高(FAT可备份) **缺点**: - FAT表占用内存 - 大磁盘FAT表很大 --- ## 三、索引分配 ### 3.1 基本概念 **索引分配**:为每个文件建立索引块,记录文件占用的所有磁盘块号。 ### 3.2 实现方式 **文件目录项**: - 索引块号 **索引块**: - 包含文件所有磁盘块号的数组 **例子**: ``` 文件A:索引块号5 索引块5:[0, 1, 2, -1, ...] 磁盘块0, 1, 2存储文件A的数据 ``` ### 3.3 优点 - **支持直接访问**:通过索引块直接找到数据块 - **无外部碎片** - **文件可以动态增长** ### 3.4 缺点 - **索引块占用空间**:小文件也需要索引块 - **索引块大小限制**:大文件需要多级索引 ### 3.5 多级索引 **单级索引**: - 一个索引块直接指向数据块 - 适用于小文件 **两级索引**: - 索引块指向二级索引块 - 二级索引块指向数据块 - 适用于中等文件 **三级索引**: - 更多级索引 - 适用于大文件 **混合索引(UNIX inode)**: - 直接指针:指向数据块 - 一级间接指针:指向索引块 - 二级间接指针:指向一级索引块 - 三级间接指针:指向二级索引块 --- ## 四、三种分配方式的比较 | 特性 | 连续分配 | 链接分配 | 索引分配 | |-----|---------|---------|---------| | 实现复杂度 | 简单 | 中等 | 复杂 | | 外部碎片 | 有 | 无 | 无 | | 顺序访问 | 快 | 中等 | 中等 | | 随机访问 | 快 | 慢 | 快 | | 文件增长 | 困难 | 容易 | 容易 | | 空间开销 | 小 | 小(指针) | 大(索引块) | | 可靠性 | 高 | 低 | 中等 | --- ## 五、考研重点 1. **连续分配**:实现方式、优缺点 2. **链接分配**:隐式链接、显式链接(FAT) 3. **索引分配**:实现方式、多级索引、混合索引 4. **三种分配方式的比较**:优缺点、适用场景 5. **UNIX inode**:直接指针、间接指针 --- *下一节:5.3 目录管理*