欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    linux教程.第6章--文件系统.ppt

    • 资源ID:27398401       资源大小:585.50KB        全文页数:128页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    linux教程.第6章--文件系统.ppt

    数据处理是计算机的主要功能之一,与数据处理相关的数据管理和数据保存是必不可少甚至是较为重要的环节。在计算机中,大量的数据和信息是通过文件存储和管理的。文件系统负责管理文件和逻辑文件系统,提供管理设备、屏蔽设备复杂性的手段,为系统内核其他部分、用户命令和系统函数调用提供统一的服务接口。本章主要讨论Linux系统中文件的概念、 目录结构及访问权限,Linux的逻辑文件系统Ext2, 虚拟文件系统VFS, 文件系统管理及缓冲区管理等内容。管道(FIFO)文件是利用文件系统作为接口实现进程间的通信,本章不再介绍,具体原理请参见2.2.6“进程通信”部分。6.1 文件系统概述通常我们把与管理文件有关的软件和数据,统称为文件系统。它方便地组织管理计算机中的所有文件,为用户提供文件的操作手段和存取控制。同时,文件系统隐藏了系统中最为纷繁复杂的硬件设备特征,为用户以及操作系统的其他子系统提供一个统一、简洁的接口,通过文件系统,使得用户方便地使用计算机的存储、输入/输出等设备。在学习Linux进程管理时,我们也许注意到,系统惟一感知和控制进程的关键数据进程控制块中,除了CPU和内存资源之外,只包含了文件系统信息和文件信息,而没有设备的任何信息,这就是文件系统所起的作用。 Linux系统中把CPU、内存之外所有其他设备都抽象为文件来处理。进程只和文件系统打交道,具体的细节,由设备管理部分具体实现并为文件系统提供尽可能简洁统一的接口。因此,文件系统还同时充当着设备管理接口的角色,用户进程使用和操作具体的设备,都必须通过文件系统进行。文件系统是操作系统中与管理文件有关的所有软件和数据的集合。不同的操作系统可能采用不同的文件系统。支持多种不同类型的文件系统是Linux操作系统的主要特色之一。Linux系统自身的文件系称为ext2,它也是Linux默认的文件系统。我们把ext2以及Linux支持的文件系统称为逻辑文件系统, 通常每一种逻辑文件系统服务于一种特定的操作系统,具有不同的组织结构和文件操作函数,相互之间差别很大。Linux在传统的逻辑文件系统的基础上,增加了一个称为虚拟文件系统(VFS)的接口层,如图6.1所示。图6.1 Linux文件系统层次结构示意图系统中所有的设备,包括字符设备、块设备和网络设备,都按照某种方式由逻辑文件系统统一管理,逻辑文件系统为它们提供访问接口。虚拟文件系统在最上层,管理各种逻辑文件系统,屏蔽了它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口, 使得不同的逻辑文件系统按照同样的模式呈现在使用者面前,对于普通用户来讲,觉察不到逻辑文件系统之间的差异,可以使用同样的命令来操作不同逻辑文件系统所管理的文件,可以在它们之间自由地复制文件。6.2 文件管理6.2.1 文件文件可以简单地理解为一段程序或数据的集合。在操作系统中,文件被定义为一个命名的相关字符流的集合,或者一个具有符号名的相关记录的集合。符号名用来惟一地标识一个文件,也就是文件名。Linux系统中,文件名最大长度由NR-NAME-LEN控制,默认值为255个字符。文件定义中所指出的不同基本组成单位表示了两种形式的文件。相关字符流组成的文件是一种无结构文件或流式文件。相关记录组成的文件称为记录式文件。记录式文件通常主要用于信息管理。在UNIX、Linux等操作系统中,把包括硬件设备在内的能够进行流式字符操作的内容都定义为文件。 Linux系统中文件的类型包括:普通文件,目录文件,连接文件,管道(FIFO)文件、设备文件(块设备、字符设备)和套接字。Linux系统把文件按照其性质、用途等标准划分为不同的类别。操作系统根据文件的类型处理文件。按照用途,文件可以分为:系统文件、库文件和用户文件。系统文件直接和操作系统本身有关,包括操作系统核心和各种系统应用程序和数据;库文件通常指系统提供给用户调用的各种标准过程、函数和应用程序;用户文件是用户委托计算机文件系统管理的文件。当然,这只是一种相对的标准,对于Linux系统,根据自己的实际需要,具有特殊权限的用户(系统管理员)可以重新修改并编译升级整个内核,这个过程将会修改大部分系统文件,同时库文件也可以按照自己的需要添加和修改。根据文件中数据的表示形式,可以把文件划分为ASCII码文件和二进制文件。按照文件操作过程中的保护级别,文件可以划分为只读文件、读写文件、可执行文件,Linux操作系统通过这样的方式来控制文件的访问权限。按照文件中信息流向还可以把文件分为输入文件、输出文件和输入/输出文件。按照文件在系统中的存在时间,可以把文件分为临时文件和永久文件。6.2.2 文件结构系统使用者关心的只是如何方便地组织和使用文件,即文件的逻辑结构,而系统的设计者则更关心文件具体的实现方式,也即文件的物理结构。1. 文件逻辑结构文件的逻辑结构是用户可见结构,即从用户角度观察到的文件系统。从逻辑结构来看,Linux系统的文件采用的是字符流式的无结构文件。用户通过对文件的存取访问来完成对文件的各种操作,常用的访问方式包括顺序方式和随机方式。Linux系统同时支持顺序和随机两种访问方式。用户对文件的操作只能通过操作系统提供的命令接口或者函数调用接口。2. 文件物理结构文件的物理结构指的是文件在存储设备上的组织方式,即一个文件在具体设备上的实现方法。外部存储器也按照一定的规则划分为小的物理单元,称为块,每个块大小相等,相应地,文件信息也划分为和外存物理块相等大小的逻辑块。对于无结构文件来讲,文件本身没有特定的逻辑结构,最小的单位是字节,可以很方便地划分为逻辑块。文件的物理结构通常解决文件的逻辑块与物理块之间的映射关系,也即一个文件对应的物理块的具体组织方式。常用的文件物理结构有顺序、串联、索引和多重索引等方式。(1) 顺序方式顺序方式按照逻辑上的连续关系把文件依次存放在连续的物理块中。如图6.2所示,文件逻辑块和物理块之间是最简单的线性关系,因此很容易实现,也可以相当方便地实现文件的顺序和随机访问,只要确定了文件头的位置和文件长度,一切操作都可以快速实现。但是,这些优势只有在文件能够一次性写入的情况下才存在。由于文件建立时并不知道文件的长度,系统无法确定该给这个文件分配多少个物理块。而且,这种方式也容易造成磁盘碎片。图6.2 顺序方式文件示意图(2) 串联方式串联方式的结构采用链表来实现,每一个物理块分为两个部分,一部分用于存放数据,另一部分存放一个指针,指向后续连接的下一个物理块。存放同一个文件的物理块不需要连续,整个文件的连续性由链表的指针来保证,如图6.3所示。这种方法几乎可以利用每一个物理块,没有连续方式那样的碎片问题,可以实现文件的动态增长,也可以在文件中任何一个部位增加和删除内容。文件的顺序访问也可以方便地实现,但是随机访问的实现变得很复杂。图6.3 串联方式文件示意图(3) 索引方式索引方式为每一个文件建立一张索引表,表中存放文件的逻辑块与物理块之间的对应关系。也就是把串联方式中每一个接点所记录的链表指针信息统一保存在一个索引表中,如图6.4所示。这使得文件的非连续存放、文件动态增长、方便的文件内部修改等串联方式的优点都保留了下来,同时,也能够方便地实现文件的随机访问。如果把整个索引表保存在内存中,整个文件的访问效率也可以大幅度提高。这种方案的问题在于索引表的处理。连续方式、链表方式、索引方式都可以用来解决索引表的存放,比较好的方案是索引方式。图6.4 索引方式文件示意图实际中,很多操作系统采用一种称为多重索引的物理结构,同时使用单级索引和多级索引。每个文件由一张索引表描述,表中一部分内容直接指向物理块,称为直接块。索引表中同时还包含一部分二级索引指针,指向新的索引表,类似的,文件索引表中还可以包括三级甚至更高级的索引指针,提供更多的间接块。对于比较小的文件,可以直接存放在一次间接块提供的空间中,而对于较大的文件,才使用多次间接块。这种方式的缺点一是索引表本身占用存储空间,二是每次访问数据都需要先访问索引表,需要更多的系统时间开销。只要索引表设计合理,能够保证正常使用的大多数都只利用直接块,还可以把索引表放在内存中,保证系统的访问效率。这种方式基本上保证了文件的动态可变,实现了文件高效率地顺序和随机访问,Linux系统文件的物理结构采用的就是多重索引方式,见图6.5。图6.5 多重索引方式文件示意图6.2.3 Linux文件Linux系统的文件是无结构的流式文件,文件的物理结构采用易于扩展的多重索引方式,便于文件动态增长,同时也可以方便地实现顺序和随机访问。基于字节流的概念,Linux系统把目录、设备等都当作文件来统一对待。Linux默认的是Ext2逻辑文件系统。Ext2文件系统中的所有文件都采用i节点(i-node)来描述,每一个文件、目录或者设备都对应于一个且只能对应于一个i节点。每一个i节点包含两个部分的基本参数:文件说明信息和索引表。根据所存放的位置,i节点又可以分为磁盘i节点和内存i节点,分别使用数据结构ext2-inode和ext2-inode-info来描述。其中磁盘i节点静态存放在外部存储器,包含了整个文件的完整说明信息和物理块分布情况,而内存i节点是为了减少设备存取次数、提高文件访问效率,在内存中特定区域中建立的磁盘i节点的映像。磁盘i节点文件说明信息包括文件名称、类型、文件长度、所占用的物理块数、创建和最近一次访问时间等基本信息,以及链接数、拥有者用户名、用户组名以及存取控制表等与文件共享、保护和保密相关的信息。每一个i节点的索引表前12个项记录文件直接物理块的位置,后面3项分别是间接、二级间接和三级间接物理块索引,这样的方式既可以保证小文件能够快速存取,又可以适应大文件存储扩展的需要。Ext2文件系统物理块的大小可以是1024、2048或者4096字节,在初始化文件系统的时候由用户指定,默认值是1KB,块地址占4字节,因此每个物理块可以存放256个块的地址,这样,如果把一个i节点所有的物理块放满,得到最大的文件应该是:直接块+间接块+二次间接块+三次间接块即:12KB+256KB+64MB+16GB实际上,在32位PC上的Linux系统中,寻址范围32位,文件最大最多只能达到4GB。如果一个文件的内容小于等于12个块,物理块采用默认值时是12KB,就可以全部使用直接块来存放,能够保证相当高的存取效率。i节点具体结构可以参看图6.5。内存i节点除了包含磁盘i节点的说明信息之外,还增加了当前文件打开状态信息。6.3 目录每一个文件系统都提供目录来记录文件的有关信息,在包括Linux在内的很多操作系统中,目录本身也是一种文件,可以按照文件进行管理,在Linux中称为目录文件。利用目录的层次结构,可以对系统中的文件方便地进行分隔管理,实现文件的快速搜索,解决文件之间的命名冲突,同时也可以提供文件共享的解决方案。6.3.1 目录结构最简单、最原始的结构是单级目录如图6.6(a) 。这种结构实现简单,可以实现文件系统空间的自动管理。但是,这样的结构中,用户必须保证每一个文件的名称在整个系统中惟一。系统要访问某一个文件,必须在整张目录表中搜索,效率也较低。一个直观的扩展方式是采用两级目录结构,根目录下面可以存放文件,也可以存放下一级目录(称为子目录),子目录下面存放文件,如图6.6(b)。进一步推广这种层次关系,就形成了多级目录结构,每一级目录中都存放所属文件和下一级目录的信息,整个目录层次结构形成一个完整的目录树。如图6.6(c)。图6.6 文件目录结构类型树形的多级目录结构,可以更好地解决文件命名冲突问题。同时,文件系统用一个树状结构表示,根据文件不同的类型、不同的拥有者以及不同的保护要求,可以划分为不同子树,方便地实现文件的管理,在这种树形层次结构中,文件的搜索速度也更快。几乎所有的操作系统都采用树形的多级目录结构。在树形的多级目录系统中,文件名由路径名给出,路径名惟一确定一个文件在整个文件系统中的位置,可以有两种方式来表示文件的路径。一种是绝对路径名;另外一种方式是从当前目录开始,指定文件相对于当前目录的位置。当前目录是指用户当前在目录树中所处的目录位置,也称为工作目录。例如,在Linux系统下有路径/home/dy/linux/kernel/sched.c,路径的第一个字符是Linux系统的分隔符“/”,代表从根目录开始,是一个绝对路径,这个路径表明在根目录下有home目录,而home下又有dy子目录,一直到最后的文件,文件的名称为sched.c。如果当前用户的工作目录是/home/dy/linux/,这时相对路径kernel/sched.c所指得就是文件/home/dy/linux/kernel/sched.c。和大多数支持多级目录的操作系统一样,Linux系统每一个目录下面都有两个特殊的目录项“.”和“.”,前者指当前目录,而后者指当前目录的上一级目录。对于上面的例子,当前目录是/home/dy/linux/,相对路径 ./kernel/sched.c和kernel/sched.c具有相同的含义,而 ./指的就是/home/dy,因此,./linux/kernel/sched.c也是指/home/dy/linux/kernel/sched.c。6.3.2 访问权限对于普通文件、目录以及具体的设备,都存在一个访问权限(也称为存取权限)控制问题。文件存取权限即文件读、写和执行的许可权,它和文件的共享、保护及保密相互联系、密不可分。文件的共享是指不同的用户共同使用一个文件。共享和由此带来的安全性问题是一对矛盾,每一个操作系统都必须在二者之间找到一个平衡点。所谓安全性,通常包括保护和保密两层含义。1. 文件共享文件共享指允许多个用户共同使用一个文件。文件系统一般都提供文件共享方法,使得只要保存某个文件的一个副本,就可以实现多个用户在不同目录下共同访问这一副本。系统中实现共享最简单的方法就是不同的用户使用相同的绝对路径名来访问同一个文件,这种方法中,所有用户使用同样的名称来访问共享文件。如图6.7(a)所示,可以看出,这种方法的主要缺陷是需要访问多级目录,多次访问外部存储器,效率低。图6.7 文件共享方式示意图Linux等操作系统还提供了更为简洁的链接法来实现共享。在需要访问共享文件的地方建立一个特殊的链接文件,直接指向共享文件,链接文件和原共享文件可以具有不同的名称,链接文件名也称为原共享文件的别名,它们都指向相同的文件内容,访问链接文件就是在访问共享文件本身。如图6. 7(b)所示。这种方法具有更高的效率,但原本完整的树状文件系统,经过链接之后变成了网状结构,一部分文件的路径不惟一,也带来一定的管理开销,在Linux系统中,链接文件作为一种单独的文件类型来对待。2. 访问权限控制文件的共享、保护和保密都涉及到文件访问许可权限的问题,针对不同的需要,系统可以采用多种不同的方式来控制文件的存取权限。(1) 口令方式在文件创建的时候,文件拥有者可以为每一个文件设置访问口令(password),访问口令被记录在文件说明信息中。文件系统在用户试图访问该文件的时候,首先要求用户提供口令并与文件说明信息中记录的口令进行比较,使用者必须提供正确的文件访问口令才能够存取该文件。通过这样的方法,可以简单地实现文件的共享与保密。口令验证的过程比较简单,只是保密性能相对比较差。(2) 密码方式密码(encryption)在文件创建的时候,文件拥有者在文件写入存储设备之前,通过特定的算法和加密密钥对文件内容进行编码加密,而在读取文件的时候,必须提供相应的解密密钥进行译码解密。加密和解密可以采用相同或不同的密钥,只有确切知道解密密钥的用户才能够读出被加密的文件。口令方式中有时也采用一定的加密技术。加密口令方式只是对口令本身加密,加密后的口令仍然存放在文件说明信息中,而密码方式是对整个文件进行加密,加密时采用的密钥掌握在用户自己手中,因此,密码方式的保密性强,但是要耗费大量的处理时间。上面两种文件存取权限控制方法是针对特定文件的,在多用户系统中,还可以针对特定的用户进行文件存取权限控制。大多数系统,包括Linux,用户身份验证都采用用户口令方式,建立用户的时候,设置其口令,口令以加密的形式存放在系统中,每次用户登录都要提供口令,与系统中存放的数据进行比较,如果相同,用户登录成功,否则,拒绝用户登录。在这样的系统中,多个用户可能同时使用计算机,每个用户都拥有自己的文件,这些文件的存取使用控制权由用户拥有。 (3) 存取控制矩阵存取控制矩阵是一个二维矩阵,其中一维是系统中所有的用户,另一维是系统中所有的文件,矩阵的每一个元素都表示该元素对应的用户对文件的存取控制权限,如图6.8所示。当用户对某个文件进行操作时,系统查找矩阵中该用户和该文件所对应的元素的值,只有当该元素表明有访问许可时,才可以进行具体的访问。利用这样的矩阵,可以对系统中所有文件的存取权限进行完整有效的控制。但是对于规模比较大的系统,存储和管理这样的矩阵需要比较大的系统开销。用户对每一个文件的访问,都要对矩阵的一行进行搜索,整体的效率比较低。图6.8 文件存取控制矩阵示意图(4) 存取控制表存取控制表是针对某个特定文件,把文件拥有者和相关的用户按照某种关系划分为类,按照不同的用户类赋予用户文件存取权限。Linux系统中,文件的存取权限分别赋予文件拥有者、拥有者所在用户组和其他用户组这三类用户,每一类访问的权限设置三位,分别为读、写和执行,这样就相当于每个文件只需要记录9位数据就可以进行权限控制了。实际上,每一个文件的存取控制表都相当于是整个存取控制矩阵中的一行元素。存取控制矩阵中的每一行对应于一个文件,首先去掉空元素,然后把所有的用户按照文件所有者、所有者所在组和其他用户组简化之后,就可以得到该文件的存取控制表。在Linux系统中,每一个文件都在文件说明信息中保存着自己的文件存取控制表,只有符合存取控制表中规定的条件,才允许进行具体的访问。对设备文件的权限设置实际上是限制了用户对设备本身的操作。设置文件访问口令和文件加密属于文件级的访问权限控制。在多用户系统中,必须要进行用户验证,文件系统针对特定的用户,可以通过存取控制矩阵或存取控制表来设置对文件的存取权限,这类方法可以认为是基于用户身份的存取权限控制,属于用户级的访问权限控制。在这些控制方法中,不论是口令还是密钥,都可以归结为口令。文件的存取控制是通过用户登录口令来控制的,因此,文件的保护、保密,关键在于用户口令的选取和保护。Linux系统中,文件的存取权限可以通过特定的用户命令来修改,具体的控制方法,参看本书第3部分相关内容。实际上,计算机硬件故障、系统软件缺陷,都会影响到文件的安全性,都可能涉及到文件的保护和保密问题,这些内容不属于本书的讨论范围。6.3.3 Linux目录分布Linux系统中采用的是树形的多级目录结构。只有在没有使用链接文件的情况下,整个文件系统构成完整的目录树,每一个目录或者文件都有惟一的绝对路径来确定。如果为了达到共享目的,建立链接文件之后,目录树就由树状结构变成了网状结构,被共享的文件内容可以通过不同的绝对路径来访问,造成有些文件的绝对路径不惟一。图6.9 Linux文件系统目录层次结构图Linux系统根目录下通常有多个默认的子目录,它们是bin实用程序子目录,存放大多数用户都可以使用的常用系统工具;boot子目录,存放系统启动时必须的内核映像等文件;dev设备子目录,系统在这个子目录里为每个设备分配一个i节点;etc基本数据子目录,存放系统的用户口令、网络配置等设置文件,home用户数据子目录,默认情况下,每个用户登录后的工作目录都设在这个目录下;lib系统函数库子目录,存放着系统提供的动态和静态库函数;proc系统状态子目录,通过这个目录,可以动态地了解系统内核的运行情况;root系统管理员的用户目录;sbin系统管理实用程序子目录;另外还有tmp临时文件目录、usr用户软件子目录以及var记载系统运行情况的日志子目录。除了这些默认的子目录之外,系统管理员还可以根据实际需要在根目录下建立新的子目录,比如专门用来安装(mount)其他文件系统的特殊子目录等等。一般用户,通常只能在自己的工作目录下或者其他得到授权的目录下工作,根据需要建立合适的子目录,安排自己的文件,未经授权,一般用户无法访问其他人的用户目录及其中的文件。6.3.4 Linux目录文件Linux系统中,目录也是文件的一种,称为目录文件,每一个目录也由一个i节点来描述,i节点中文件类型标识这是一个目录文件,同时在对应的物理块中存放用来描述文件的目录项列表。目录项列表用来描述一个目录所包含的全部文件和子目录,每一个目录项对应着一个文件或目录,具体的数据结构为: struct ext2-dir-entry-2 u32 inode; /* Inode number */ u16 rec-len; /* Directory entry length */ u8 name-len; /* Name length */ u8 file-type; /* File type*/ char nameEXT2-NAME-LEN; /* File name */;每一个目录项中记录着该文件的名称和对应的i节点号等信息。任何一个目录表的前两项内容都是标准目录项“.”和“.”。当用户给出一个完整的路径名,比如/home/dy/linux/kernel/sched.c,首先得到文件系统根目录对应的i节点,读取其中的信息,根据文件类型判定是一个目录文件,在这个i节点保存的目录项列表中找到名称为home的那一项,查找该目录项就可以得到这个子目录对应的i节点,然后再读取该i节点的信息,每一个目录文件中都保存着自己所包含文件和直接子目录的目录项,逐个查找,最终可以找到所需要文件的i节点号,访问相应的i节点,通过该i节点的索引表,得到存储文件内容的物理块,就得到了指定文件的内容。整个访问过程中多次访问不同的i节点,系统是通过在内存中建立一张内存i节点表来实现的,查找i节点可以直接在内存中进行,这样就提高了文件的访问效率。6.3.5 特殊目录在系统默认的目录中,最值得注意的是dev设备子目录和proc系统进程子目录。1. /dev子目录系统所有的设备文件都存放在dev设备子目录下。每一个设备文件也使用惟一的i节点来标识,设备文件i节点不指向文件系统中的任何实际的物理块,不占用数据空间,通过这个i节点可以访问相应的设备驱动,对设备文件的操作就是直接对设备本身进行相应的操作。Linux系统中有两种类型的设备文件:字符设备文件和块设备文件,分别对应于系统的字符设备和块设备。每一个设备文件的文件名由该设备的名称以及它的从设备号来描述。例如在系统中第一个IDE控制器上的主硬盘的设备名称号为hda,它上面的第一个分区的从设备号为1,所以这个分区对应的文件名就是/dev/hda1。使用命令ls -l /dev/hda*就可以看到第一个硬盘可能包含的全部设备文件:brw-rw-1 root disk 3, 0 May61998 hdabrw-rw-1 root disk 3, 1 May61998 hda1brw-rw-1 root disk 3,10 May61998 hda10brw-rw-1 root disk 3,11 May61998 hda11brw-rw-1 root disk 3,12 May61998 hda12brw-rw-1 root disk 3,13 May61998 hda13brw-rw-1 root disk 3,14 May61998 hda14brw-rw-1 root disk 3,15 May61998 hda15brw-rw-1 root disk 3,16 May61998 hda16brw-rw-1 root disk 3, 2 May61998 hda2brw-rw-1 root disk 3, 3 May61998 hda3brw-rw-1 root disk 3, 4 May61998 hda4brw-rw-1 root disk 3, 5 May61998 hda5brw-rw-1 root disk 3, 6 May61998 hda6brw-rw-1 root disk 3, 7 May61998 hda7brw-rw-1 root disk 3, 8 May61998 hda8brw-rw-1 root disk 3, 9 May61998 hda9其中第一个字符都是b,表明是块设备文件,接下来的9位数字控制设备文件的访问权限,表示只有设备所有者root和所属disk组成员可以读写,所有设备的主设备号都是3,从设备号依次为0到16,最后给出的是设备文件名。2. /proc子目录在proc子目录下存放的是关于当前运行系统的动态资料。这个目录及其所包含的文件属于一个称为proc的逻辑文件系统,和其他文件系统不同的是,proc文件系统是一个并不真正存在于块设备上的文件系统,这个目录下的文件也并没有存放在设备中。在系统的初始化过程中,proc 文件系统注册并建立该目录下所有的i节点,而只有当访问到其中的目录或文件时,Linux虚拟文件系统才利用内核信息实时地建立这些文件和目录的内容。proc目录为用户提供了几乎全部系统运行的动态资料,CPU、内存、系统各种外部设备、中断等计算机硬件和设备控制信息,以及内存资源和外部设备的使用情况,系统中所有当前进程的工作情况等等。每一个当前存在于系统中的进程都在proc目录下有一个子目录,进程号是该目录的名称,如果用户希望了解1号进程的当前情况,使用命令ls -l /proc/1,就可以看到该进程的相关内容如下:total 0-r-r-r- 1 root root0 Nov2 23:25 cmdlinelrwx-1 root root0 Nov2 23:25 cwd - /-r- 1 root root0 Nov2 23:25 environlrwx-1 root root0 Nov2 23:25 exe - /sbin/initdr-x-2 root root0 Nov2 23:25 fdpr-r-r-1 root root0 Nov2 23:25 maps-rw-1 root root0 Nov2 23:25 memlrwx-1 root root0 Nov2 23:25 root - /-r-r-r- 1 root root0 Nov2 23:25 stat-r-r-r- 1 root root0 Nov2 23:25 statm-r-r-r- 1 root root0 Nov2 23:25 status从上面的内容可以看到,这个进程对应的应用程序是/sbin/init,建立这些文件和目录的时间就是运行ls命令的当前时间,同时每一个文件的大小都是0,即没有使用任何磁盘空间。可以通过这个目录下的stat、statm和status文件进一步了解进程的执行状态,例如,我们可以使用命令cat /proc/1/status来显示init进程的当前情况:Name: initState: S (sleeping)Pid: 1PPid: 0Uid: 0 0 0 0Gid: 0 0 0 0Groups: VmSize: 1120 kBVmLck: 0 kBVmRSS: 476 kBVmData: 36 kBVmStk: 8 kBVmExe: 24 kBVmLib: 1024 kBSigPnd: 0000000000000000SigBlk: 0000000000000000SigIgn: ffffffffd7f0d8fcSigCgt: 00000000280b2603CapInh: 00000000fffffeffCapPrm: 00000000ffffffffCapEff: 00000000fffffeff进程的名称、进程号以及所处状态等基本信息,用户号、用户组号等信息,以及内存空间,信号状态等各种更为详细的资料都一览无余。综上所述,proc目录可以看作是一个观察系统内核内部工作情况的途径和窗口,通过这个目录下的内容,用户可以动态地了解计算机的软、硬件运行情况,可以用于实时监测,进行系统故障诊断。6.4 逻辑文件系统Ext2在整个Linux文件系统中,逻辑文件系统屏蔽了具体的设备细节,向虚拟文件系统提供服务,它真正存在于物理设备中。Linux系统可以支持几十种不同的文件系统,比如DOS系统的MSDOS文件系统、Windows NT的NTFS文件系统,MINIX系统的MINIX文件系统等等,它们都属于逻辑文件系统。Linux本身默认的逻辑文件系统是Ext2。6.4.1 Ext2文件系统Ext2文件系统是一种具有伸缩性,高效、可靠的逻辑文件系统。1. Ext2文件系统的历史Linux操作系统最初是从MINIX操作系统发展起来的,它最早使用的文件系统是MINIX文件系统,但是MINIX文件系统本身功能不完备,性能欠佳。称为VFS的虚拟文件系统接口加入到系统的核心。1992年,专为Linux设计的第一个文件系统Ext(Extended File System)诞生了,碎片和效率是其中最为严重的两个弱点。1993年,推出了新的专门用于Linux系统的Ext2 文件系统。Ext2 完全具备了高级文件系统的特点,性能也相当好,Ext2文件系统采用可变大小的物理块,具有良好的可扩展性,作为所有Linux发行版本的默认文件系统。2. Ext2文件系统的布局系统中的文件和目录等信息都存放在磁盘等块设备中,一个Linux系统可以支持多个物理磁盘设备,这主要取决于计算机硬件的支持能力,通常的PC中,最多可以支持到4或8个IDE设备,每一个物理磁盘又可以定义多个分区,每个分区是存放逻辑文件系统的最小单位。在Linux系统中,这些分区可以安装不同的逻辑文件系统,系统可以同时使用这些文件系统,而且在用户的眼里,它们表现出基本相同的性能,互相之间可以进行数据传输,这就是Linux虚拟文件系统的优势。每一个逻辑文件系统都按照不同的规则,把自己所控制的磁盘分区定义为一组逻辑块的序列,通常包括引导块、超级块、i节点区和数据区。引导块在磁盘分区的头部,一般占用一个扇区,用来存放引导程序。在系统启动过程中,根据系统引导设置,该分区引导块的内容被读入内存执行,负责启动操作系统,启动完成之后,引导块不再使用,因此引导块在系统实际运行过程中并不属于文件系统管理。超级块用来记录整个逻辑文件系统的基本管理信息,不同的文件系统中定义为不同的数据结构,主要用来记录文件系统当前的状态,比如文件系统的大小、i节点和物理块的使用情况等等。i节点区存放这个逻辑文件系统中所有的i节点,第一个i节点是这个系统的根节点,其他所有文件和目录都占用一个i节点。利用根节点,可以把存放在这个磁盘分区的整个文件系统安装到另一个文件系统的枝节点上,作为另外文件系统完整的一棵独立子树。数据区中存放文件系统中的各种物理块,可以存放直接块和各种间接块等文件内容,也可以用来存放各级间接块的地址等管理数据。Ext2文件系统把它所占用的磁盘分区首先分为引导区和块组,每一个块组中都由超级块、记录所有块组信息的组描述符表、块位图、i节点位图、i节点区和数据区组成,见图6.10。图6.10 磁盘分区中Ext2文件系统的布局每个块组中的超级块和组描述符都是相同的,前者记录整个文件系统的管理信息,后者记录每个块组的描述符。在系统启动的过程中,只有第一个块组中的超级块和组描述符被读取到内存空间中,其他块组中的数据作为冗余备份。此外,所有块组中的超级块和组描述符必须保持一致,当系统意外关机遭到部分破坏后,系统启动之后要进行文件系统一致性检查,首先要检查的就是这些数据,冗余数据虽然占用了一部分存储空间,但是提高了文件系统的可靠性。Ext2系统采用位图来描述空闲物理块和i节点,分别称为块位图和i节点位图,记录本块组数据区中物理块和i节点区中i节点的使用情况。6.4.2 基本数据结构本节介绍Ext2文件系统主要数据结构。超级块和i节点是其中最关键的两个结构,i节点用来描述各种类型的文件,是整个文件系统的基本管理单元,超级块则是描述整个文件系统的重要数据,是这里要介绍的重点。另外,这里还介绍组描述符。它是描述文件系统块组分布和使用情况的主要数据。1. 超级块Ext2文件系统的超级块用来描述目录和文件在物理设备上的静态分布情况,随着系统文件操作,超级块的内容也在不停地改变。对于PC机来讲,每一个磁盘分区都格式化为一个独立的文件系统,具有自己的超级块。超级块包含物理块和i节点的分配情况以及文件系统安装、检查情况等基本参数,描述整个文件系统的分布情况,同时也用于空闲i节点和物理块的分配和回收,是文件系统中最重要的数据,如果超级块的数据被破坏而且无法恢复的话,这个文件系统所管理的磁盘分区的数据就有可能全部丢失,因此超级块被同时记录在整个文件系统的每一个块组中,尽可能保证它的安全。系统根据超级块中的检查信息,确定整个文件系统的状态,如果发现错误或者是文件系统使用超过一定时间之后,都需要对整个文件系统进行检查,修正错误,整理磁盘碎片。根据所存放的位置,超级块也可以分为磁盘超级块和内存超级块,分别用结构ext2-super-block和ext2-sb-info来描述。其中磁盘超级块静态存放在外部存储器,而内存超级块是在文件系统启动时由外部超级块初始化形成,除了包含外部超级块所记录的信息之外,还增加了描述文件系统当前状态的动态信息和指向文件系统缓冲区的指针。内存超级块是系统内核其他部分进行文件操作的接口,内存超级块在文件操作发生之后通常会被修改,系统定期用内存超级块的数据更新磁盘超级块的内容。2. 组描述符块组是Ext2文件系统划分和管理文件系统的单位,每个块组都由一个组描述符(group descriptor)来具体描述,组描述符定义为ext2-group-desc数据结构,主要记录了该块组中空闲物理块和i节点的数目和描述它们的位图表的位置等信息,通过它可以管理整个块组内存储空间的分配和回收,它在块组中的地位就相当于超级块在整个文件系统中的地位。整个文件系统的所有块组的描述符集中在一起,形成组描述符表,这张表在每一个块组中都保存一个相同的副本,以便得到有效的保护。组描述符表位于该块组中超级块之后,可能占用多个数据块。6.4.3 存储空间管理文件系统的主要目标除了实现文件的有效管理和使用,同时还要保证存储器资源的有效利用。Linux系统默认的Ext2文件系统采用分块的组织方式,利用多重索引的物理文件结构来实现外部存储空间的管理。1. 块的大小Ext2逻辑文件系统中,块的大小可以在一定范围内调整,但是在格式化磁盘分区生成文件系统时必须指定块的大小,因此每一个实际存在的Ext2文件系统的块的大小都是固定的,块的大小对文件系统性能和存储空间利用率有相当大的影响。如果块这个存储管理的基本单位选取比较大的话,存储空间的利用率就可能比较低。反过来,如果存储单元选取很小,文件系统的时间效率就很低。因此,时间效率和空间利用率是一对矛盾。一般, 文件系统块的大小可选值为512、1K、2K或者是4K字节,Ext2文件系统数据块大小的可选值是1K4K字节。通常块的大小根据文件系统中文件的平均长度来选取比较合适。前面我们学习过,Linux使用的Ext2系统中采用多重索引方式来组织文件,块大小选取的标准是:能够保证大部分文件都可以用12个直接块存放,这样,每次寻址只要访问i节点就可以得到物理块的地址,能够保证相当高的时间效率。2. 空闲空间管理系统对所有使用和未使用的存储空间,在Ext2文件系统中包括i节点和物理块,都需要做精确的记录,这是内存进一步分配和回收的依据。块的使用情况,具体记录在每一个文件的i节点中,而i节点的使用情况,记录在目录项中,这些都可以通过文件系统实现快速搜索和管理。文件系统记录空闲存储空间,包括记录空闲块和空闲i节点,广泛采用的两种基本方式是空闲链表和位图,同样的方法也可以用来管理空闲内存。我们以空闲块的管理为例简

    注意事项

    本文(linux教程.第6章--文件系统.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开