操作系统 - 文件管理

文件系统层次结构

用户打开或者读写文件时,通过系统调用,读取文件的目录系统。通过读取FCB信息,判断是否有权限访问该文件。权限通过后,读取缓冲区中的信息,找到文件具体所在的逻辑块号,通过文件块号操作具体的文件。

目录实现

目录本质上是数据结构,有线性表和哈希表两种结构。

文件分配方式

和内存一样,对磁盘也进行分块管理,每个块一般4K大小。

连续分配

优点:支持直接和顺序访问,速度块

缺点:容易产生内部和外部碎片

内部碎片:0~2号块没有写满数据

外部碎片:比如文件需要4个块,0~2号块容量不够,而3、4号块又被使用了,则会从5号块开始写,存储到了5-8号块,此时0-2号则被称为外部碎片

链接分配

优点:支持顺序访问,方便扩展,不会造成外部碎片

缺点:不能直接访问,效率低;

隐式链接分配

每个盘块记录下一个盘快的指针,如果某一个盘块坏了,后续都读取不了,有数据丢失风险。

显示链接分配

指针数据单独拿出来,不再在块上存储下一个块号的地址。支持顺序访问,随机访问

索引分配

一级索引

以A文件为例,具体内容存储在块号为3、6、23上,使用一维数组来维护文件索引表中逻辑块号与物理块号的关系。再将文件索引表存储到物理块编号为1号的块上。读取文A文件时,先找到1号块,从中读取文件索引表,按序顺序读取文件。

由于每个块号假设为4K,一维数组中存储的是整形(4字节),也就意味着一个块号只能存1024个元素,每个元素指向一个物理块号,因此一级索引能够存储的最大文件只有4M(1024 * 4k =4M)

二级索引

一级索引的缺点在于不能存储大文件,通过二级索引解决该问题。

二级索引中,索引块中存储的不再是文件索引表信息,而是继续存储索引。通过文件块号找到一级索引,在通过一级索引找到二级索引。二级索引支持的单个文件大小为4G。(10241024 4K)

混合索引

二级索引虽然解决了大文件问题,但是由于需要两次索引,文件的读取效率也会有所下降。为了解决该问题,引入混合索引。

混合索引和二级索引类似,区别在于,将某些热点数据的物理块号直接存储在一级索引表中。即部分文件(热点数据)是通过一级索引表直接找到物理块号读取。

文件存储空间管理

一个物理磁盘尅分成多个逻辑盘,每个逻辑盘中又区分为目录区和文件区。

目录区存放FCB以及磁盘空间管理信息,文件区存放文件数据。

空闲表法 & 空闲链表法

空闲表法与空闲链表法在大文件场景下效率较低。

成组链接法

成组链接法借鉴了空闲链表法实现。为方便理解,下面将分布介绍成组链接法:

  • 先将所有空闲的块分成若干组存储到栈结构的数据结构中,如下所示,每个栈存储100个元素,最后一组若不足100,则存放实际数量即可,如下所示:
  • 每个栈底的元素存储了下一个节点的信息,如下一个栈有多少个元素,栈中存储的空闲数据块编号。
  • 当后续再无分组时,使用的特殊值0或-1表示。从栈中读取数据时,如果读取到的数据编号为0则代表后续再无空闲块
  • 由于是链表结构,只需要在操作系统中加载头部指针即可,因此有了超级块,超级块中存储的即为头部指针信息。

位式图法

二维数组中0代表空闲的磁盘块,1代表已使用的块。可以同给每个位置计算出磁盘的块号。

相关推荐
柏木乃一3 小时前
ext2文件系统(2)inode,datablock映射,路径解析与缓存,分区挂载,软硬连接
linux·服务器·c++·缓存·操作系统
lcreek12 小时前
Linux信号机制详解:阻塞信号集与未决信号集
linux·操作系统·系统编程
明洞日记17 小时前
【软考每日一练008】Web 服务器性能测试指标
运维·服务器·操作系统·软考
yuanmenghao1 天前
Linux 配置Samba,Windows登录,开机自动映射登录
linux·运维·windows·操作系统·samba
强壮的派大星1 天前
AI训练存储系统的架构选型演变:对象存储为后端的文件系统概论
操作系统·ai infra
炸膛坦客2 天前
FreeRTOS 学习:(二十四)任务状态与信息查询 API 函数
stm32·操作系统·freertos
c++逐梦人2 天前
进程虚拟地址空间
linux·操作系统·进程
明洞日记2 天前
【软考每日一练007】位图计算与内存管理深度全解
c++·算法·ai·操作系统·进程
炸膛坦客3 天前
FreeRTOS 学习:(二十五)任务时间统计相关 API 函数
stm32·操作系统·freertos
c++逐梦人3 天前
进程的优先级与切换
linux·服务器·操作系统