Linux文件系统

文件组成
  • inode(索引节点,index node)

和文件(普通文件、目录文件)一一对应,存储在磁盘中

一般包含inode编号、文件大小、访问权限、创建修改时间、文件数据块位置等

  • dentry(目录项,directory entry)

用于记录文件名,inode指针,目录层级关系等,缓存在内存中

目录和目录项

目录是一个文件,其中保存子目录和文件,存储在磁盘中

目录项是一个数据结构,缓存在内存中,用于加速目录的读取。每个目录项可以指向一个文件或目录(也就是每个目录项有一个inode)

磁盘布局

扇区:磁盘读写的最小单元,512B

逻辑块:文件系统读写的最小单位,4KB

一般最开始是超级块,用于管理文件系统(块个数、大小、空闲块),文件系统挂载是进入内存

然后是一些索引节点区,用来存储inode,需要使用的时候会被加载如内存

最后面是数据块区,村濑存储文件数据(inode指向这个区)

虚拟文件系统VFS

VFS是用户系统和文件系统的中间层,用于把各种不同的文件系统抽象成一个统一的接口

Linux中的文件主要有三种:

  1. 磁盘的文件系统,把文件存储在磁盘中
  2. 内存的文件系统,/proc和/sys属于此类,该类文件存储在内存中
  3. 网络的文件系统,用来访问其他计算机的数据

文件系统需要先挂载到某个目录才能使用

文件的读写
  1. 使用open打开一个文件,获取文件描述符

OS会为每个进程维护一个打开文件表,打开文件后,文件的描述符会加入到文件表中。

这个文件表主要维护:

  • 文件指针:上次读写当前文件的位置指针(对进程唯一)
  • 文件打开计数器
  • 文件磁盘位置
  • 访问权限
  1. read、write进行读写

用户进程往往读取单位为字节,而文件系统以数据块为单位读取

  • 用户从文件中读取一个字节数据时,文件系统首先找到该字节所在的数据块,然后再返回对应位置的数据
  • 用户写入一个字节数据时,文件系统将数据写入数据块的对应位置,再写回磁盘
  1. close关闭文件

文件打开计数器-1,如果文件被删除,等到计数器值为0时,再从磁盘中删除

文件的存储和空闲块管理

分为连续方式和非连续方式

非连续方式又有FAT、链式索引块、索引表法(一级、二级、三级)

FAT:一个FAT表,指向下一个数据块的序号

链式索引块:next指向下一个数据块

索引表:专门用一个数据块记录,每个表项有个指针指向数据块

空闲块管理有空闲表法、空闲链表法和位示图法

空闲表法:序号、第一个空闲块号、空闲块个数

空闲链表法:next指向下一个空闲块

位示图法:一个二进制位表示一个块是否被使用。每个块能表示128M,称为一个块组。Linux中由多个块组共同管理空闲块

目录的存储

目录也是文件的一种,也有inode。

目录表的每一项:文件inode号、文件类型、文件名

软链接和硬链接

硬链接:多个目录项的索引文件指向一个inode

软链接:新建inode,文件的内容是另一个文件的路径。原始文件被删除时,软链接仍然存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值