操作系统——文件系统基础
文件概念
文件
文件(File)是以计算机硬盘为载体的存储在计算机上的信息集合,可以是文本文档、图片、程序等,系统运行时,计算机以进程为基本单位进行资源的调度和分配,而用户在进行的输入、输出中,则以文本为基本单位
- 数据项
数据项是文件系统中最低级的数据组织形式,分为两种
- 基本数据项
数据中可命名的最小逻辑数据单元,即原子数据 - 组合数据项
由多个基本数据组成
- 记录
记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性 - 文件
文件是指创建者所定义的一组相关信息的集合,逻辑上可以分为有结构文件和无结构文件
- 有结构文件
有结构文件又称记录式文件,由一组相似的记录组成 - 无结构文件
无结构文件又称流式文件,可以视为一个字符流,如二进制文件或字符文件
文件属性
- 名称
- 标识符
- 类型
- 位置
- 大小
- 保护
- 时间、日期和用户标识
文件基本操作
- 创建文件
在文件系统中找到空间,在目录中创建条目,该条目记录文件名称、文件位置等其他文件相关信息 - 写文件
执行系统调用,指明文件名称和要写入的内容,对于文件名称,系统搜索目录查找文件位置,系统为这个文件维护一个写位置的指针 - 读文件
执行系统调用,指明文件名称和要读取文件块的位置,由于进程通常支队一个文件读或写,读写使用同一指针 - 文件重定位
按某条件搜索目录,将当前位置设为给定值 - 删除文件
删除文件在目录中的对应目录项,回收该文件的存储空间
文件打开与关闭
- 文件打开
使用系统调用open将指定文件的属性从外存复制到内存打开文件表中的一个表目中,并将该文件的编号返回给用户 - 打开文件表
操作系统维护一个包含所有打开文件信息的打开文件表(open-file-table),当用户需要一个文件操作时,可以通过该表的一个索引指定文件,因此省略了搜索环节。大部分操作系统要求在文件使用之间就被显示地打开,进程调用open返回一个纸箱打开文件表中一个条目的指针,通过这个指针来进行I/O操作,在open调用完成后,操作系统对该任何文件的操作都不在需要文件名,只需要open调用返回的指针即可。
- 打开文件关联信息
- 文件指针
系统跟踪上次的读写位置作为当前文件位置的指针 - 文件打开计数
记录多少个进程打开了该文件,计数为0时,操作系统会关闭文件,在打开文件表中删除该条目 - 文件磁盘位置
记录文件在磁盘的位置 - 访问权限
记录打开文件的访问权限(创建、只读、只写、读写、删除、增加等)
- 文件关闭
文件在打开文件表中对应的打开计数器为0时,操作系统将关闭文件,若文件被修改过则需要写回外存,并将系统打开文件表中删除对应条目,操作系统回收相应主存空间
文件的逻辑结构
文件的逻辑结构是从用户角度出发看到的文件的组织形式,文件的物理结构是从实现角度出发看到的文件在外存上的存储组织形式
- 无结构文件
又称为流式文件,无结构文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节为单位,管理较为简单,但只能通过穷举搜索的方式访问,使用字符流文件、源程序文件、目标代码文件等 - 有结构文件
又称为记录式文件
- 顺序文件
串结构:记录与关键字无关,由时间决定
顺序结构:文件中的所有记录按关键字顺序排序 - 索引文件
定长记录文件:Addressi = i* L
不定长记录文件:Addressn+1 = ∑ i = 0 n \sum_{i=0}^n ∑i=0n Li + i - 索引顺序文件
上述两种方式的结合,将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,同一组中关键字可以无序,但组间关键字必须有序,索引顺序文件提高了存取速度 - 直接文件或散列文件
给定记录的地址或通过散列函数转换的地址得到记录的物理地址
目录结构
文件块和索引结点
- 文件控制块
文件控制块(File Control Block)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”
,FCB的有序集合成为文件目录,一个FCB就是一个文件目录项
,若创建文件,操作系统将分配一个FCB存放在文件目录中作为文件目录项
相关信息
- 基本信息
- 存取控制信息
- 使用信息
- 索引结点
文件描述信息单独形成一个称为索引结点的数据结构
,在文件目录中的目录项仅由文件名和指向该文件所在索引结点的指针构成 - 磁盘索引结点
UNIX中每个文件都用一个唯一的磁盘索引结点,包括:
- 文件主标识符
- 文件类型
- 文件存取权限
- 文件物理地址
- 文件长度
- 文件链接计数
- 文件存取时间
- 打开文件时
磁盘索引结点复制到主存的索引节点中
- 索引节点编号
- 状态
- 访问计数
- 逻辑设备号
- 链接指针
目录结构
- 单级目录结构
在整个系统只建立一张目录表,每个文件占一个目录项,实现了“按名存取”,但查找速度慢、文件不能重名、不便于文件共享
- 两级目录结构
分成主文件目录(Master File Directory, MFD)和用户文件目录(User File Directory)两级,主文件目录项记录用户名及其相应用户文件目录所在存储位置,用户文件目录项记录该用户文件的FCB信息,用户访问文件时,搜索用户对应UFD,解决了文件重名的问题,但缺乏灵活性,不能进行文件分类
- 多级目录结构
又称为树形目录结构,用文件的路径名标识文件,分为绝对路径(根目录触发)和相对路径(当前工作母触发),树形目录结构能够对文件进行分类,层次结构清晰,能够更有效地进行管理和保护,但使用路径名逐级访问,增加磁盘访问次数,影响查询效率
- 无环目录结构
在树形目录的基础上增加一些指向同一结点的有向边,使目录成为一个有向无环图,能够方便地实现文件共享
文件共享
基于索引结点的共享方式
又称为硬链接,在文件目录中设置文件名以及指向相应索引结点的指针,索引结点中还有一个链接计数记录当前链接到索引结点上的用户目录项数目,只有当链接计数器为0时,即没有用户使用该文件,系统会将它删除
基于符号链实现文件共享
在用户目录中写入只包含被链接文件的路径名的LINK类型文件,只有文件拥有者拥有指向共享文件索引结点的指针,而其他共享用户只有该文件的路径名,即使文件拥有者删除共享文件也不会只留下一个悬空指针,但根据路径名逐级查找文件会增大开销
文件保护
文件访问类型
- 读
- 写
- 执行
- 添加
- 删除
- 列表清单
访问控制
- 访问列表
为每个文件和目录添加一个访问控制表(Access-Control List)以规定每个用户对该文件的访问类型
- 拥有者
- 组
- 其他
- 口令
口令指的是用户在建立一个文件时提供一个口令,系统为其建立FCB时附上口令,同时告诉允许访问该文件的用户,时空开销较少,但口令直接存放在系统内部,不安全 - 密码
密码指的是用户对密码进行加密,文件被访问时需要使用密钥,安全性强,但需要编码和解码
鸣谢
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!