文件系统基础
基本概念
文件,用户输入输出的基本单位,可以是文本文档、图片、程序等
文件包含一块存储空间(存储空间的里的数据),要对数据进行划分,贴上“标签”(索引和分类信息),以便索引和分类,不同用户对数据由不同的访问权限,也就包含了权限管理信息。
- 数据项,基本数据项、组合数据项
- 记录
- 文件
文件控制块和索引结点
- 文件的属性(元数据)
- 名称
- 类型
- 创建者
- 所有者
- 位置
- 大小
- 保护
- 创建时间
- 文件控制块FCB
操作系统通过文件控制块维护文件元数据,FCB的有序集合称为文件目录,一个FCB就是一个文件目录项
- 基本信息
- 存取控制信息
- 使用信息
- 索引结点inode
文件查找通过目录中的FCB的名字项,其余用不到,全部调入内存浪费空间!
所以将文件名和文件描述信息分开,文件描述信息单独形成称为*索引结点(inode)*的数据结构(被文件目录项索引且去索引文件物理地址),文件目录项变为文件名和指向该文件对应的i结点的指针构成(有的系统是这样的UNIX。
- 磁盘索引结点,每个文件有一个唯一的文件索引结点,包含文件主标识符、文件类型(普通/目录/特别)、文件存取权限、文件物理地址(索引文件物理地址)、文件长度、文件链接计数(指向该文件名的指针计数,硬链接)、文件存取时间;
- 内存索引结点,磁盘索引结点复制到文件索引结点,并且附加索引结点编号、状态、访问计数、逻辑设备号、链接指针;
文件的基本操作
基本操作
操作系统提供系统调用
- 创建文件
- 写文件
- 读文件
- 重新定位文件,文件定位
- 删除文件
- 截断文件
打开与关闭
为避免疯狂检索目录,操作系统维护一个包含所有打开文件信息的表(打开,将文件的属性从外存复制到内存的打开文件表的一个表项里,并返回编号给用户)
多个不同进程同时打开文件,通常采用两级表,每个进程表和一个系统表,进程用系统表给的文件描述符(句柄)访问文件
每个打开文件都包含
- 文件指针,跟踪读写位置
- 文件打开数
- 文件磁盘位置
- 访问权限
文件保护
访问类型
- 读
- 写
- 执行
- 添加
- 删除
- 列表清单
访问控制
- 用户身份控制,增加访问控制列表ACL,简化拥有者、组和其他
- 口令,访问文件提供口令,口令存在系统内部不够安全
- 密码,对文件进行加密,访问文件使用密钥解密,编码译码耗时
文件逻辑结构
无结构(流式)文件
数据按顺序组织成记录并积累、保存;
有结构(记录式)文件
- 顺序文件,记录一个接一个排,记录定长;串结构(通常时间)和顺序结构(关键字排序)
- 索引文件,定长记录(随机)或不定长记录(建立索引表,转为对定长索引)
- 顺序索引文件,顺序文件分组,建立索引表
文件物理结构
- 连续分配
- 链接分配,隐式(盘块含有指向下一个的盘块的指针),显示(链接物理块的指针从盘块中提取出来,显式存放在内存中的链接表里,一个系统一张表,FAT)
- 索引分配,一个物理块存放索引表,连接方案、多层索引
- 混合索引分配,直接块,一级间址,二级间址...
目录
基本概念
FCB的有序集合车各位文件目录,FCB就是一个文件目录项。与文件管理系统和文件集合相关联的是文件目录;
目录结构
- 单级目录结构
- 两级目录结构
- 树形目录结构
- 无环图目录结构
目录操作
- 搜索
- 创建文件
- 删除文件
- 创建目录
- 删除目录
- 移动目录
- 先是目录
- 修改目录
目录实现
- 线性链表
- 哈希表
文件共享
- 基于索引结点的共享方式(硬)
- 利用符号链接实现文件共享(软)文件类型LINK
文件系统
层次结构
I/O控制
基本文件系统
文件组织模块
逻辑文件系统
用户接口
文件目录系统
存取控制模块
逻辑文件系统和信息缓冲
物理文件系统
设备管理模块
辅助分配模块
文件系统布局
文件系统在磁盘中的结构
磁盘划分为一个或多个分区,每个分区都有独立的文件系统,包含启动存储在分区中的操作系统的启动方式、总的块数、空闲块的数量和位置、目录结构以及各个具体文件
- 主引导记录Master Boot Record,位于磁盘0号扇区,用来引导计算机,后面是分区表,给出各个分区的起始地址和结束地址;表中一个分区被定义为活动分区,计算机启动,BIOS读入并执行MBR,第一件事是确定活动分区,读入它的第一块(引导块)
- 引导块boot block,MBR执行引导块程序后,该程序负责启动操作系统
- 超级快super block,包含文件系统的关键信息比如块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等
- 文件系统中的空闲块信息,有好多方法指出
- 后面也许是i结点,根目录,文件和目录
文件系统在内存中的结构
内存中的信息用于管理文件系统并通过缓存来提高性能,这些数据在安装文件系统是被加载,操作市被更新,卸载时被丢弃;
- 内存中的安装表mount table,包含每个已安装的文件系统分区的有关信息
- 内存中的目录结构缓存,最近访问的信息、对安装分区的目录可以包括指向分区的指针
- 整个系统的打开文件表
- 每个进程的打开文件表
外存空闲空间管理
- 空闲表法
- 空闲链表法
- 位示图法
- 成组链接法
虚拟文件系统
虚拟文件系统VFS为用户程序提供文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节
linux实现VFS的方式
- 超级块对象,表示已安装(挂载)的特定文件系统;对应于特定扇区的文件系统超级块,用于存储已安装文件系统的元信息,包含基本属性信息
- 索引结点对象,表示一个特定的文件;索引结点对文件是唯一的,文件被访问时在内存中创建索引结点对象,会复制一些磁盘索引节点数据并添加一些必要数据
- 目录项对象,表示一个特定的目录项;为了提升切换目录效率引入,包含指向关联索引结点指针,父子目录指针,他没有对映的数据结构,而是在VFS遍历路径过程中,逐个解析成目录对象
- 文件对象,表示一个与进程相关的已打开的文件;文件对象和物理文件类似于进程和程序
分区和安装
一个磁盘划分为多个分区,每个分区都可以创建单独的文件系统,每个分区还可以包含不同的文件系统;
引导块有自身的格式,还未加载文件系统无法解析文件系统格式;
文件系统在进程使用之前必须先安装(挂载)
Windows系统维护一个扩展的两级目录,驱动器字母表示设备和卷,
UNIX使用的是根文件系统,由内核直接引导安装,其他文件系统要么初始化脚本安装,要么用户安装在已安装文件系统的目录下