首页 > 其他分享 >文件系统的实现

文件系统的实现

时间:2022-11-04 17:55:52浏览次数:35  
标签:文件 实现 inode 文件系统 保存 文件夹 数据

本篇笔记记录了OSTPE中介绍的一种简单的文件系统VSFS的实现。

文件系统,就是一种关于如何在磁盘这种块设备中建立文件、文件夹概念的一套规范

块大小定义

为了方便,文件系统需要以一种单元来操作磁盘,这个单元就是块。VSFS选择常见的块大小——4KB,并且只使用这一种大小。比如,下面是一个具有256KB的磁盘的视图,我们把它分割成64个块:

img

为了实现文件系统都要存什么额外的牛马?

要落到物理磁盘上,就只有扇区、磁道的概念,你向上面写数据就是对一个单元的充磁和消磁操作,操作系统想要在这之上建立文件和文件夹的概念,首先就要在磁盘上组织出一些数据结构,来记录一些信息,比如用户定义的文件名与数据在磁盘上的物理位置的映射。下面是文件系统要考虑保存的一些东西

  1. 用户保存的数据(文件中的内容)
  2. 文件/文件夹的元信息(名字、创建修改时间、权限等),文件数据在哪些块中(文件系统通常使用inode结构来保存一个文件的这些数据)
  3. inode的表
  4. 记录哪些数据块和inode块已被分配
  5. 文件系统的元信息(比如有多少inode、文件系统类型等)

img

上图中,一块块的D就是数据块,用来保存用户数据;小写d块是数据块的位图,用于保存哪些数据块的分配状态,I块中保存了若干inode节点,小写iinode分配情况的位图,超级块S用于记录文件系统的元信息。

inode

inode列表,也就是下图这东西,其中保存了若干inode,若inode条目为256字节,那么5个4KB块就可以容纳4096/256*5=80个inode。

img

所以,我们系统中的80个inode可以被看作一个数组,它们的编号为0~79,每个inode可以保存一个文件或文件夹的信息,如下图:

img

一定要记住,inode通过编号定位,每一个inode可以确定一个文件或文件夹的内容(怎么确定稍后再说),所以inode编号也被称作文件的低级名称

无论是对于文件还是目录,inode都只保存其元信息,其内容信息保存在数据块中,稍后会看到如何通过inode确定数据块

本文讨论的只是文件系统的一种实现,不要拘泥于这个细节,而是学习它的思想。实际上,有的文件系统甚至没有inode的概念

inode定位数据块的几种方式

直接定位

inode中保存一个或多个直接指针,它们指向文件/文件夹对应的数据块。

缺点就是当文件/文件夹内容过大,超出指针数 * 块大小能保存的范围,就没法存了

多级索引(间接指针)

使用间接指针连接到某个数据块,然后使用数据块存储指针项,指向新的数据块。假设磁盘地址是4字节,一个4K块就能多出1024个额外数据块,文件最大大小增加到了(12 + 1024) * 4K = 4144KB

img

更大的文件就采用更多级的间接指针,这是指数级的增长。

其它方法

设计inode与数据块的映射并没有一个正确的办法,实际上还有基于范围、使用链表等方式,各有优缺点吧。

目录组织

快下班了,再说吧

标签:文件,实现,inode,文件系统,保存,文件夹,数据
From: https://www.cnblogs.com/lilpig/p/16858611.html

相关文章