Unix文件系统基本概述

1. Unix系统内核框架

Unix内核基本上是按模块进行设计的,比如文件子系统,进程控制子系统等等,各个子系统相对比较独立,但在有必要的时候又可以进行彼此的沟通交流。下图就说明了早期Unix的系统内核框架。
0

2. 文件子系统概要

什么是文件系统?

文件系统是一个逻辑(看不见,摸不着)上的概念,而磁盘是一个物理(真实存在,看得见,摸得着)上的概念。一套系统装置可以有若干个物理磁盘设备,每一个物理设备上可以包含一个或者多个文件系统(如下图所示),当然也可以不包含任何文件系统(那你买它干啥?)。下面涉及到的文件系统都是在 Unix 上的。

Unix内核在逻辑上只涉及文件系统,屏蔽了磁盘,一个文件系统就是一一个逻辑设备,每个逻辑设备(或文件系统)由一个逻辑设备号进行标识。这些逻辑设备被映射到物理设备(磁盘)上,由磁盘驱动程序负责将逻辑设备地址映射到物理设备地址。一个物理设备(磁盘)可以被分成好几个逻辑设备,可以使我们更好的管理我们的数据。在Windows中,我们总喜欢将磁盘分成好几个盘,每个盘用来存放不同的数据,比如C盘用来安装操作系统用,D盘用来安装一些日常的软件等等,这样做的好处可想而知。
1

一个文件系统由一个逻辑块序列组成,块大小可以为512字节、1024字节等(n*512字节)。一个文件系统中的每个逻辑块大小是相同的,而不同的文件系统间的逻辑块大小可能会因为系统的配置而各不相同(如下图所示)。内核在磁盘操作中以块大小为基本单位进行数据的传输,而不是以磁盘上的扇区为基本单位。
2
3

一个文件系统的结构包括引导块(boot block)超级块(super block)索引节点表(inode list)以及数据块(data blocks)(如下图所示)。

  • 引导块:在文件系统的开头,典型地一般为一个扇区。如果操作系统装在该文件系统中,则该块包含了引导或初启操作系统的引导代码。如果没该文件系统没安装操作系统,则这个块的内容可能是空的。
  • 超级块:相当于是保存了文件系统的元数据信息,描述文件系统的状态,比如它有多大,何处有空闲空间以及其他一些信息等等。(可通过 $ tune2fs -l 文件系统来查看文件系统的超级块的内容,需要root权限)
  • 索引节点表:相当于是索引节点的一个数组,内核所引用的索引节点号即是索引节点在该数组中的下标大小。类似于文件的元数据信息。每个文件都有一个索引节点,但是一个索引节点可以对应几个文件名字,每个名字被称为一个链接(link)。内核实现文件名到索引节点的解析。
  • 数据块:真正存放数据的地方。目录(PS:也是一个文件)在数据块中保存的数据是一系列的索引节点 <-> 文件名的 item。
    4

内核中重要的三张表

内核中维护着三种表结构,分别是用户文件描述符表(user file descriptor table)文件表(file table)索引节点表(inode table)

  • 用户文件描述符表:每个进程被单独分配一个。该表标识着一个进程的所有打开的文件。对于系统调用 open和系统调用 creat,内核返回一个文件描述符(file descriptor),它是在用户文件描述符表中的索引值(每次调用这两个函数中的任意一个时,内核返回该用户文件描述表中可用的最小的表项的索引值,如果调用系统调用close时,内核会释放传递给close的文件描述符所对应的表项,使该表项重新可用)。012这三个文件描述符分别表示标准输入文件、标准输出文件和标准错误输出文件。
  • 文件表:是一个全局核心结构。文件表保存着文件中的字节偏移量(下一次读或写的位置),并保存着对打开的进程所允许的存取权限。
  • 索引节点表:也是一个全局核心结构。索引节点被存储在文件系统中(磁盘上),但是当操纵文件的时候,内核把它们读到内存索引节点表中。

当一个进程打开或创建一个文件时,内核在每个表中为相应于该文件的索引节点分配一个表项,用这三种结构表中的表项来维护文件的状态及用户对它的存取。使用这三张表,可以实现对一个文件的不同程度的存取共享。下图表示了这三张表即它们之间的相互关系。
5

(完)





欢迎您扫一扫上面的二维码,订阅 CodingJourney 的微信公众号

参考资料

猜你喜欢

转载自blog.csdn.net/pl20140910/article/details/80298312
今日推荐