操作系统 - 文件管理

文件系统层次结构

用户打开或者读写文件时,通过系统调用,读取文件的目录系统。通过读取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代表已使用的块。可以同给每个位置计算出磁盘的块号。

相关推荐
技术性摸鱼11 小时前
程序计数器 PC,指令寄存器IR、状态寄存器SR、通用寄存器GR
操作系统·系统架构师
Hello_Embed1 天前
FreeRTOS 入门(二十六):队列创建与读写 API 实战解析
笔记·学习·操作系统·嵌入式·freertos
空x格1 天前
Linux读写苹果APFS系统文件
操作系统
陈逸轩*^_^*1 天前
操作系统复习题库(期末速通版)
学习·操作系统·期末复习
愤怒的代码2 天前
🔗 深度解析 SystemUI 进程间通信机制(一)
android·操作系统·app
路弥行至2 天前
FreeRTOS任务管理详解中: FreeRTOS任务创建与删除实战教程(动态方法)
c语言·开发语言·笔记·stm32·操作系统·freertos·入门教程
www_stdio2 天前
JavaScript 内存机制深度解析:从执行上下文到闭包的内存视角
前端·javascript·操作系统
JohnYan2 天前
工作笔记-文件夹批量改名
操作系统·设计
元亓亓亓2 天前
考研408--操作系统--day7--非连续分配管理方式
考研·操作系统·存储·408