File system(一)
基于linux v0.11内核
Linux文件系统从功能上有4个部分
1.高速缓冲区管理程序
2.文件系统底层通用函数
3.对文件中数据的读写操作
4.文件系统调用接口(打开、关闭、创建等)
单位磁盘块结构,从头到尾依次是
1.boot block
用于加电启动时由ROM BIOS自动读入执行代码与数据,并非所有的块都需要这个部分,
但为了保持结构一致,故保留此。
2.super block
存放盘设备上文件系统结构的信息,并说明各部分的大小,如inode个数、逻辑块数、
inode的bitmap所占块数,逻辑块bitmap所占块数,第一个逻辑块号,最大文件长度,
文件系统幻数。
幻数:系统认为意义不明的数据
3.inode bitmap & logic block bitmap
inode位图用于描述i节点是否被使用。
逻辑块位图用于描述盘上的每个数据盘块的使用情况。
每个比特位代表盘上数据区中的一个数据盘块。
因此,逻辑块位图的第一个比特位代表盘上数据区中第一个数据盘块。
当一个数据盘块被占用时,则逻辑块位图中相应比特位被置位。
4.inode
部分inode存储有文件系统中文件的索引节点,每个文件、目录都有一个i节点,
每个i节点的数据结构为
磁盘上
i_mode (short)文件类型与属性(rwx)
- i_uid (short)文件所属用户id
- i_size (long)文件长度(byte)
- i_mtime (long)修改时间(自1970.01.01 0:00算起,second)
- i_gid (char)group id
- i_nlinks (char)链接数(有多少文件目录项指向该inode)
- i_zone[9] (short)文件所占用的盘上的逻辑块号数组
内存中 - s_imap[8] inode位图高速缓冲区指针数组
- s_zmap[8] 逻辑块位图高速缓冲区指针数组
- s_dev super block设备号
- s_isup 被挂载文件系统的根目录的inode
- s_imount 该文件系统被挂载到的inode
- s_time (long)修改时间
- s_wait 等待本super block的进程指针
- s_lock (char)锁定标志
- s_rd_only (char)只读标志
- s_dirt (char)脏位
i_zone中,0-6存放直接块,若file size > 7k bytes,则间接寻址512个盘块,若文件还更大,则采用第二次间接寻址
当所有inode均被占用时,查找空闲inode的函数会返回0
inode bitmap最低位和0号inode均不使用,创建file system时将0号inode置位
5.data block
数据区