《操作系统教程(第二版)第6章 文件管理-2.ppt》由会员分享,可在线阅读,更多相关《操作系统教程(第二版)第6章 文件管理-2.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、6.10 Linux的文件系统 Linux的文件系统结构主要采用了两层结构来进行构建,如图所示。第一层:是虚拟文件系统(VFS)。第二层:是真正的Linux自身的文件系统,EXT2(The Second Extended File System)。图1 Linux文件系统的结构 6.10.1 VFS文件系统 1.VFS的功能(1)对具体文件系统的数据结构进行抽象,以一种统一的数据结构进行管理。(2)将设备同对应的文件系统联系起来。(3)接受用户层的系统调用,例如,write、open、link等处理一些面向文件的通用操作。(4)支持多种具体文件系统之间的相互访问。(5)接受内核其他子系统的操作
2、请求,特别是内存管理子系统。6.10.1 VFS文件系统2.VFS的数据结构(1)VFS超级块。每个已安装的文件系统都有超级块,它是来描述整个文件系统的,每个已安装的文件系统有一个VFS超级块,是在各种文件系统安装时建立的,并且在文件系统卸载时自动删除,即它只存在内存中。(2)VFS inode VFS中的每个文件、目录等都用且只用一个VFS inode表示。文件系统处理文件所需要的信息都放在索引节点中 6.10.1 VFS文件系统3.文件系统功能的实现(1)VFS的初始化。在使用一个文件系统之前,必须对该文件系统进行注册(2)文件操作的实现。当某个进程发布了一个面向文件或目录的系统调用时,首
3、先使用系统调用遍历系统的VFS inode 图2 VFS与具体文件系统之间的关系 6.10.1 VFS文件系统4.VFS的缓冲机制(1)块高速缓存(2)索引节点高速缓存(3)目录高速缓存 6.10.1 VFS文件系统5.Linux文件类型(1)正规文件(Regular File):是最普通的文件类型,基本数据的载体。(2)目录文件(Directory File):包含其目录下文件的文件名及相应的文件指针。(3)字符型特殊文件(Character Special File):系统中特定设备在文件系统中的表示。(4)块型特殊文件(Block Special File):系统中磁盘设备(包括字符设备
4、)在文件系统中的表示。6.10.1 VFS文件系统(5)FIFO:进程通信文件。(6)Socket:进程间网络通信文件。(7)符号链接文件(Symbolic Link):链接别的文件的文件 6.10.1 VFS文件系统6.Linux文件系统的目录 Linux的文件系统的组织形式是一种树型结构,根节点是根目录root区的文件系统,之后每个装载的文件系统都被安装到一个指定的目录下(一般是在“mnt”目录下),同时以该目录作为这个文件系统的根目录,该目录原来的信息被覆盖 6.10.1 VFS文件系统7.Linux文件的查找 采用dentry结构配合inode来实现相关的查找 在VFS中每一个打开的文
5、件都对应有一个dentry节点,该节点与对应文件的inode之间有紧密的联系,并存放于dentry_Cache核心内存Cache中 就保证了系统在文件查找时不用每次都去访问磁盘,直接从核心内存中就能得到文件的inode 6.10.1 VFS文件系统8.Linux文件的操作(1)Linux文件的打开和关闭 在VFS中,要打开某个文件时,系统先得到一个空的文件ID号和一个文件信息节点,然后由相应的文件名通过文件的查找得到它的dentry节点和inode,建立四者之间的联系,最后则需要通过具体的文件系统自身提供的文件打开函数真正地打开指定的文件。6.10.1 VFS文件系统(2)Linux读文件和写
6、文件 系统先要判断所要读的文件区域是否被别的进程锁住,如果没有的话,就调用具体文件系统提供的读文件函数,将指定文件的内容读到指定的内存区域中。(3)文件访问权限的测试(4)文件的链接和符号链接 文件的链接 在VFS中,可以有多个dentry节点指向同一个inode 符号链接 仅仅是在符号链接文件中保存其链接目标文件的绝对路径6.10.1 VFS文件系统(5)Linux文件的共享 在VFS中,系统采用不同的文件ID号指向同一文件信息节点来实现文件的共享 6.10.1 VFS文件系统9.Linux文件的一致性处理(1)文件的同步更新(2)文件的记录锁 6.10.2 Linux EXT2文件系统 1
7、.EXT2文件系统的整体结构和布局 Linux将整个磁盘划分成若干分区,每个分区被当做独立的设备对待,一般需要一个主分区native和一个交换分区swap。主分区用于存放文件系统,交换分区用于虚拟内存。主分区内的空间又分成若干个块组。每个块组内包含相同个数的数据块,且都包含有一个超级块的拷贝,以及inode和数据块等信息。6.10.2 Linux EXT2文件系统图3 EXT2文件系统的物理分布 2.描述EXT2文件系统的数据结构(1)EXT2超级块。超级块主要用来描述目录和文件在磁盘上的静态分布,包括大小和结构。如给定块大小、每个组中块数目、inode总数、每组内空闲块和inode数等。(2
8、)EXT2的组描述符。每个数据块组都拥有一个描述它的数据结构,包括本组块分配位图的所在的块号、inode分配位图的块号、inode表的起始块号等。6.10.2 Linux EXT2文件系统6.10.2 Linux EXT2文件系统(3)EXT2的位图。Linux文件系统用位图来管理磁盘块和inode,位图分为块位图(block bitmap)和inode位图。(4)EXT2的inode表。inode是EXT2的基本组成部分。文件系统的每个文件或目录都由一个inode描述。每个inode对应于一个惟一的inode号。inode包含了文件内容、在磁盘上的位置、文件的存取权限、修改时间以及类型等。6
9、.10.2 Linux EXT2文件系统(5)EXT2目录。在EXT2文件系统中,目录是用来创建和包含文件系统中文件存取路径的特殊文件。目录文件由一系列的目录入口组成,系统通过这些目录入口访问目录下的文件和目录。6.10.2 Linux EXT2文件系统3.在EXT2文件系统中搜寻文件(1)读取超级块信息,了解磁盘分区的管理信息,特别是块长度和Inode Table起始块。(2)找到根目录信息。EXT2文件系统中,根目录的索引节点号是固定的,EXT2 ROOT_INO=2,读取2号索引节点表信息,即可找到根目录所在的块号。(3)读取根目录或普通目录所在块的信息,根据ext2_dir_ entr
10、y_2结构,找到子目录或文件的inode号。6.10.2 Linux EXT2文件系统(4)读取子目录或文件的inode信息,找到文件数据所在的磁盘块号。(5)读取子目录或文件数据块的信息。如果是文件,则查找结束。如果是目录,转到步骤(3)。6.10.2 Linux EXT2文件系统4.数据块的分配(1)因为数据块的分配或释放最终要修改超级块中的信息,因此为了保持数据的一致性,进程在分配数据块之前,EXT2的块分配程序首先对此文件系统的EXT2超级块加锁,各进程对超级块的访问遵循先来先服务原则。(2)若采用预分配数据块策略,则从预先分配数据块中取得一个。预先分配块实际上是在已分配数据块位图中预
11、先保留的数据块。6.10.2 Linux EXT2文件系统(3)若没有使用预分配策略,则EXT2文件系统必须分配一个新数据块。首先检查此文件最后一个块后的数据块是否空闲。如果此块已被使用,则它会在同一个数据块组中选择一个。(4)如果找不到这样的数据块,进程将在其他数据块组中搜寻,直到找到一空闲块,并更新与预分配策略中的相关数据。(5)找到空闲块后,块分配程序将更新数据块组中的位图并在Buffer Cache中为它分配一个数据缓存。6.10.3 日志文件系统日志文件系统 目前,Linux环境下有3种日志文件系统:一是EXT3,由Linux内核Stephen Tweedie开发,EXT3是通过向EXT2文件系统上添加日志功能来实现的;其次是Hans Reiser开发的ReiserFS日志式文件系统;另一种是由SGI在2001年3月发布的XFS日志式文件系统。