Linux根文件系统制作

来自华清远见研发中心
FarSight讨论 | 贡献2021年3月22日 (一) 10:20的版本 文件系统

跳转至: 导航搜索

实验原理

文件是计算机系统的软件资源,操作系统本身和大量的用户程序、数据都是以文件形式组织和存放的,对这些资源的有效管理和充分利用是操作系统的重要任务之一。本章介绍文件和文件系统的概念,并对操作系统的文件管理功能给予简要说明。

磁盘的物理组织

文件系统主要完成对磁盘上的数据和程序进行管理,所以首先需要了解磁盘(硬盘)的结构。
磁盘又叫硬盘,由一组盘片组成。每个盘片的上下两面都涂有磁粉,磁化后可以存储信息数据。每个盘片的上下两面都安装有磁头。磁头被安装在梳状的可以做直线运动的小车上以便寻道。每个盘面被格式化成有若干条同心圆的磁道,并规定最外面的磁道是0磁道,次外层是1磁道。每个磁道又被分成若干个扇区,并顺序排为1号扇区、2号扇区,等等。通常,一个扇区可以储存512字节的二进制信息位。这也是CPU进行磁盘I/O操作时能够读出和写入的最小单位。每个盘面上的同号磁道组成一个柱面,也就是说每个盘面的0号磁道组成0号柱面,所有的1号磁道组成1号柱面,等等。硬盘的结构如图所示。


54-1-1-(1).png

在Linux操作系统中,内核采用的方法是把物理磁盘抽象为逻辑磁盘来管理文件系统。所谓逻辑磁盘是把物理磁盘按照磁头号、磁道号、扇区号以及盘面号划分成磁盘块的线性数组,也叫线性序列。例如:把1号盘面0号磁道的0号扇区定义为0号磁盘块;把1号盘面0号磁道的1号扇区定义为1号磁盘块等等;当然一个磁盘块可以包含多个扇区,一般扇区数是2的整次幂。显然,当把实际的磁盘看成是磁盘块的线性数组时,就把物理磁盘存储数据的实际地址(即磁道号、扇区号以及盘面号)隐藏起来。因此呈现在系统高层面前的已经不是物理磁盘,而是一个经过加工以后的逻辑磁盘。图8.2给出了逻辑磁盘的结构示意图,它比物理硬盘的结构要简单的多。当系统执行磁盘I/O操作时,系统给出试图访问的逻辑磁盘块号。由设备驱动程序根据该块号计算出物理磁盘的磁道号、磁头号以及扇区号,然后启动硬盘把磁头向前或向后移动到相应的柱面,这就是所谓的寻道。寻道是磁盘I/O操作中最为耗时的一个操作。一旦磁头找到磁道,并且相应的扇区转到磁头下面,数据传输就开始。

文件和目录

文件是一个具有符号的一组相关联元素的有序序列。文件可以包含范围非常广泛的内容。系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件。在电脑里看见的东西都叫文件。文件是以单个名称在计算机上存储的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型。
文件有很多种,运行的方式也各有不同。一般来说我们可以通过文件名来识别这个文件是哪种类型,特定的文件都会有特定的图标,也只有安装了相应的软件,才能正确显示这个文件的图标。

文件的分类

在计算机系统中存放着大量的文件,它们有着不同的内容、用途和形式。 为了便于对文件进行在理合加工,通常把众多的文件从不同的角度进行分类。下面介绍几种经常使用的文件分类方法。 按文件的创建角度,文件分为:

  • 系统文件:即由操作系统创建的文件。这些文件包含着操作系统执行的程序和处理的数据。系统文件仅供操作系统使用,不对用户开放。
  • 用户文件:即由用户创建的文件。这些文件包含的是用户的信息,如用户的程序、数据和其他各种形式的信息。
  • 库文件:即由系统创建、供系统和用户使用的文件。它们是一些由标准函数或子程序及常用的应用程序组成的文件。库文件允许用户调用,但是不允许用户修改。在某些系统中,允许用户通过系统向库文件中添加信息。

按文件的读取权限,文件可以分为:

  • 只读文件:只允许对文件进行读操作,而不允许写操作的文件。
  • 读写文件:指既可以进行读操作,又可以写操作的文件。
  • 可执行文件:指只可以调入到内存中执行,而不能对它们进行读写操作的文件。
  • 不保护文件:这种文件不作任何保护,所有用户都可以使用。

按文件在系统中的信息流向,文件分为:

  • 输入文件:这种文件只能从输入设备中读入到内存,如读卡器上的文件。
  • 输出文件:这种文件只能从系统写入到输出设备中,如打印机上的文件。
  • 输入/输出文件:这种文件既可以从输入设备中读取,又可以向输出设备写入,如磁盘上的文件。

按文件信息的逻辑结构,文件分为:

  • 流文件:以字符为基本单位,按照一定顺序组成的文件。文件内的信息就是一连串的字符,不再划分结构。它使用结束符来标志文件的结束。
  • 记录文件:把文件内的信息划分成多个记录,记录是文件组织和操作的基本单位。记录文件可以分为下面两种:
  • 文本文件:即由字符代码组成的文件。文本文件可以直接显示在屏幕上,或者在打印机上打印,也可以使用编辑器进行编辑。
  • 二进制文件:即由二进制数据组成的文件,如可执行程序、图像文件、声音文件等。二进制文件不能直接显示或打印。

目录

目录是一类特殊的文件,利用它可以构成文件系统的分层树型结构。如同普通文件那样,目录文件也包含数据;但目录文件与普通文件的差别是,核心对这些数据加以结构化,它是由成对的“i节点号/文件名”构成的列表。

  • i节点号是检索I节点表的下标,i节点中存放有文件的状态信息。
  • 文件名是给一个文件分配的文本形式的字符串,用来标识该文件。在一个指定的目录中,任何两项都不能有同样的名字。

每个目录的第一项都表示目录本身,并以“.”作为它的文件名。每个目录的第二项的名字是“..”,表示该目录的父目录。当把文件添加到一个目录中的时候,该目录的大小会增长,以便容纳新文件名。当删除文件时,目录的尺寸并不减少,而是核心对该目录项做上特殊标记,以便下次添加一个文件时重新使用它。

Linux文件系统采用带链接的树形目录结构,即只有一个根目录(通常用“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息。这样一层一层地延伸下去,构成一棵倒置的树,如图所示。

54-1-4-(1).png

在目录树中,根节点和中间节点都必须是目录,而普通文件和特别文件只能作为“叶子”出现。当然,目录也可以作为叶子。

文件系统

文件系统指文件存在的物理空间。在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存。由于系统已将Linux文件系统的所有细节进行了转换,所以Linux核心的其它部分及系统中运行的程序将看到统一的文件系统。

大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblock, i节点inode, 数据块data block,目录块directory block, 和间接块indirection block。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件的数据。i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。

Linux支持多种操作系统,其实现机制我们在后面会讲到。

虚拟文件系统

虚拟文件系统概述

根文件系统开发实验

制作根文件系统镜像