|
|
|
@ -2049,3 +2049,248 @@ I/O软件普遍采用层次式结构
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# 第七章 文件系统
|
|
|
|
|
|
|
|
|
|
为什么要使用文件系统?
|
|
|
|
|
|
|
|
|
|
+ 内存容量有限,不持久,难以共享
|
|
|
|
|
+ 选择存储在磁盘上
|
|
|
|
|
+ 持久,可共享,容量大
|
|
|
|
|
+ 对于普通用户使用磁盘不容易——对磁盘进行抽象,构造文件系统
|
|
|
|
|
|
|
|
|
|
### 7.1 文件系统的概念
|
|
|
|
|
|
|
|
|
|
> 文件系统是操作系统对磁盘的抽象
|
|
|
|
|
>
|
|
|
|
|
> 使得用户不需要了解以下细节:
|
|
|
|
|
>
|
|
|
|
|
> + 信息被存储在哪里
|
|
|
|
|
> + 信息如何保存
|
|
|
|
|
> + 磁盘实际上如何工作
|
|
|
|
|
|
|
|
|
|
![文件系统](http://47.117.160.245:8080/pictrue/private/os_13.png))
|
|
|
|
|
|
|
|
|
|
+ 文件系统的特征:
|
|
|
|
|
+ 存储大量数据
|
|
|
|
|
+ 进程结束不会影响文件的持续存在
|
|
|
|
|
+ 多个进程可以同时访问一个文件
|
|
|
|
|
+ 文件是由文件各标志的一组信息的集合
|
|
|
|
|
|
|
|
|
|
#### 7.1.1 文件
|
|
|
|
|
|
|
|
|
|
> 文件是由文件名标识的一组信息的集合。
|
|
|
|
|
|
|
|
|
|
命名:用户提供一个符号名→磁盘上的映射位置
|
|
|
|
|
|
|
|
|
|
文件可以带扩展名,传递有关文件的信息
|
|
|
|
|
|
|
|
|
|
另一种方式则是按内容寻址
|
|
|
|
|
|
|
|
|
|
#### 7.1.2 文件类型
|
|
|
|
|
|
|
|
|
|
+ 按照文件用途分类
|
|
|
|
|
|
|
|
|
|
+ 系统文件
|
|
|
|
|
+ 用户文件
|
|
|
|
|
+ 库文件
|
|
|
|
|
|
|
|
|
|
+ 按照文件中的数据形式进行分类
|
|
|
|
|
|
|
|
|
|
+ 源文件
|
|
|
|
|
+ 可执行文件
|
|
|
|
|
+ 视频文件
|
|
|
|
|
+ etc.
|
|
|
|
|
|
|
|
|
|
操作系统给能够识别和莪支持多少种类的数据文件,是衡量操作系统应用范围的重要标志
|
|
|
|
|
|
|
|
|
|
部分操作系统将文件的数据类型隐含在扩展名中(如MS-DOS)
|
|
|
|
|
|
|
|
|
|
Linux、Unix则没有隐含文件类型,扩展名仅仅用于帮助用户识别
|
|
|
|
|
|
|
|
|
|
#### 7.1.3 文件访问
|
|
|
|
|
|
|
|
|
|
+ 两种文件访问类型:随机访问、顺序访问
|
|
|
|
|
|
|
|
|
|
#### 7.1.4 文件属性
|
|
|
|
|
|
|
|
|
|
文件属性并不属于文件内容,但文件属性是操作系统管理和控制文件,是实现文件保护的重要依据。
|
|
|
|
|
|
|
|
|
|
要管理和控制文件,不能只通过文件名,还要通过文件的其他属性
|
|
|
|
|
|
|
|
|
|
+ 文件标识符
|
|
|
|
|
+ 文件拥有者
|
|
|
|
|
+ 文件类型
|
|
|
|
|
+ 文件的存取控制
|
|
|
|
|
+ 文件定位(location)
|
|
|
|
|
+ 文件大小
|
|
|
|
|
+ 文件保护
|
|
|
|
|
+ 文件日期和时间
|
|
|
|
|
|
|
|
|
|
### 7.2 文件结构*
|
|
|
|
|
|
|
|
|
|
> 文件结构是指文件中信息的构造和组织方式
|
|
|
|
|
|
|
|
|
|
+ 文件的逻辑结构
|
|
|
|
|
|
|
|
|
|
+ 字节流结构形式:在文件中按字节个数/特殊符号分界
|
|
|
|
|
|
|
|
|
|
+ 记录结构形式
|
|
|
|
|
|
|
|
|
|
基本单位:逻辑记录
|
|
|
|
|
|
|
|
|
|
逻辑记录是文件内独立的最小单位
|
|
|
|
|
|
|
|
|
|
又可以按照记录的排列顺序不同分为:
|
|
|
|
|
|
|
|
|
|
+ 连续文件:文件按照记录生成的时间顺序连续排列
|
|
|
|
|
+ 索引文件:对文件建立一个索引表,文件中的每条记录在索引中有响应的表项
|
|
|
|
|
+ 顺序索引文件
|
|
|
|
|
|
|
|
|
|
### 7.3 文件目录
|
|
|
|
|
|
|
|
|
|
**文件目录本身也是文件**
|
|
|
|
|
|
|
|
|
|
+ 目录包含了一组文件的映射
|
|
|
|
|
+ 名称→文件标题的磁盘块
|
|
|
|
|
+ 通常可以用一个简单的数组实现,数组存放着文件夹的内容
|
|
|
|
|
+ ls/dir命令查看目录内容
|
|
|
|
|
+ 可以用相同的方式对待目录和文件
|
|
|
|
|
+ 目录里可以存放目录
|
|
|
|
|
+ 根目录是系统文件的总起点
|
|
|
|
|
|
|
|
|
|
**路径名:**一种指定树中的文件名称的方式
|
|
|
|
|
|
|
|
|
|
+ 绝对路径
|
|
|
|
|
+ 相对路径
|
|
|
|
|
|
|
|
|
|
**链接**:快捷方式
|
|
|
|
|
|
|
|
|
|
+ 链接允许一个文件在多个地方出现
|
|
|
|
|
+ 指定一个文件到路径名之间的链接
|
|
|
|
|
|
|
|
|
|
### 7.4 文件系统的实现
|
|
|
|
|
|
|
|
|
|
#### 7.4.1 文件系统的布局
|
|
|
|
|
|
|
|
|
|
+ 文件系统储存在磁盘上
|
|
|
|
|
+ 大多数磁盘被分区
|
|
|
|
|
+ 每个分区有自己的文件系统
|
|
|
|
|
|
|
|
|
|
磁盘的第0个扇区为主引导记录MBR
|
|
|
|
|
|
|
|
|
|
+ MBR用于启动计算机
|
|
|
|
|
+ MBR后面紧接着就是磁盘分区表
|
|
|
|
|
+ 给出每个分区的起始和结束地址
|
|
|
|
|
+ 一个分区标记为激活状态,称为主分区
|
|
|
|
|
+ 主分区最前面是引导记录
|
|
|
|
|
+ 计算机启动时由BIOS读写MBR
|
|
|
|
|
+ MBR定位系统主分区,加载引导记录
|
|
|
|
|
+ 引导记录加载操作系统映像
|
|
|
|
|
+ 引导记录块之外的内容因系统情况而异
|
|
|
|
|
|
|
|
|
|
#### 7.4.2 文件在磁盘上的存放方式
|
|
|
|
|
|
|
|
|
|
+ 连续存放方式
|
|
|
|
|
|
|
|
|
|
+ 存储在一片连续的磁盘空间
|
|
|
|
|
+ 用户需实现声明文件大小
|
|
|
|
|
+ 文件定位:起始块+文件尺寸
|
|
|
|
|
+ 会导致磁盘碎片
|
|
|
|
|
|
|
|
|
|
优点:
|
|
|
|
|
|
|
|
|
|
+ 快速顺序访问
|
|
|
|
|
+ 易于随机访问
|
|
|
|
|
|
|
|
|
|
缺点:
|
|
|
|
|
|
|
|
|
|
+ 碎片
|
|
|
|
|
|
|
|
|
|
大多系统文件采用顺序存储的方式储存以加速访问
|
|
|
|
|
|
|
|
|
|
+ 链表方式
|
|
|
|
|
|
|
|
|
|
+ 保存每个文件的所有磁盘块的链表
|
|
|
|
|
+ 磁盘块不需要临接
|
|
|
|
|
|
|
|
|
|
优点:
|
|
|
|
|
|
|
|
|
|
+ 没有磁盘碎片空间被浪费
|
|
|
|
|
+ 方便文件的增长、收缩
|
|
|
|
|
|
|
|
|
|
缺点:
|
|
|
|
|
|
|
|
|
|
+ 随机访问速度慢
|
|
|
|
|
+ 链表的存放需要存储空间
|
|
|
|
|
|
|
|
|
|
链表方式使用内存中的文件分配表(FAT)解决存放需要空格键的问题
|
|
|
|
|
|
|
|
|
|
+ 索引方式
|
|
|
|
|
|
|
|
|
|
+ 为每个文件建立索引表
|
|
|
|
|
+ 前提条件:文件的逻辑记录大小等于物理块大小
|
|
|
|
|
+ 用户先宣称文件大小
|
|
|
|
|
+ 分配一个含有相应数量指针空间的文件头,即索引
|
|
|
|
|
+ 类似于页表
|
|
|
|
|
|
|
|
|
|
优点:
|
|
|
|
|
|
|
|
|
|
+ 文件易于增长
|
|
|
|
|
+ 易于随机访问
|
|
|
|
|
|
|
|
|
|
缺点:
|
|
|
|
|
|
|
|
|
|
+ 顺序访问效率不高
|
|
|
|
|
+ 如果数据块数超过索引头预留的指针数时,文件增长不容易
|
|
|
|
|
+ 解决:使用多级索引
|
|
|
|
|
|
|
|
|
|
+ 多级索引,增加空间,但访问次数高,效率降低
|
|
|
|
|
|
|
|
|
|
#### 7.4.3 目录实现
|
|
|
|
|
|
|
|
|
|
+ 文件夹包含了里面文件的记录项
|
|
|
|
|
+ 主要功能:提供文件名到文件地址的映射
|
|
|
|
|
+ 哪里可以保存文件的属性:
|
|
|
|
|
+ 目录
|
|
|
|
|
+ 索引项
|
|
|
|
|
|
|
|
|
|
文件共享:树/链接
|
|
|
|
|
|
|
|
|
|
#### 7.4.4 磁盘空间管理:
|
|
|
|
|
|
|
|
|
|
+ 文件被正常存储在磁盘上
|
|
|
|
|
+ 磁盘空间管理很重要
|
|
|
|
|
+ 类似于内存空间管理
|
|
|
|
|
+ 连续分配
|
|
|
|
|
+ 非连续分配:文件分页,磁盘划分为磁盘块
|
|
|
|
|
|
|
|
|
|
#### 7.4.5 闲置空间管理
|
|
|
|
|
|
|
|
|
|
##### 1.空闲表法
|
|
|
|
|
|
|
|
|
|
空闲表主要适合连续文件,系统通过一个空闲表管理磁盘的所有空闲分区。
|
|
|
|
|
|
|
|
|
|
为文件分配空闲区的方法与内存的空闲区分配类似(首次适应法,最佳适应法)
|
|
|
|
|
|
|
|
|
|
可用于虚拟存储器管理的外存对换空间的分配
|
|
|
|
|
|
|
|
|
|
##### 2.空闲链表法
|
|
|
|
|
|
|
|
|
|
属于非连续分配方式。要在磁盘的每个空闲块中设置一个指向下一个空闲块的指针。
|
|
|
|
|
|
|
|
|
|
优点:适合文件动态增长和收缩
|
|
|
|
|
|
|
|
|
|
缺点:效率较低
|
|
|
|
|
|
|
|
|
|
##### 3.位视图法
|
|
|
|
|
|
|
|
|
|
用若干个字节构成一个表,表中每一个字位表示一个磁盘块的使用情况。
|
|
|
|
|
|
|
|
|
|
为了防止用户占用太多磁盘空间:磁盘配额
|
|
|
|
|
|
|
|
|
|
### 7.5 文件系统的性能*
|
|
|
|
|
|
|
|
|
|
+ 文件系统可靠性
|
|
|
|
|
+ 一致性
|
|
|
|
|
+ 持久性
|
|
|
|
|
+ 文件系统性能
|
|
|
|
|
+ 文件保护机制
|
|
|
|
|