磁盘有效化

一个磁盘要想真正变得有用,一般要按顺序经历以下的过程

  • 物理格式化(低级格式化):一般在磁盘出厂时进行,主要是给磁道划分扇区,排查错误扇区。
  • 分区:由软件进行,比如FDISK
  • 逻辑格式化(高级格式化):建立文件系统
  • 安装操作系统。

文件

定义

是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。

信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系。
也就是说,文件内容是由信息项组成的。

组成

文件体、文件说明

文件体

文件内容

文件说明

文件存储和管理的相关信息,比如文件名、文件内部标识、文件存储地址、访问权限、访问时间。

文件系统

数据结构

文件控制块(FCB)

定义

保存管理文件所需的所有有关信息(文件属性或元数据)

内容

  • 基本信息:文件名、物理位置、文件逻辑结构、文件物理结构
  • 访问控制信息:文件所有者、访问权限
  • 使用信息:创建时间、上一次修改时间、当前使用信息。

文件逻辑结构

我们用户看到的文件表面上的行文结构,举一个这样的例子:

程序员在写代码时其实考虑的都是文件的逻辑结构,比如顺序文件,索引文件(什么一级索引,多级索引,B树索引,Hash索引都是文件的逻辑结构),也就是程序在写代码时思考如何从文件中读数据时,脑袋里面装的都是文件的逻辑,把文件视为一个整体,一整块的。

比如对于逻辑结构包含索引的文件,程序员写代码时首先会使用c语言的read系统调用读文件中的索引,传入的参数是索引在哪个文件、相对于文件开头多少偏移、多少字节的数据,这些都是在根据文件的逻辑在思考数据的位置。

然后从用户态切换到内核态,操作系统开始根据文件的物理结构来读数据的。

文件物理结构

连续结构

存放图示

连续结构

存取图示

顺序存取方式

特点

  • 结构简单,开销小
  • 支持随机读取,速度快
  • 连续存时速度快
  • 文件长度不易改变

    所以只适用于文件长度不怎么改变的系统中。
    这种排序使作业访问磁盘时需要的寻道数和寻道时间减少,读取时间可就不见得了。

    串联/链接文件结构

    存放图示

    存放图示

    存取图示

    串联链接文件图示

    特点

  • 空间利用率高、较好利用辅存空间
  • 文件动态扩充和修改容易
  • 顺序存取效率高
  • 不能随机访问
  • 可靠性较差
  • 指针本身占用空间

    也分为显式链接和隐式链接两种,前面的是隐式链接。显式链接就是FAT表。

    索引文件结构

    存放图示

    存放图示

    存取图示

    索引文件图示

    注意事项

    查索引文件需要访问内存两次,一次是查索引表、一次是查文件。

    特点

  • 集中了链接文件和顺序文件的优点
  • 本身带来了更大的系统开销(时间上、内存上)

组织形式

  • 链接模式:一个盘块一个索引表、多个索引表链接起来
  • 多级索引:将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中
  • 综合模式:直接索引方式与间接索引方式结合
    综合模式

目录

实现

直接法

目录项=文件名+FCB
直接法

间接法

目录项=文件名+FCB的地址
间接法
在这里,FCB的地址叫法也不太合适,因为FCB包含文件名,但显然文件名已经在目录项里了,这里准确的说法是i节点的地址。

直接法会让目录项变得庞大,那么在检索的时候,一个块里面能容纳的目录项就会变少,会导致多次访问磁盘,造成速度下降。
间接法会让目录项变得很小,只有文件名和一个指针,那么在检索的时候,一个块里面能容纳的目录项就会很多,访问一次磁盘就能拿到很多的目录项,提高了性能。

文件名处理

由于实际需要,常常需要支持长文件名。

实现方法

  • 在目录项中,将文件名的长度固定为255字符(但显然是不合理的,造成了大量的空间浪费)
  • 目录项长度可变:目录项的长度不再固定,随具体存放内容而定。(回收时造成困难)
  • 目录项长度固定,把长度不定的文件名统一放在目录文件的末尾

    图示

    长文件名

软/硬连接

总览

软硬链接

硬连接

硬链接

软连接

软连接

硬连接可以保证只要仍然有链接,该文件就不会被真正删除。
软连接在真正指向i节点的目录项被删除后(即文件主被删除后),连接都会失效。

文件系统性能

方法

目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术等。

块高速缓存

定义

在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本。当对文件系统进行操作的时候,如果块在内存内可以直接访问,否则调入后再访问。

组织形式

块高速缓存组织形式

总结就是一个双向链表,一个哈希表加速访问。
访问一次挂到最后。
替换时记得考虑脏位(是否需要写回)

FCB分解法

适用于直接法存储目录项,将FCB割成两块,小块继续存在远处,大块由小块指针索引。
在这种情况下,如果要访问完整的FCB,需要在找到页目录项后再次访问一次磁盘把剩下的大块找全。

感觉就是间接法的思路,但是不彻底。

FAT12

FAT表项解析簇号

解析簇号

簇号是12位,FAT表是一个整数数组,也就是32位,那么如何对应是一个问题:
3个字节一循环,前8位黏在一起分配,拆开中间8位为两个四位,后四位与前面的8位拼接,后面的8位与前四位拼接。依次循坏……

虚拟文件系统VFS

图示

VFS

个人理解,VFS实现了在一个设备上挂载多个文件系统,对外呈现统一的接口。