Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47423
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 146
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-29 11:36
个人简介

微博 https://www.weibo.com/huang007

文章分类

全部博文(13)

文章存档

2018年(1)

2014年(12)

我的朋友

分类: LINUX

2014-02-25 13:31:55

inode比较容易混淆是因为,有两种inode,一种是linux内核中的VFS inode,一种是Ext文件系统中的放在硬盘上的inode。均表示一个文件。VFS inode是Linux内核对文件的一种抽象。用于兼容不同的文件系统。

几个比较重要的概念是

1.文件名(包括文件名本身)和inode号码对应关系是存储在数据块中,是和目录相关的inode指向的数据块中。
2.文件是由inode 号码唯一标示,save在inode中。
3.文件有自己的uid(owner)和gid(group owner)
4.硬连接的inode号码是相同的,新建一个硬连接时,inode信息中的指向数会增加1。这造成的现象是,当删除操作发生时,只有当指向数为0时,inode才会被真正删除。
5.软连接的inode号码是不同的,实际上是一个真实存在的文件,有自己的datablock,但是datablock中间包含一个指向目标文件的文本形式的引用,以及一个指示自己为符号链接的标志。
6.文件被打开的过程,其实是vfs syscall的过程,在这个过程中,file结构体(由fd文件描述符指向,存储在进程的PCB结构中,好像是链表形式) 建立,指向一个打开过程中的文件查找(一个dentry列表(文件名和目录的walk)),dentry真实指向inode(终于绕回来了)。
7.根据linux内核的设计,每种抽象出来的对象(struct)都有自己对应的operation函数(放在结构体里,由函数指针指向)
8.管道的实现机制就是内存中的一个文件,这个时候,inode的datablock域就不是硬盘中的值,而是指向一个物理内存地址。

阅读(1203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~