linux内核注释v0.11-超级块、inode索引节点和磁盘块(逻辑块)
来源:互联网 发布:淘宝关闭店铺 编辑:程序博客网 时间:2024/04/28 05:48
linux中所有的设备都被看作是文件,文件属性和数据是分别存储管理的,其中数据散布在逻辑块中,而文件的属性则保存在成为inode的索引节点的数据结构中,索引节点以静态形式存在于磁盘上,其形式为struct d_inode ,当内核需要操作索引节点时,会把其对到内存的索引节点struct m_inode 数据结构中。文件的内容改变时需要将内容写到磁盘上,而改变文件内容、改变文件所有者、文件存取权限等时都要将内存中索引节点的内容更新到磁盘上。磁盘索引节点以数组的形式存储,是在内核格式化文件系统时设定的,而内存索引节点的管理方式与高速缓冲区的管理类似,都是通过哈希队列和空闲列表管理的。所以对索引节点的读写与高速缓冲的读写策略是相似的,唯一需要做的就是根据索引 节点号计算出磁盘逻辑块号,公式如下:
逻辑块号 = (启动块 + 超级块)+ i节点位图占用的块数 + 逻辑块位图占用的块数 + (i节点号 - 1)/ 每块含有的i节点数
block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + (inode->i_num - 1)/INODES_PER_BLOCK (sb为超级块数据结构)
这样有了设备号(m_inode中有此字段)和逻辑块号就可以从磁盘读索引节点的数据,拷贝到内核分配的内核索引节点中,并返回这个的索引节点。
文件中的数据是不保存在索引节点中的,但有了索引节点就可以很容易的定位到保存数据的所有逻辑块的位置。
日常操作中,我们是不跟inode直接打交道的,我们操作文件都是直接根据文件名来定位文件,但对于内核来说,inode对它才更显的有实际意义,于是,就需要有一种途径来将我们更习惯的文件名转换为内核更熟悉的inode,这时目录起到了桥梁的作用。本质上,目录也是文件,也需要内核分配inode和block来存储属性和数据。目录的数据为包含在这个目录中的文件名,于是乎,当我们给内核一个文件名的完整路径,内核通过分析这个路径的各个分量从而转换为输入路径名对应的索引节点。有了inode后内核就能够对文件的数据进行各种操作了。
所以说文件其实只与所在的目录直接关联,所以说如果你需要区执行一个可执行文件,即使你对这个文件有执行的权限,但你对所在文件的目录没有写权限你同样不能够完成执行的操作。
说了细节后再谈谈内核是如何分配索引节点和磁盘的。linux下通过调用mkfs来格式化一个文件系统,如下所示:
超级块中记录着文件系统的各个具体信息,i节点位图说明i节点的是否被使用,逻辑块位图用于描述盘上的每个数据块的使用情况,i节点部分存放着文件的索引节点,磁盘块存放文件的数据。
- linux内核注释v0.11-超级块、inode索引节点和磁盘块(逻辑块)
- Linux文件系统分析之二(超级块,i节点位图和逻辑块位图)
- 超级块与索引节点
- 超级块与索引节点
- 转载一篇inode节点和超级块的文章
- UNIX内核(7):super block管理inode和磁盘块
- linux-v0.11中块数据延迟写磁盘分析
- 超级块 i节点 数据块 目录块 间接块
- 超级块 i节点 数据块 目录块 间接块
- 超级块 i节点 数据块 目录块 间接块
- linux超级块和inode 详解 和 df 、du 命令详解与环境变量
- 磁盘扇区和磁盘块、块设备
- linux-011上文件系统中超级块和inode的使用分析
- 深度解析Unix中inode块与超级块
- 目录、目录项、超级块、索引节点、文件
- LINUX中的MBR和超级块
- 超级块
- UNIX内核(6):inode与目录项、数据块
- yum
- 优秀的领导与差劲的领导
- 万能非递归二叉树的遍历【交换语句位置即可】
- 支付宝接口使用说明
- 项目终于接近尾声了
- linux内核注释v0.11-超级块、inode索引节点和磁盘块(逻辑块)
- 对Linux内核进程上下文和中断上下文的理解
- (redis)adlist.h/adlist.c理解
- If function
- 红黑树插入算法的实现
- VMWare虚拟机中CentOS安装gcc与g++
- Ubuntu下修改DNS重启也能用的方法
- 求助C#程序报错解决方案
- hibernate4.3中的load方法在web项目中的java.lang.ClassCastException:错误,