自制嵌入式实时操作系统

    返回首页    发表留言
本文作者:李德强
          第一节 文件树
 
 

        在这一节中我们来学习操作系统中的文件树。文件这一名词的英文为File, 是Unix系统中对计算机中资源的统称。后来Linux诞生之后将Unix中文件的思想融入其系统中,于是产生了大家都非常熟悉的“一切皆文件”的设计理念。

        所谓“一切皆文件”就是指将计算机中的所有资源都映射为对应的文件,从而方便用户的使用。例如:人们通常所说的文件是具体的、用于真正记录一些实际内容的一个载体,如记事本文件、歌曲文件、图像文件、视频文件等等。从计算机操作系统层面上来讲除了这些文件以外,其它的系统资源也都可以映射成文件。例如:处理器、内存、外存、调度状态、外部设备、GPIO引脚等。那么操作系统是如何将这些资源映射成文件的呢?用户又应该如何去使用这些文件呢?第二个问题其实很好回答,事实上,操作系统将系统资源映射为文件的最终目的就是方便用户使用这些系统资源,因此,用户可以像读写普通文件一样读写这些用户表示系统资源的文件。而第一个问题我们需要学习一些预备知识之后才能回答。接下来我们就来一起学习操作系统中的文件树。

        文件树是Unix操作系统家族中的一个很典型的特征。文件树,顾名思义,是一棵由多个文件所组成的树型结构。通常一个文件系统就是一棵文件树,如下:

图1

        如上图所示,这是一个多叉树,树有一个根节点1和若干个叶子节点2、3、4、5、6、7、8、9、10、11、12、13、14。对于一个多叉树而言,每一个父节点都可以有任意多个子节点,而每一个子节点都只能有一个父节点,而根节点没有父节点。因此,我们只需要通过根节点1就可以找到其所有的子节点2、3,而再通过其2、3找到它们的子节点4、5、6,进而再找到它们的子节点7、8、9、10、11、12、13、14。此外,我们给定一个存在的路径,就可以根据这个路径找到其叶子节点。例如给定路径为1-2-5-10,我们可以由1找到其子节点2,再由2找到其子节点5,再由5找到其子节点10,于是我们就找到了节点10。这个路径是由根节点1开始的,我们也可以由非根节点开始,例如给定路径为3-6-14,我们可以由3找到其子节点6,再由6找到其子节点14。上面所描述的两个路径查找问题就是操作系统中在文件树中通过指定路径找到文件的过程,我们将图1中的编号改为一个文件的名字,这棵树就可以表示操作系统中的所有文件了,如下图:

        其中,“/”是这一棵文件树的根节点,它的子节点是“usr”和“home”,这两个子节点分别有自己的子节点。同样的我们也可以定义一个路径并按这个路径去查找文件,如“/-usr-bin-a”为了方便理解和读写,我们可以将路径中每两个节点之间的连接符号“-”更换为“/”,于是路径就变成了“/usr/bin/a”,注意,第一个“/”符号表示的是根节点,而后面的“/”符号是多个节点名之间的连接符号。于是我们就可以从根节点“/”找到其子节点“usr”,再由“usr”找到其子节点“bin”,再由“bin”找到其子节点“a”,最终我们找到了节点“a”也就是我们需要找的文件。同样的我们给定路径为“home/lidq/pic”我们可以由节点“home”找到其子节点“lidq”,再由节点“lidq”找到其子节点“pic”。值得注意的是路径“home/lidq/pic”的起始位置并没有“/”字符,也就是说这是一个相对路径,而起始位置是“/”的路径则一个绝对路径。

        对于Linux系统来说,文件树中的根节点“/”是一个实际存在的外部存储空间,因此它是一个实际的文件节点。而其它有一些操作系统,如Nutxx,虽然也是类Linux系统,但其根节点“/”并不是一个实际存在的外部存储空间,而是在内存中创建的一个虚拟文件节点。当然,无论是实际根节点还是虚拟根节点,它们的作用都是相同的,都是用于表示文件系统中的根节点,进而为后续的文件查找、读写做基础。

        此外,操作系统还可以将系统资源映射为文件树中的某个节点从而方便用户读写,例如上面所说的/proc/cpuinfo、/proc/meminfo、/proc/schedstat、/sys/class/gpio等等。那么,如何将这些资源和普通文件一样让用户读写?如何像这些资源映射成文件的?我们将在下一节中讲述。

 

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2021 问渠网

辽公网安备 21011302000146号

辽ICP备15013245号