1.Linux中使用文件系统分几个部分
1.1 有关于Linux中高速缓冲区的管理程序。 分页机制 buffer.c
1.2 文件系统的底层通用函数(对于硬盘的读写 分配 释放等,对于目录的节点管理 inode 内存与磁盘的映射)
1.3 对文件数据进行读写操作模块 (VFS:虚拟文件系统 硬件驱动 和 文件系统的关系 pipe 块设备(磁盘光驱等))
1.4 文件系统与其他程序的接口实现 (fopen 关闭 创建等使用文件的调用方式)
2.文件系统的基本概念
磁盘中要有目录的映射,我们把磁盘分成盘片
每一个盘片都有一个文件系统的子系统(章节目录)
引导块:用来引导设备的,引导块可以为空,但是一定要保持格式的一致性,空出一定空间
超级块:是该文件子系统的描述符(记录该盘片的逻辑块位图的地址,i节点位图的地址,通过设备号可以获取)
逻辑块位图:每一位对应一个逻辑块的使用情况,对应逻辑块如果被使用则逻辑位图对应位置1
i节点位图:每一位对应一个i节点的使用情况,对应i节点被使用则i节点位图对应位置1
逻辑块:用来存储数据的数据存储单元
i节点:目录与磁盘的桥接 文件的属性描述(文件的名片)
struct m_inode {
unsigned short i_mode; //文件的类型和属性
unsigned short i_uid; //宿主用户id
unsigned long i_size; //文件大小
unsigned long i_mtime; //文件修改时间
unsigned char i_gid; //宿主的组id
unsigned char i_nlinks; //链接数(硬链接)
unsigned short i_zone[9]; //该文件映射在逻辑块号的数组
/* these are in memory also */
struct task_struct * i_wait;
unsigned long i_atime;
unsigned long i_ctime;
unsigned short i_dev;
unsigned short i_num;
unsigned short i_count;
unsigned char i_lock;
unsigned char i_dirt;
unsigned char i_pipe;
unsigned char i_mount;
unsigned char i_seek;
unsigned char i_update;
};
crw-rw 文件的类型和属性
c代表文件类型
- 普通文件
d 目录
s 符号链接
p pipe管道
c 字符设备
b 块设备
l 链接文件
777代表全属性
每一个文件有三个属主的属性
777-rwxrwxrwx
第一个rwx是当前用户的属性
第二个rwx是用户组的权限
第三个rwx是他人的权限
unsigned short i_zone[9];
文件和磁盘映射
izone[7]直接块号 如果文件只占用7个逻辑块 那么这个数组中的每一个单元则存储了一个逻辑块的号
izone[8]一次间接块号 如果占用的逻辑块较多 大于7 小于512+7 则占用一次间接块号
izone[9]二次间接块号 如果占用的逻辑块太多 大于512+7 小于 512*512+7 则启动二次间接逻辑块