本科生操作系统原理学习记录
学习记录全家桶
第十一章 文件系统实现
11.1 文件系统
1、文件系统概述
在存储设备上组织文件的方法和数据结构
操作系统中负责管理和存储文件信息的模块
文件系统 大多数存在于操作系统之中,但是一些微内核没有文件系统
系统角度:
- 对存储设备的空间进行组织和分配
- 负责文件检索、读写等操作
- 目标:存取速度和存储空间效率
用户角度:
- 提供按名存取的文件访问机制
- 文件的组织管理
- 目标:方便的文件存取机制
2、文件系统层次架构
基本文件系统
物理块读写
向设备驱动程序发送控制命令
文件组织模块
管理文件、逻辑块和物理块
把文件的逻辑地址转换为物理地址、管理空闲空间、为文件分配物理块
逻辑文件系统
管理文件系统中的元数据:除了文件数据外的所有结构数据
文件按名存取、文件目录管理、管理FCB、存储保护
3、文件系统实现
物理块:一个或多个扇区组成,基本文件读写单位
分区:Partition
卷(逻辑磁盘):Volume,磁盘上的逻辑分区,建立在物理分区上
两种文件系统
- 磁盘文件系统
- 内存文件系统
4、磁盘文件系统
5、内存文件系统
分区表:所有安装分区信息
目录缓冲结构:保存最近访问的目录信息
系统打开文件表、进程打开文件表
目的:通过缓冲技术来提高文件系统性能
6、虚拟文件系统
目的:支持多个文件系统
把多个文件系统整合成一个目录结构
为用户屏蔽各个文件系统的差异
虚拟文件系统 VFS
文件系统接口:统一的应用程序访问文件的接口
VFS接口:为各类不同的文件系统定义VFS接口
7、网络文件系统
NFS:节省存储空间、实现共享
访问远程文件系统
8、常用文件系统
Windows:FAT NTFS ReFS
Linux:Ext(Ext2 3 4 )
Mac OS:HFS
11.2 存储空间分配方式
物理块
读写存储设备的基本单位
存储设备的基本分配单位
和内存的页面大小相对应
逻辑块:在文件空间中的块
大小和物理块一致
一个逻辑块存储在一个物理块中
连续分配
每个文件在磁盘上占用一组连续的物理块
FCB仅给出:起始块号和长度
缺点:
浪费空间(小空间无法分配)
文件不能动态增长(文件A)
不利于文件的插入和删除(需要移动数据)
链接分配
离散物理块分配
显示分配、隐式分配
隐式链接:物理块中给出下一个块的指针地址
优点:可以扩展分配,便于文件的插入和删除
缺点:无法实现随机访问,访问文件慢
显示链接:把指针拿出来,集中存在一起
大大提高了检索的速度
FAT表,不适合大容量的磁盘 File Allocation Table,一个分区有两张FAT表
链接表大小:表项16位,就是128KB 表项32位 ,就是16GB
索引分配
分散的FAT,每个文件都给它分配一张FAT表,即索引表
索引块:存放指向文件每个物理块块号的物理块
地址映射:
多级索引
大于4MB的文件,需要用多级索引的方法
联合策略 混合策略
Unix中的iNode
3级索引支持 48KB + 4MB + 4GB + 4 TB,既然你要使用3级索引,那么你前面的直接索引、一级索引、二级索引都使用完了,才会使用3级索引
11.3 空闲空间管理
空闲表
空闲表直接采用类似数组的方式管理
空闲链表
将磁盘中所有空闲块链接在一起
位示图
利用二进制一位 bit来表示一个块的使用情况
1:盘块空闲
0:盘块已分配
学会计算第几行第几列,块号的计算
位示图需要额外的空间
block size = 2^12 bytes
disk size = 2^30 bytes
n = 2^30 / 2^12 = 2^18 bits
位示图存放在物理块中,小容量的磁盘空间管理
成组链接
结合了空闲表和空闲链表
例子:UNIX系统
将空闲块分成若干组,每100个块作为一组
每组第一空闲块包含:
- 空闲块总数
- 下一组空闲块首块的地址
- 本组其他空闲块的块号列表
慕课单元作业
1、一个文件有20个磁盘块(块号:0-19),假设文件控制块在内存(如果文件采用索引分配,索引表不在内存)。在下列情况下,请计算在连续分配,链接分配,单级索引分配三种分配方式下,分别需要多少次磁盘I/O操作?(每读入或写出一个磁盘块需要一次磁盘I/O操作,另外,假设在连续分配方式下,文件头部无空闲的磁盘块,但文件尾部有空闲的磁盘块。
1)在文件开始处删除一个磁盘块;
2)在文件第15块前添加一个磁盘块并写入内容;
3)在文件结尾处删除一个磁盘块;
4)在文件结尾处增加一个磁盘块并写入内容。
(1)连续分配:0次,直接修改FCB的起始块号和长度
链接分配 隐式:1次,先读取第二块的块号,然后修改FCB起始块号
单级索引:2次,读入索引表,并修改索引块中索引项,然后写入磁盘块
(2)连续分配:读取块号14-19,写入15-20块号,还有一个写入新的块,13次
链接分配:隐式:读取前14个块找到指向第15块的指针 14次,新块写入内容和旧的15号的地址,14号块写入新块的地址,一共16次
单级索引:3次,读入索引块内容,修改索引项并写入磁盘块,写入新块的内容
(3)连续分配:0次,直接修改FCB表的长度
链接分配:隐式:20次,前19次读取第二十块的地址,然后修改地址为-1表示第19块为结束块
单级索引:2次,读入索引表,并修改索引块中索引项的内容
(4)连续分配:1次,写入内容,并修改FCB的文件长度
链接分配:隐式:22次,前20次找到第二十块的内容,然后写入新块的内容,最后将第二十块的指针修改为指向新块的地址
单级索引:3次,读入索引块内容,修改索引项并写入磁盘块,写入新块的内容
2、目录文件采用链接式,每个磁盘块存放10个下级文件的描述,最多存放40个下级文件,若下级文件为目录文件,上级目录指向该目录文件的第一块,否则指向普通文件的文件控制块。普通文件采用二级索引形式,文件控制块中给出12个磁盘块地址,前10个磁盘块地址指出前10页的物理地址,第11个磁盘块地址指向一级索引表,一级索引表给出256个磁盘块地址,即指出该文件第10页至第265页的地址,第12个磁盘块地址指向二级索引表,二级索引表中指出256个一级索引表的地址。请问:
1)该文件系统中的普通文件最大可有多少页?
最大 = 10 + 256 + 256*256 = 65802页
2)若要读文件/A/D/K/Q中的某一页,最少要启动磁盘几次?最多要启动磁盘几次?(每读一个磁盘块需要启动一次磁盘操作)
最少 | 最多 | |
---|---|---|
内存/->A | 0 | 0 |
A->D | 1 | 4 |
D->K | 1 | 4 |
K->Q | 1 | 4 |
Q->FCB | 1 | 1 |
FCB->某一页 | 1 | 3 |
总计 | 5 | 16 |
3、设想一个在磁盘上的文件系统的逻辑块和物理块的大小都为512B。假设每个文件的FCB已经在内存中,对3种分配方法(连续分配,显式链接分配和单级索引分配),请问:
1)逻辑地址到物理地址的映射在系统中如何实现?
2)举一个例子说明单级索引分配中,逻辑地址到物理地址的映射过程。
假设逻辑地址为LA,逻辑块和物理块512B为 S,逻辑地址的相对起始地址为G
(1)连续分配:LA/S = Q…R Q为逻辑块号,R为块内偏移
B = Q + FCB中记录的起始块号 D = R
物理地址 (B,D)
显示链接:LA/S = Q…R Q为逻辑块号,R为块内偏移
B = Q和G得到在链接表中的物理块号 D = R
物理地址 (B,D)
单级索引:LA/S = Q…R Q为逻辑块号,R为块内偏移
B = 索引表中第Q项对应的物理块号 D = R
物理地址 (B,D)
(2)举例子说明,假设逻辑地址为1028,文件的索引块内容按照索引如下 6 1 13 -1 -1 -1
则,1028 /512 = 2 …4
查找索引表为13号,则物理地址为 PA = (13, 4)
4、请举一个具体文件系统的例子,来说明文件系统一般由哪些内容组成?
文件系统一般由文件分类、文件目录结构、文件逻辑结构、文件物理结构、储存器管理、系统调用、磁盘结构
例如 : UNIX文件系统,文件分类有普通文件、目录文件、设备文件三种,
文件逻辑结构: 无结构的流式文件,
文件物理结构:多重索引结构,
文件目录结构: 图型目录, 采用硬链接实现文件共享,采用索引节点提高文件访问效率,
文件储存器管理:空闲空间管理:成组链接;
磁盘结构: 物理结构,盘片、磁头、主轴
内存结构: 单进程的打开文件表,系统的打开文件表(包括读写标志、共享该读写指针的进程数、活动节点号,读写指针等)
文件系统调用: 建立文件、删除文件、读文件、打开文件、关闭文件、文件指针定位、文件连结、设置文件权限、建立管道文件、复制文件等函数,实现文件操作和文件保护。