目录
文件管理
初识文件管理
文件的逻辑结构
但实际上, 可变长记录文件才是我们日常生活中使用的比较的多的。不然你写个word,写到一半突然没有空间了咋办。
有结构文件根据有结构文件中的各条记录在逻辑上如何组织,可以分为三类:1. 顺序文件 2. 索引文件 3. 索引顺序文件
顺序文件
这也就是为啥说MySQL中的字符串字段在可以确定定长时尽量采用char,而不是varchar这种变长的类型
索引文件
索引顺序文件
为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含 106个记录的文件,可先为该文件建立一张低级索引表,每 100 个记录为一组,故低级索引表中共有 10000个表项(即10000个定长记录),再把这 10000 个定长记录分组,每组100个,为其建立顶级索引表,故顶级索引表中共有 100 个表项。
文件目录
文件控制块(FCB)
一个FCB就是一个文件目录项
FCB 的有序集合称为"文件目录"FCB 中包含了文件的基本信息 (文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。
FCB 实现了文件名和文件之间的映射。使可用户(用户程序)以实现“按名存取"
目录结构分类
单级目录结构
早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项
两级目录结构
早期的多用户操作系统,采用两级目录结构。分为主文件目录 (MFD,Master File Directory) 和用户文件目录(UFD,User Flie Directory)
多级目录结构 (树形目录结构)
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”
无环图目录结构
索引节点(FCB的改进)
文件的物理结构(文件分配方式)
文件块、磁盘块
类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同.
内存与磁盘之间的数据交换 (即读/写操作、磁盘I/0) 都是以“块”为单位进行的。即每次读入一块,或每次写出一块
文件分配方式
连续分配
优点:
读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长
结论:连续分配的文件在顺序读/写时速度最快
缺点:
结论:物理上采用连续分配的文件不方便拓展
链接分配
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种
隐式链接
显示链接
索引分配
链接方案:如果索引表太大,一个磁盘块装不下,那么可以将多个索引块链接起来存放。
多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。
采用 K 层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要 K + 1 次读磁盘操作
混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表) 。
文件存储空间管理
存储空间的划分与初始化
存储空间管理
空闲表法
空闲链表法
位示图法
成组链接法
空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理
超级块中存储了当前的部分空闲盘块号,但要注意的是,第一个空闲盘块中存储了下一部分的空闲盘块的数据,为了避免这个空闲块被文件内容占用覆盖,所以会把这些记录数据写到超级块中进行保存(这时候超级块中是没有数据了的,因为你都要用第一个空闲块了,说明你超级块中所记录的那些空闲块都被占用了)
文件的基本操作
创建文件
删除文件
打开文件
关闭文件
读取文件
写文件
文件共享
注意:
多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
如果是多个用户都"复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。
基于索引结点的共享方式(硬链接)
知识回顾:索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。
基于符号链的共享方式(软链接)
文件保护
口令保护
加密保护
访问控制
文件系统的层次结构
文件系统的全局结构
物理格式化
物理格式化,即低级格式化——划分扇区,检测坏扇区,并用备用扇区替换坏扇区
逻辑格式化
逻辑格式化后,磁盘分区(分卷 Volume),完成各分区的文件系统初始化注:逻辑格式化后,灰色部分就有实际数据了,白色部分还没有数据
文件系统在内存中的结构
注:近期访问过的目录文件会缓存在内存中,不用每次都从磁盘读入,这样可以加快目录检索速度