目录
1.内存映射文件(文件访问方式对比)
2.文件管理整体知识框架 & 文件基本属性
3.文件的逻辑结构(流式文件、记录式文件)
4.文件目录(FC、四类目录结构、索引节点)
一、内存映射文件
1.基本概念
内存映射文件是操作系统提供的系统功能,核心两大作用:
- 简化文件读写操作,让程序像访问内存一样访问磁盘文件;
- 实现多进程共享同一份文件数据。
2. 传统文件访问方式(对比理解)
磁盘以磁盘块为基本存储单位(示例:1KB/块),文件会被拆分存放在离散磁盘块中。
传统读写流程(需多次调用系统调用):
- Open:打开指定文件;
- Seek:设置文件读写指针,定位访问位置;
- Read:将磁盘块数据读入内存;
- 程序在内存中修改数据;
- Write:将修改后的数据写回磁盘;
- Close:关闭文件。
特点:读写全程需要程序员手动调用Read/Write,步骤繁琐,IO交互多。
3. 内存映射文件访问方式
3.1 核心流程
- Open:打开目标文件;
- mmap(内存映射系统调用):将整个文件映射到进程虚拟地址空间,系统返回映射区起始指针;
- 程序直接通过指针+偏移量访问/修改文件数据(如同操作内存);
- 访问缺页数据时:操作系统自动触发缺页异常,将对应磁盘块调入内存(无需手动Read);
- Close:关闭文件,操作系统自动将修改过的数据写回磁盘(无需手动Write)。
3.2 核心特点
- 读写简化:数据调入、写回磁盘均由操作系统自动完成,程序员只需操作指针;
- 懒加载:映射建立初期不会立刻加载全部文件,仅访问对应块时才触发读入;
- IO优化:操作系统可使用预读、缓写等策略提升磁盘IO效率。
4. 多进程文件共享原理
- 多个进程可分别将同一个文件映射到各自独立的虚拟地址空间;
- 操作系统修改多个进程的页表,让不同虚拟地址最终指向同一块物理内存;
- 一个进程修改数据后,其他进程可立刻看到变化,实现高效文件共享。
二、文件管理整体框架 & 文件基本属性
1.文件定义
文件是一组有意义的有序信息集合,是操作系统管理的核心资源之一,存储在外存(磁盘)上。
2. 文件管理五大核心学习模块
- 文件属性:文件具备的各类信息;
- 文件逻辑结构:文件数据在用户视角的组织形式;
- 文件目录:文件/文件夹的组织、管理方式;
- 文件操作:操作系统对外提供的文件系统调用;
- 文件物理结构:文件数据在磁盘硬件上的存储方式、空闲块管理、文件共享与保护。
3. 文件核心属性(Windows右键「属性」可直观查看)
3.1 文件名
•用户最常用属性,用于检索文件;
•规则:同一个目录下不允许重名文件,不同目录可以重名。
3.2 文件标识符(文件ID)
•操作系统内部使用唯一编号标识每一个文件;
•对用户无可读性,用户不可见,作用是全局区分所有文件。
3.3 文件类型
通过后缀区分(.txt/.mp4/.jpg等);
操作系统根据文件类型匹配默认打开程序。
3.4 位置(路径)
1.用户视角:文件存放目录(路径),用于逐层查找;
2.系统视角:文件在外存的物理地址,用户不可见,由操作系统管理。
3.5 附加属性
•文件大小:占用磁盘空间;
•时间属性:创建时间、最后修改时间、最后访问时间;
•所有者:文件创建/归属用户;
•保护/权限信息:控制不同用户的读、写、执行权限,实现文件安全保护。
4. 操作系统提供的基础文件操作(系统调用)
所有图形化操作底层均对应系统调用:
- reate:创建文件;
- Read:读文件(外存 → 内存);
- Write:写文件(内存 → 外存);
- Delete:删除文件;
- Open:打开文件(使用前必须执行);
- Close:关闭文件(使用完毕必须执行)。
拓展:复杂操作(如文件复制)= 组合基础调用(创建→读→写)。
5. 外存存储基础
- 磁盘被划分为大小相等的磁盘块(物理块),是磁盘IO、空间分配的基本单位(常见1KB、4KB);
- 哪怕文件只有几个字节,也会独占一整个磁盘块;
- 文件逻辑地址会被操作系统翻译为「逻辑块号 + 块内地址」,再映射到磁盘物理地址。
三、文件的逻辑结构
1.概念区分
•逻辑结构:用户视角,文件数据的组织形式;
•物理结构:操作系统/硬件视角,数据在磁盘上的存储形式。
2. 两大类文件(按逻辑结构划分)
2.1 无结构文件(流式文件)
•组成:一串连续的二进制流/字符流,无固定格式、无划分记录;
•示例:.txt纯文本、音视频文件;
•特点:结构简单,无需划分记录,本课程不深入讨论。
2.2 有结构文件(记录式文件)
•组成:由多条记录构成;
•记录:一组相关数据项的集合;
•数据项:文件最小数据单位(如学号、姓名、年龄);
•关键字:每条记录中可唯一标识该数据的数据项(常用学号、编号)。
分类:定长记录 & 可变长记录
- 定长记录:所有记录占用存储空间完全相同;
优点:地址可计算,支持随机访问; - 可变长记录:每条记录长度不统一(如个人特长、备注);
优点:空间利用率高;缺点:无法直接随机访问。
3. 有结构文件三大逻辑结构(必考)
3.1 顺序文件
记录按顺序组织,物理上可顺序存储或链式存储。
分类(按关键字排序)
- 串结构:记录顺序 = 存入先后顺序,与关键字无关;
查找关键字:只能从头遍历,增删较简单(追加到末尾); - 顺序结构:记录按关键字升/降序排列;
查找关键字:可使用折半查找,检索效率高。
访问特性
- 物理为链式存储:无论定长/可变长,都不能随机访问,只能顺序遍历;
- 物理为顺序存储:
○可变长记录:无法随机访问;
○定长记录:可通过地址公式计算,支持随机访问(高频考点)。
补充:顺序文件增删记录开销大,系统常配合日志文件合并修改,减少磁盘IO。
3.2 索引文件
- 结构:分为数据区 + 索引表;
○数据区:文件真实记录,可离散存放;
○索引表:每条索引项对应一条记录,索引项为定长结构。 - 优势:索引表本身是定长顺序文件,支持随机访问;
索引表按关键字排序时,可使用折半查找,大幅提升检索速度。 - 拓展:可建立多索引(如学生表同时按学号、姓名建索引),对应数据库多索引思想。
- 缺点:每条记录对应一个索引项,索引表占用空间大。
3.3 索引顺序文件(折中方案)
结合顺序文件 + 索引文件的优点,解决索引表空间浪费问题:
- 规则:将记录分组,一组记录对应一个索引项(而非单条记录);
- 结构:
○顶层索引表:存放分组信息(组名、组起始地址),定长串结构;
○每组内部:依旧是顺序文件; - 查找流程:先查索引表定位分组 → 组内顺序查找;
- 多级索引:数据量极大时,可构建二级/多级索引,进一步降低平均查找次数。
举例
共10000条记录,分为100组(每组100条):
•纯顺序文件:平均查找 5000 次;
•一级索引顺序文件:索引表平均查50次 + 组内平均查50次 = 总计100次。
四、文件目录
1.核心概念
1.1 文件控制块 FCB
•定义:目录中的一条目录项,每个文件/文件夹对应一个FCB;
•组成:文件名、物理地址、文件类型、权限、时间等全部文件属性;
•核心作用:建立文件名 ↔ 物理地址映射,实现按名存取(目录最核心功能)。
1.2 文件目录
大量FCB有序集合,本质是特殊的有结构文件;
日常所说「文件夹」,就是操作系统的文件目录。
1.3 目录基本操作
搜索目录、创建目录项、删除目录项、修改文件属性、显示目录内容。
2. 四类目录结构(演进+优缺点,考试高频)
2.1 单级目录
•结构:整个系统只有一张全局目录表;
•规则:全局不允许文件重名;
•缺点:多用户场景极易出现重名,不适合多人使用;
•适用:早期单用户系统。
2.2 两级目录
分为两层:主文件目录(MFD) + 用户文件目录(UFD)
- 主目录:记录所有用户名 + 对应用户目录地址;
- 用户目录:存放该用户所有文件的FCB;
- 优点:不同用户允许重名,可按用户做权限隔离;
- 缺点:用户无法对自己的文件分类,层级单一。
2.3 多级目录(树形目录,现代系统主流)
- 结构:根目录 → 多级子目录,标准树状结构(Windows/Linux通用);
- 规则:不同目录下文件可以重名;
- 路径概念:
○绝对路径:从根目录开始逐层查找,每次查找需多次磁盘IO;
○相对路径:从当前目录出发查找,减少磁盘访问次数,效率更高; - 优点:文件分类清晰、管理方便、权限易控制;
- 核心缺点:难以实现文件共享(树结构分支独立)。
2.4 无环图目录
- 改进:在树形目录基础上增加共享链接,形成有向无环图;
- 作用:解决树形目录无法共享的问题,支持多用户共享同一个文件/目录;
- 共享规则:设置共享计数器,记录文件被引用次数;
○删除操作:仅删除当前用户的目录项,计数器-1;
○计数器=0:无用户使用,真正删除文件数据; - 区分:共享文件 ≠ 文件复制
○复制:两份独立数据,修改互不影响;
○共享:同一份数据,一处修改,所有用户同步可见。
3. 索引节点(i节点,FCB优化方案)
3.1 优化原因
传统FCB包含全部文件属性,目录项体积大,一个磁盘块存放的目录项少,查找时磁盘IO次数多、效率低。
3.2 优化思路
拆分FCB:
- 目录项:仅保留文件名 + 索引节点指针(体积大幅缩小);
- 索引节点(i节点):存放文件物理地址、权限、大小、时间等所有其他属性;
○磁盘i节点:存放在外存;
○内存i节点:文件打开后调入内存,额外增加引用计数、修改标记等。
3.3 优化效果
目录项变小,单个磁盘块可存放更多目录项;
查找文件名时,磁盘IO次数大幅减少,目录检索效率显著提升。
五、全章节考点速记(复习背诵版)
1.内存映射文件:简化读写、自动IO、支持多进程共享,核心是虚拟地址与磁盘文件建立映射;
2.文件属性:文件名(用户用)、文件ID(系统用)、路径、权限、时间为必考项;
3.逻辑结构
○流式文件:无结构;
○记录式文件:分定长/可变长,定长记录顺序存储支持随机访问;
○三大结构:顺序、索引、索引顺序,重点掌握查找效率与适用场景。
4.目录结构
○单级:不许重名;两级:用户隔离、允许跨用户重名;
○树形:主流、分类强、难共享;无环图:支持文件共享;
5.索引节点:拆分FC,缩小目录项,减少磁盘IO,提升检索速度;
6.基础区分:共享文件和文件复制、绝对路径和相对路径。当前文件内容过长,豆包只阅读了前 48%。