文件管理

7/29/2022 可恶的408

文件系统基础

基本概念

文件,用户输入输出的基本单位,可以是文本文档、图片、程序等

文件包含一块存储空间(存储空间的里的数据),要对数据进行划分,贴上“标签”(索引和分类信息),以便索引和分类,不同用户对数据由不同的访问权限,也就包含了权限管理信息。

  • 数据项,基本数据项、组合数据项
  • 记录
  • 文件

文件控制块和索引结点

  1. 文件的属性(元数据)
  • 名称
  • 类型
  • 创建者
  • 所有者
  • 位置
  • 大小
  • 保护
  • 创建时间
  1. 文件控制块FCB

操作系统通过文件控制块维护文件元数据,FCB的有序集合称为文件目录,一个FCB就是一个文件目录项

  • 基本信息
  • 存取控制信息
  • 使用信息
  1. 索引结点inode

文件查找通过目录中的FCB的名字项,其余用不到,全部调入内存浪费空间!

所以将文件名和文件描述信息分开,文件描述信息单独形成称为*索引结点(inode)*的数据结构(被文件目录项索引且去索引文件物理地址),文件目录项变为文件名和指向该文件对应的i结点的指针构成(有的系统是这样的UNIX。

  • 磁盘索引结点,每个文件有一个唯一的文件索引结点,包含文件主标识符、文件类型(普通/目录/特别)、文件存取权限、文件物理地址(索引文件物理地址)、文件长度、文件链接计数(指向该文件名的指针计数,硬链接)、文件存取时间;
  • 内存索引结点,磁盘索引结点复制到文件索引结点,并且附加索引结点编号、状态、访问计数、逻辑设备号、链接指针;

文件的基本操作

基本操作

操作系统提供系统调用

  1. 创建文件
  2. 写文件
  3. 读文件
  4. 重新定位文件,文件定位
  5. 删除文件
  6. 截断文件

打开与关闭

为避免疯狂检索目录,操作系统维护一个包含所有打开文件信息的表(打开,将文件的属性从外存复制到内存的打开文件表的一个表项里,并返回编号给用户)

多个不同进程同时打开文件,通常采用两级表,每个进程表和一个系统表,进程用系统表给的文件描述符(句柄)访问文件

每个打开文件都包含

  1. 文件指针,跟踪读写位置
  2. 文件打开数
  3. 文件磁盘位置
  4. 访问权限

文件保护

访问类型

  1. 执行
  2. 添加
  3. 删除
  4. 列表清单

访问控制

  1. 用户身份控制,增加访问控制列表ACL,简化拥有者、组和其他
  2. 口令,访问文件提供口令,口令存在系统内部不够安全
  3. 密码,对文件进行加密,访问文件使用密钥解密,编码译码耗时

文件逻辑结构

无结构(流式)文件

数据按顺序组织成记录并积累、保存;

有结构(记录式)文件

  1. 顺序文件,记录一个接一个排,记录定长;串结构(通常时间)和顺序结构(关键字排序)
  2. 索引文件,定长记录(随机)或不定长记录(建立索引表,转为对定长索引)
  3. 顺序索引文件,顺序文件分组,建立索引表

文件物理结构

  1. 连续分配
  2. 链接分配,隐式(盘块含有指向下一个的盘块的指针),显示(链接物理块的指针从盘块中提取出来,显式存放在内存中的链接表里,一个系统一张表,FAT)
  3. 索引分配,一个物理块存放索引表,连接方案、多层索引
  4. 混合索引分配,直接块,一级间址,二级间址...

目录

基本概念

FCB的有序集合车各位文件目录,FCB就是一个文件目录项。与文件管理系统和文件集合相关联的是文件目录;

目录结构

  1. 单级目录结构
  2. 两级目录结构
  3. 树形目录结构
  4. 无环图目录结构

目录操作

  1. 搜索
  2. 创建文件
  3. 删除文件
  4. 创建目录
  5. 删除目录
  6. 移动目录
  7. 先是目录
  8. 修改目录

目录实现

  1. 线性链表
  2. 哈希表

文件共享

  1. 基于索引结点的共享方式(硬)
  2. 利用符号链接实现文件共享(软)文件类型LINK

文件系统

层次结构

  1. I/O控制

  2. 基本文件系统

  3. 文件组织模块

  4. 逻辑文件系统

  5. 用户接口

  6. 文件目录系统

  7. 存取控制模块

  8. 逻辑文件系统和信息缓冲

  9. 物理文件系统

  10. 设备管理模块

  11. 辅助分配模块

文件系统布局

文件系统在磁盘中的结构

磁盘划分为一个或多个分区,每个分区都有独立的文件系统,包含启动存储在分区中的操作系统的启动方式、总的块数、空闲块的数量和位置、目录结构以及各个具体文件

  1. 主引导记录Master Boot Record,位于磁盘0号扇区,用来引导计算机,后面是分区表,给出各个分区的起始地址和结束地址;表中一个分区被定义为活动分区,计算机启动,BIOS读入并执行MBR,第一件事是确定活动分区,读入它的第一块(引导块)
  2. 引导块boot block,MBR执行引导块程序后,该程序负责启动操作系统
  3. 超级快super block,包含文件系统的关键信息比如块的数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等
  4. 文件系统中的空闲块信息,有好多方法指出
  5. 后面也许是i结点,根目录,文件和目录

文件系统在内存中的结构

内存中的信息用于管理文件系统并通过缓存来提高性能,这些数据在安装文件系统是被加载,操作市被更新,卸载时被丢弃;

  1. 内存中的安装表mount table,包含每个已安装的文件系统分区的有关信息
  2. 内存中的目录结构缓存,最近访问的信息、对安装分区的目录可以包括指向分区的指针
  3. 整个系统的打开文件表
  4. 每个进程的打开文件表

外存空闲空间管理

  1. 空闲表法
  2. 空闲链表法
  3. 位示图法
  4. 成组链接法

虚拟文件系统

虚拟文件系统VFS为用户程序提供文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节

linux实现VFS的方式

  • 超级块对象,表示已安装(挂载)的特定文件系统;对应于特定扇区的文件系统超级块,用于存储已安装文件系统的元信息,包含基本属性信息
  • 索引结点对象,表示一个特定的文件;索引结点对文件是唯一的,文件被访问时在内存中创建索引结点对象,会复制一些磁盘索引节点数据并添加一些必要数据
  • 目录项对象,表示一个特定的目录项;为了提升切换目录效率引入,包含指向关联索引结点指针,父子目录指针,他没有对映的数据结构,而是在VFS遍历路径过程中,逐个解析成目录对象
  • 文件对象,表示一个与进程相关的已打开的文件;文件对象和物理文件类似于进程和程序

分区和安装

一个磁盘划分为多个分区,每个分区都可以创建单独的文件系统,每个分区还可以包含不同的文件系统;

引导块有自身的格式,还未加载文件系统无法解析文件系统格式;

文件系统在进程使用之前必须先安装(挂载)

Windows系统维护一个扩展的两级目录,驱动器字母表示设备和卷,

UNIX使用的是根文件系统,由内核直接引导安装,其他文件系统要么初始化脚本安装,要么用户安装在已安装文件系统的目录下