第四章:文件管理

第四章:文件管理

本章结构
文件系统基础
文件目录
文件系统

Part1:文件系统基础

1、文件数据

  • 数据:普通文件中的实际数据
  • 元数据:描述文件特征的系统数据(创建日期、访问权限、····)实际上就是索引节点

2、文件的分类——按照逻辑结构划分

2.1 无结构文件:将数据按照顺序组织起来——流式文件

2.2 有结构文件:记录式文件

  1. 顺序文件:文件记录按照一定规则排序

    • 串结构:规则与记录关键字无关
    • 顺序结构:按照记录关键字排序
  2. 索引文件

    引入一张索引表用于查找文件

    请添加图片描述

  3. 顺序索引文件:前面2者的结合

    请添加图片描述

    将文件划分为若干组,索引表存放组内第一个关键字及其指针,在组内顺序查找

  4. 散列文件:通过关键字直接计算出地址

3、文件的物理结构

文件的物理结构即回答这个问题,文件在物理的磁盘上是如何组织分布的?这个问题分为两个方面

  • 磁盘非空闲块的管理——文件分配方式
  • 磁盘空闲块的管理——文件存储空间管理

3.1 文件分配方式

3.1.1 连续分配方式:文件在磁盘上占用连续的块,不宜动态增加

3.1.2 离散分配方式:可以动态增加

  1. 链接分配:采用链表实现1

    • 指针实现:显示链接

      请添加图片描述

    • 数组实现:隐式链接

      采用一张File Allocation Table(FAT)来记录所有文件的盘块号

      请添加图片描述

  2. 索引分配

    一个文件分配一个索引表,文件目录中仅包含索引表的地址

    请添加图片描述

    当一个文件太大,一个索引表放不下时应该怎么办?

    • 连接方案:将多个索引块连接起来
    • 多层索引:一级索引中存放着指向二级索引表的指针,二级索引中的指针指向的才是磁盘块地址
    • 混合索引:前面两种方法的结合

3.2 文件存储空间管理

  1. 空闲表法:采用空闲盘区表表示空闲区域

    请添加图片描述

  2. 空闲链表法:用链表表示空闲区域

    • 空闲磁盘块链:一个块一个链结点
    • 空闲磁盘区链:几个块一个链结点
  3. 位图法:采用一个An*m矩阵表示磁盘状态

    Aij=1表示该区域已经分配

    Aij=0表示该区域没有分配

  4. 成组链表法

    方法1、2的结合

    请添加图片描述

Part2:文件目录2

1、索引节点(inode)

文件存储在硬盘上,硬盘的最小单位是扇区(Sector),每个扇区存储512B,操作系统读取硬盘是不会一个个扇区的读取,这样子效率太低,而是一次性读取多个扇区,即一个块(Block),其大小为4KB(8个扇区)

文件的数据存储在块中,所以我们还需要一个地方存储文件元数据,这个存储元数据的地方被称为inode,每个文件都有一个inode(每个文件都必须有一个inode)。

inode中的内容至少包含这些内容:文件大小,文件使用者ID,文件组ID, 文件模式,文件修改时间,链接数量,文件数据块等

inode也会消耗硬盘存储空间,操作系统格式化硬盘时,会将硬盘划分为两个区域,一个为数据区专门存储数据,一个为inode table用于存储inode数据。一个inode大小为128B或者256B,所以在格式化时inode的数量就已经固定了。

每个inode均有一个号码,操作系统(Unix/Linux)用inode号来识别不同的文件,所以用户通过文件名打开一个文件的流程如下:

  • 通过通过文件名找到inode号
  • 通过inode号找到inode,读取文件信息
  • 通过文件信息,找到该文件所在的块

2、目录文件

在Unix/Linux中,目录也是一种文件,打开目录实际上就是打开目录文件。目录其实就是文件控制块的集合

请添加图片描述

关于目录权限还有几点需要说明:只有读权限(r)只能获得文件名,而无法获得其他信息,因为其他信息均存放于inode中,而读取inode信息,需要执行权限(x)

3、文件共享3

3.1 硬链接

请添加图片描述

3.2 软连接

请添加图片描述

4、文件目录结构

  • 单级目录:只有一个目录表,一个文件一个目录项
  • 两级目录:有连个目录表
    • 主文件目录:用户名及其inode
    • 用户文件目录:存储FCB信息
  • 多级目录:即树形目录结构
  • 无环图目录:为了方便文件共享,在树形目录结构的基础上增加了一些有向边

Part3:文件系统

1、虚拟文件系统

一个操作系统可以支持多种不同的文件系统,例如FAT,NTFS,ext3等为了给内核与用户进程提供统一的文件系统视图,Linux在用户进程和底层文件系统之间增加了一个抽象层,即虚拟文件系统(VIrtual File System, VFS)进程所有的文件操作都通过VFS,由VFS来适配各种底层不同的操作系统,完成实际的文件操作

请添加图片描述

2、文件系统挂载(mount命令)

即把设备(硬盘)中的文件系统加载到dir之上,让后我们可以通过dir来访问该设备。

具体流程为:针对某一设备,分析出其文件系统结构,并且根据文件系统类型调用相应驱动,处理元数据,将信息加载到Linux目录树上。

Part end:参考文献和一些说明


  1. 采用链接方式实现的文件大小是存在上限的,要收到指针能够表示的文件块的数量的制约,例如,一个磁盘块中使用4B来记录指针,则磁盘指针的数量共有232次个,所以一个文件的最大可以有232个磁盘块的大小 ↩︎

  2. 参考自阮一峰大佬的博客的这篇文章:http://www.ruanyifeng.com/blog/2011/12/inode.html ↩︎

  3. 在系统打开的文件表中关于共享文件的表项仅一项,而在用户打开的文件表中关于共享文件的表项则是每个进程一项,各不相同 ↩︎

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值