文件系统介绍
文件系统概念
文件系统是操作系统用于明确存储设备分区上的文件的方法和数据结构。它负责组织和管理文件,并提供了存储、检索、共享和保护文件的功能。
没有文件系统就无法存储文件
文件系统分类:FAT,NTFS(windows),ext(linux)
文件系统种类可以更改
扇区概念
扇区操作磁盘的基本单位
ext2文件系统介绍
Boot Block
1kb大小 记录磁盘分了几个区 pc设备必须存在Boot Block 否则不被pc组织承认
格式化
将磁盘分成若干个Block 可以设置1k,2k,4k 默认4096-4k IO块
1 block = 4096 byte
1 block = 8 磁盘扇区
1 扇区 = 512byte
1 block = 32768 bit
多个block 使用Block group 管理
数据块data block
文件组成
文件属性 + 文件内容
data block存储文件内容
inode table存储文件属性
inode table结点
大小128bit
存储文件属性64bit + 数据块地址指针60bit
理论上 多少个inode 就可以存储多少文件
块位图block bitmap
用每个bit位标识每个块是否被使用
这个bit为1表示已使用
这个bit为0表示空闲可以使用
inode bitmap 位图
同block bitmap 用于表示inode是否空闲可用
GDT 块组描述浮表
1 描述第几个块的起始位置
block bitmap
inode bitmap
inode table
data block
2 空先inode有多少
超级块 4kb
1 记录块大小
2 文件系统版本号
3 磁盘上次mount挂载时间
1 存储文件
保存文件a.txt
通用步骤
1 Boot block 查看分区
2 GDT 查看起始位置 和 是否存在空闲inode
不同部分
3 在block bitmap 找到空闲block bitmap 写入为保护数据 标志位置1
4 在inode bitmap 找到空闲inode bitmap 写入文件属性 标志位置1 把data block写入inode 指针
2 查看文件
1 在GDT查看inode table起始位置
2 起始位置+128*inode结点编号 = inode对应位置偏移计算
3 根据指针读取data block地址存储数据
3 删除文件
为什么下载很慢 删除很块?
1 查看Boot block 磁盘分区
2 查看GDT快组描述符表 查看位图
3 找到对应date bitmap位图和inode bitmap位图 都置0
删除完成内容还存在 直至对应内存被新的数据覆盖
文件系统函数
stat和asscess函数
chmod和chown函数
utime和utruncate函数
link,symlink,readlink,unlink 函数
rename,chdir,getcwd和pathconf函数
递归历遍目录
mkdir和rmidir函数
opendir和readdir函数
telldir和seekdir函数
closedir函数
虚拟文件系统
虚拟文件系统(VFS)是操作系统中的一个抽象层,它为不同的文件系统提供了一个统一的接口。这使得操作系统可以用相同的方式处理多种不同类型的文件系统,如同时处理 ext4、NTFS、FAT 等,而不需要针对每种文件系统编写单独的代码来处理文件操作。
为什么需要虚拟文件系统
经过虚拟文件系统VFS 才能到达驱动层
虚拟文件系统怎么工作的
在虚拟文件层 根据调用函数功能去驱动层调用不同的open函数 打开不同的文件系统
duo和dup2函数
实现利用printf向文件输出数据
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。
dup
函数用于复制一个已有的文件描述符
dup2
函数也是用于复制文件描述符,但它提供了更多的控制
首先打开一个文件output.txt
用于写入,得到文件描述符fd
。然后使用dup2
函数将标准输出(文件描述符为1
)重定向到fd
所指向的文件。之后的printf
语句的输出将不再显示在终端屏幕上,而是被写入到output.txt
文件中。dup2
函数在很多场景下用于文件描述符的重定向,比如在进程执行外部命令时,可以将命令的输出重定向到指定的文件或管道,或者在服务器程序中将错误输出重定向到日志文件等。