文件系统inode分析——inode.c bitmap.c super.c

Posted 西邮菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件系统inode分析——inode.c bitmap.c super.c相关的知识,希望对你有一定的参考价值。

一、bitmap.c

1.1free_block

get_super 通过设备号找出超级块,获得里面的信息
判断块号是不是在范围内
然后读取块信息,就把高速缓冲区拿出来
没用就释放掉逻辑块对应高速缓冲区
计算当前块号,然后区清空逻辑块位图上面对应的bit
逻辑块位图对应的块设为1

1.2new_block

new_block 新建一个块的函数
获得了一个超级块

for循环的8指的是我们的逻辑块位图
找到第一个为0的位的位数
然后修改数据 修改标志啥的
然后得到block块号
然后我们需要给这个块申请高速缓冲区 getblk

清空这个block
然后给这个高速缓冲区设置各种标志

1.3free_inode

free_inode 释放指定i节点
把i节点对应的i节点位图中的bit置0
清空i节点位图信息

1.4new_inode

new_inode 创建一个新的i节点,返回该i节点的指针
get_empty_inode通过super_block找到对应的inode信息
通过inode的操作函数找到对应的inode分配内存区
设置inode位图中对应的位为1
返回设置好的inode结构体

操作系统给所有的inode节点管理设置了一个数组:inode_table[NR_INODE],在操作系统中还有一个超级块数组,mount把需要挂载的设备文件系统的super_block读到高速缓冲区中并且放到超级块数组中。

二、inode.c

里面的大多数函数都是对inode节点进行操作。

2.1 wait_on_inode

等待指定的inode节点可用,如果inode节点不可以使用,那么该任务会被添加到i_wait队列中,等待inode节点被释放时才会被唤醒。

2.2lock_inode、unlock_inode

为了解决同步的问题,就出现了解锁和上锁。

lock_inode对指定的inode进行锁定,如果已经被其他的任务锁定,则该任务进入i_wait链表等待其他任务解锁这个inode,解锁时才会被唤醒,并对inode上锁。

unlock_inode对指定的inode节点进行解锁,inode->i_lock=0;并唤醒节点等待队列上的所有进程。

2.3invalidate_inodes

对指定设备的所有inode节点进行释放,扫描inode_table来实现。

2.4sync_inodes

inode数据块与高速缓冲区同步,而sys_sync是高速缓冲区与磁盘同步。

同步所有inode节点,首先让内存i节点类型的指针指向i节点表首项,然后扫描整个i节点表中的节点。针对其中每个i节点,先等待该i节点解锁可用,然后判断该i节点是否已被修改并且不是管道节点,若是这种情况则将该i节点写入高速缓冲区中缓冲区管理程序buffer.c(bh_dirt=1时)会在适当时机将他们写入盘中。

2.5_bmap

文件数据块映射到盘块的处理操作,该函数把指定的文件数据块block对应到设备上逻辑块上,并返回逻辑块号。如果创建标志 置位,则在设备上对应逻辑块不存在时就申请新磁盘块,返回文件数据块block对应在设备上的逻辑块号(盘块号)。

 

 2.6iput、iget

iput 释放一个inode节点。

主要是对i_count引用次数进行操作,把i节点引用数值减1
并且若是管道i节点,则唤醒等待进程
若是块设备文件i节点则刷新设备
若i节点的链接计数为0,则释放该i节点占用的所有磁盘逻辑块,并释放该节点
iget 获得一个inode节点。

从设备上读取指定节点号的i节点到内存i节点表中,并返回该i节点指针
首先在位于高速缓冲区的i节点表中寻找,若找到指定节点号的i节点则再经过一些判断处理后返回i节点指针
否则通过设备号和指定i节点号,从设备中读取的i节点信息,放入在i节点表中申请的空闲节点中,并返回该i节点指针

2.7read_inode write_inode

找到指定的设备,通过设备号找到他的超级块,超级块计算要读写的块号,调用bread将其读写入高速缓冲区中,读的话将高速缓冲区的b_data读到内存,释放高速缓冲区。写的话将数据写到高速缓冲区的b_data并设置dirt置位,等待系统sys_sync进行写盘,释放高速缓冲区。

以上是关于文件系统inode分析——inode.c bitmap.c super.c的主要内容,如果未能解决你的问题,请参考以下文章

fs/ext2/inode.c相关函数注释

linux inode文件系统;备份恢复及日志分析

Linux文件系统与日志分析

linux 文件系统(重点)和日志分析

深入理解Linux文件系统与日志分析

Linux——深入理解linux文件系统与日志分析