Unix文件系统基本概述
Posted CodingJourney
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unix文件系统基本概述相关的知识,希望对你有一定的参考价值。
1. Unix系统内核框架
Unix内核基本上是按模块进行设计的,比如文件子系统,进程控制子系统等等,各个子系统相对比较独立,但在有必要的时候又可以进行彼此的沟通交流。下图就说明了早期Unix的系统内核框架。2. 文件子系统概要
什么是文件系统?
文件系统是一个逻辑(看不见,摸不着)上的概念,而磁盘是一个物理(真实存在,看得见,摸得着)上的概念。一套系统装置可以有若干个物理磁盘设备,每一个物理设备上可以包含一个或者多个文件系统(如下图所示),当然也可以不包含任何文件系统(那你买它干啥?)。下面涉及到的文件系统都是在 Unix 上的。
引导块:在文件系统的开头,典型地一般为一个扇区。如果操作系统装在该文件系统中,则该块包含了引导或初启操作系统的引导代码。如果没该文件系统没安装操作系统,则这个块的内容可能是空的。
超级块:相当于是保存了文件系统的元数据信息,描述文件系统的状态,比如它有多大,何处有空闲空间以及其他一些信息等等。(可通过
$ tune2fs -l 文件系统
来查看文件系统的超级块的内容,需要root权限)索引节点表:相当于是索引节点的一个数组,内核所引用的索引节点号即是索引节点在该数组中的下标大小。类似于文件的元数据信息。每个文件都有一个索引节点,但是一个索引节点可以对应几个文件名字,每个名字被称为一个链接(link)。内核实现文件名到索引节点的解析。
数据块:真正存放数据的地方。目录(PS:也是一个文件)在数据块中保存的数据是一系列的
索引节点 <-> 文件名
的 item。
内核中重要的三张表
内核中维护着三种表结构,分别是用户文件描述符表(user file descriptor table)、文件表(file table)和索引节点表(inode table)。
用户文件描述符表:每个进程被单独分配一个。该表标识着一个进程的所有打开的文件。对于系统调用
open
和系统调用creat
,内核返回一个文件描述符(file descriptor),它是在用户文件描述符表中的索引值(每次调用这两个函数中的任意一个时,内核返回该用户文件描述表中可用的最小的表项的索引值,如果调用系统调用close
时,内核会释放传递给close
的文件描述符所对应的表项,使该表项重新可用)。0
、1
和2
这三个文件描述符分别表示标准输入文件、标准输出文件和标准错误输出文件。文件表:是一个全局核心结构。文件表保存着文件中的字节偏移量(下一次读或写的位置),并保存着对打开的进程所允许的存取权限。
索引节点表:也是一个全局核心结构。索引节点被存储在文件系统中(磁盘上),但是当操纵文件的时候,内核把它们读到内存索引节点表中。
当一个进程打开或创建一个文件时,内核在每个表中为相应于该文件的索引节点分配一个表项,用这三种结构表中的表项来维护文件的状态及用户对它的存取。使用这三张表,可以实现对一个文件的不同程度的存取共享。下图表示了这三张表即它们之间的相互关系。
(完)
参考资料
《Unix操作系统设计》
http://www.jb51.net/article/97059.htm
以上是关于Unix文件系统基本概述的主要内容,如果未能解决你的问题,请参考以下文章