【操作系统学习】(六)文件系统(1)

124 阅读5分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第4篇文章,点击查看活动详情

一点感悟

随着对操作系统学习的逐渐深入,越来越感受到如下两点:

  • 操作系统也有自己的“设计模式”,类似于人类社会的“管理模式”。从某种程度上说,操作系统管理调度和人文学科中的管理是互通的。
  • 数据结构与算法,虽然在写业务代码的时候可能用不到,但都一一体现在了操作系统的架构设计中。

产生文件系统这个抽象概念的背景:

满足计算机长期存储信息的需要

三大要求:

  • 能存储 大量 信息 (受虚拟地址空间大小限制,进程在其地址空间存储的信息有限)
  • 信息不受使用的进程影响 (而进程终止时其保存的信息会丢失)
  • 多个进程能 并发 访问有关信息 (某种程度上说信息必须和单个进程是解耦的,是一个独立的存在)

文件系统

这是进程创建的信息逻辑单元,是对在磁盘上保存信息而方便以后读取的物理实体的一种概念抽象。

从用户的角度看文件系统

文件命名

  • win95、win98(虽然现在早没人用了)是属于MS-DOS系统类,即对文件命名不区分大小写
  • 在unix系中,操作系统本身并不关心文件扩展名,用户自己改啥都行;而Windows系则严格规定。

文件结构

在操作系统看来,文件就是字节序列。(unix系以及Windows都是这种)

也有记录序列和树两种结构。前者现在已经没人用了,后者在一些处理商业数据的大型计算机上还应用广泛。

文件类型

image.png

探究其中的二进制文件--以可执行文件为例

未命名绘图.drawio (13).png

文件属性

文件的附加信息称为属性(atribute)或元数据(metadata)

文件目录

  • 进程切换工作目录是安全的
  • 但进程不能随意更改库文件目录,否则会由于其他进程对目录的假设失效,导致其他进程无法正常运行。

目录操作

link:

image.png

从用户的视角看,在多个目录下都会出现该文件。

从操作系统的视角看,多个路径(的指针/映射)都指向了该文件(这句是我的理解)

unlink

删除文件的本质就是unlink。只不过对于文件只出现在一个目录下的情况,表现为该文件直接消失;而对于文件有多个link的情况,unlink仅解除某个指定路径的link。

链接文件的一种可选方式——符号链接

一个file name指向命名另一个文件的小文件,当访问该小文件时,文件系统沿着路径最终找到了file name ,并且通过file name再找文件。

其中,这个file name就是符号,起到了跳板的作用。(不知道有没有理解错)

通过这种机制,不仅能跨越磁盘的界限,还能访问远程计算机上的文件。

从操作系统的角度看文件系统

文件系统布局

文件系统存放在磁盘上。

image.png

文件存储实现的几种方案

连续分配

  • 特点:将一连串连续数据块存储在磁盘上。 (我的理解是像划定一大块空间存放数组一样,存数据就赋值,取数据就将该位置置特殊值或移动指针)
  • 由上述表述可知,它的缺点是时间长了会产生“碎片”,优点是简单、读性能好(只需要按顺序读取)
  • 解决“碎片”问题的一种方案:维护一个“空洞列表”,当创建一个新的文件时,即确定该文件的最终大小。 (不过这是比较底层的了,即使有,普通用户也应该感知不到它的存在。比如我从来没有遇到要创建一个文件,系统提示我无法找到适合空间、从而创建失败的情况)
  • 该方案的使用场景:对于 一次性写光学介质来说,这种方案是适用的。

链表分配

  • 优点:充分利用每一个磁盘块
  • 缺点:随机访问慢(要从头开始找);磁盘块存储数据的字节数不再是2的整数次幂,降低了系统的运行效率(要读出完整块的信息,要耗费获得和拼接信息的开销)

在内存中使用文件分配表(file allocation table)的链表分配

(数组和链表的集合)

  • 优点:整块都可以存放数据;数据访问也较纯链表容易
  • 缺点:整张表占据的内存大,不实用。

i节点

给每个文件赋予一张表,称为i节点。表的内容格式如下:

image.png

这样,i节点的大小仅与可能要同时打开的最大文件数有关,而与实际磁盘大小无关。

当文件包含的磁盘块的数目超出了i节点所容纳的数目时,将其放入指针块地址中的附加地址处。

参考书籍

《现代操作系统》 Andrew S.Tanenbaum,Herbert Bos著,陈向群,马洪兵等译