第四章
文件系统¶
初识文件管理¶
书4.1.1
总结:
文件的逻辑结构¶
书4.1.4
- 无结构文件就是流式文件,如.txt。
- 有结构文件又称记录式文件。每条记录又由若干个数据项组成。如数据库表文件。一般来说,每条记录有一个数据项可作为关键字。
总结:


文件目录¶
书4.1.2 + 4.2.1 + 4.2.3
- 文件控制块(FCB)是实现文件目录的关键数据结构, FCB的有序集合称为“文件目录”。FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写, 禁止访问的用户名单等), 使用信息(文件的建立时间、修改时间等)。
- 两级目录结构分为主文件目录和用户文件目录。
- 存放在外存的索引节点称为磁盘索引节点, 当索引节点放入内存后称为内存索引节点。后者比前者中需要增加一些信息,如:文件是否被修改、此时有几个进程正在访问该文件等。
- 索引结点因为目录项中只保留了文件名和索引指针,因此目录项的大小减小,一个盘块中能放更多的目录项,因此检索文件的时候就能一次性检索更多目录项,导致I/O加快。
总结:

文件的物理结构(文件分配方式)¶
书4.1.5
- 隐式链接中的指针对于用户来说是透明的。
- FAT(File Allocation Table)中存的就是指针。
- 一个磁盘仅设置一张FAT。
- FAT还可以找出空闲块,比如可以用-2或其他数字代表该磁盘块为空闲。
- 隐式链接每次查找时需要访问磁盘,而显式不用,因为FAT常驻内存。
- 考试中没有明确指出是隐式还是显式时,默认隐式。
- 设置索引分配的原因是为了解决链接分配无法随机存储的问题,从而实现离散 + 随机访问。
- 索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块。
- 索引表是每个文件都有一份。
- FCB中需要存放索引块的块号。
- 链接方案、多层索引(类似多级页表)和混合索引是为了解决一个文件过大导致所有的索引项在一个磁盘块中放不下的问题。
- 多层索引中如果是K层索引,且顶级索引表未调入内存, 访问目标数据块,需要K + 1次磁盘I/O。
- 混合索引是多种索引分配方式的结合。比如在一个文件的顶级索引表中,既包含直接地址索引(直接指向地址块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。
- 混合索引中,对于小文件,只需要较少的都磁盘次数就可以访问目标数据块。
总结:
文件存储空间管理¶
书4.3.3
- 盘区就是连续的盘块。
- 空闲盘区内第一个盘块内记录了盘区的长度、下一个盘区的的指针。
- 空闲链表法需要操作系统保存链头、链尾指针。
- 空闲表法适合连续分配, 空闲盘块链适合离散分配, 空闲盘区链离散分配、连续分配都适用。
总结:
文件的基本操作¶
- 打开文件表分为两种,一种是系统打开文件表,另一种是进程打开文件表。
总结:
文件共享¶
- 硬链接快于软链接,这是因为硬链接是共享一个索引节点,软链接则是根据路径来查找文件,需要多次I/O操作,因此慢于硬链接。
总结:
文件保护¶
书4.1.6
- 每个文件都会有一张访问控制表。
- 对于文件的访问控制,常由用户访问权限和文件属性共同限制。
总结:
文件系统的层次结构¶
408不要求
总结:
文件系统布局¶
总结:
虚拟文件系统¶
- vnode只存在于主存,inode既会被调入主存,也会在外存中存储。
- 虚拟文件系统的特点:
- 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。
- VFS 要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统 VFS 的要求。
- 每打开一个文件,VFS 就在主存中新建一个 vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。

笔记整理¶
- 只要完成了文件打开open()系统调用,后面再进行任何文件操作的系统调用时,就可以不再使用文件名,而是使用文件描述符。(Unix和Windows)
- 连续分配主要产生的是外部碎片,因为连续的分配释放后,产生了分散的,无法进行连续连续分配的外部碎片;当然,也会产生一些内部碎片。
- 关闭文件操作不一定会将新文件数据写回磁盘,写文件操作才会写回磁盘(不考虑延迟写)。
- 在文件目录中每个目录项仅由文件名和相应的索引节点号(或索引节点指针)构成。索引节点中存放的是文件描述信息(剩下的FCB内容)。
- 一个文件的访问,常由用户访问权限和文件属性共同限制。
- 逻辑结构是为了方便用户,物理结构的选择取决于文件系统设计者针对硬件结构(如磁带介质很难实现链接结构和索引结构)所采取的策略。
- 对用户程序来说,逻辑记录是存取单位;但对操作系统 / 磁盘来说,盘块才是存取单位。
- 要读一个文件,首先要用open系统调用打开该文件,open中的参数包含文件的路径名与文件名,而read只需要使用open返回的文件描述符,并不使用文件名作为参数。
- 数据量越小,直接索引越优;数据量越大,多级索引越优。
- FAT中不存当前盘块号,只有下一个盘块的盘块号。
- 簇即为块只不过Linux中叫块,windows中叫簇。
- 为防止文件受损,通常采用备份的方法,而存取控制矩阵方法用于多用户之间的存取权限保护。
- 不同进程获得的文件描述符是各自独立的,分别指向各自的用户打开文件表中的一项。
- 对外存文件区的管理应该以提高存储空间利用率为主要目的,这是因为通常的文件都较长时间地驻留在外存上,对它们的访问频率是较低的。
- 硬盘的主引导扇区由三部分组成:主引导程序(也称主引导记录,即MBR)、分区表、结束标志。
- 位图所占空间的大小只取决于外存空间的总大小(磁盘数量),而与当前空闲块数量无关。