linux I节点

来源:互联网 发布:office for mac破解版 编辑:程序博客网 时间:2024/06/15 05:48

最近在复习linux, 谈谈自己对i节点的理解。

     一个磁盘可以划分为很多个扇区, 每个扇区有512个字节, 扇区是磁盘的基本存储单元。将每个扇区编号, 这样磁盘就变为了一系列编了号的块组合。

一个磁盘主要包括引导块, 超级块, i节点表,文件存储区, 进程对换区等。

1、.引导块

引导块占用第0号物理块, 不属于文件系统管辖。如果系统中有多个文件系统, 只有跟文件系统才有引导程序放入引导块中, 其余文件系统都不使用引导块

2、超级块

文件系统的第一个块被称为超级块, 这个块存放的是文件系统本身的结构信息。比如超级块记录了每个区域的大小, 存放未使用磁盘的信息等。

3、i节点表

超级块是下一个部分就是i节点表, 每个文件对应一个i节点,每个文件都有一些属性, 如文件大小,所有者,创建时间等。这些信息存放在对应的i节点的结构中, 所有的文件都具有相同大小的I节点,这些i节点组成一个i节点表,文件系统创建后,i节点的数目是有限的。所以一个文件系统能够创建的文件也是有限的。

4、文件存储区

文件系统的第3个部分是文件存储区,文件的内容保存在这里, 磁盘所有的块大小都是一样, 如果文件大小超过一个块的大小,则文件会存放在多个次磁盘块中

5、进程对换区

磁盘上会开辟一块区域, 为对换区, 当内存中的进程需要扩大占用的内存空间, 而当前内存空间不足时, 则把某些不常用的进程暂时替换到对换区中, 在适用的时候又把他们换进 内存,解决内存不足和进程之间对内存的竞争问题。


i节点的结构如下

struct dinode
{
 ushort di_mode;  /*文件类型+用户权限*/
 short di_nlink;  /*文件链接数*/
 ushort di_uid;  /*属主用户id*/
 ushort di_gid;  /*属主用户组id*/
 off_t di_size;  /*文件大小*/
 char di_addr[40]; /*文件数据区起点地址*/
 time_t di_atime; /*最后访问时间*/
 time_t di_mtime; /*最后修改时间*/
 time_t di_ctime; /*创建时间*/
}; 

i节点数据结构里面没有文件名, 那文件系统是如何管理文件名,i节点和文件内容之间的关系的呢?

假设要创建一个新文件。该新文件占3个磁盘存储块。

创建文件步骤如下:

1、 内核先找到一块空闲的i节点, 图中,内核找到空的i节点号为10, 内核把文件信息记录到其中, 如文件大小, 文件所有者, 创建时间等。

2、存储数据,即文件的内容存储,由于该文件需要3个数据块,内核从空闲的数据块中找到3个数据块, 200, 300, 400。 将内容复制到这些块中。

3、记录分配情况, 数据保存到3个数据块中, 必须记录起来, 以便下次查找。 磁盘分配情况记录在文件的i节点的磁盘序列列表中,

4、增加文件名和目录。新文件的名字为hello.c, 内核将文件的入口添加到目录文件中,文件名和i节点号之间的对应关系, 将文件名和文件属性,内容联系起来,找到文件名就找到文件的i节点号,通过i节点号就能够找到文件的属性和内容。

0 0
原创粉丝点击