操作系统(四):文件管理、文件系统

4.4 文件目录结构

结合Linux文件系统学习:http://blog.csdn.net/kyang_823/article/details/73302248

与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、 位置和所有权等,这些信息主要是由操作系统进行管理。

首先我们来看目录管理的基本要求: 从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”;目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度;在共享系统中,目录还需要提供用于控制访问文件的信息。此外,文件允许重名也是用户的合理和必然要求,目录管理通过树形结构来解决和实现。

文件控制块和索引结点

同进程管理一样,为实现目录管理,操作系统中引入了文件控制块的数据结构。
1) 文件控制块。
文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。

FCB主要包含以下信息:

  • 基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。
  • 存取控制信息,如文件存取权限等。
  • 使用信息,如文件建立时间、修改时间等。
2) 索引结点。(Linux采用)
在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读出该文件的物理地址。也就是说,在检索目录时,文件的其他描述信息不会用到,也不需调入内存。因此,有的系统(如UNIX,见表4-1)釆用了文件名和文件描述信息分开的方法,文件描述信息单独形成一个称为索引结点的数据结构,简称为 i 结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成。
表4-1 UNIX文件目录结构
文件名索引结点编号
文件名1
文件名2





一个FCB的大小是64字节,盘块大小是1KB,则在每个盘块中可以存放16个FCB(注意,FCB必须连续存放)。而在UNIX系统中一个目录项仅占16字节,其中14字节是文件名,2字节是 i 结点指针。在1KB的盘块中可存放64个目录项。这样,可使查找文件时平均启动磁盘次数减少到原来的1/4,大大节省了系统开销。

存放在磁盘上的索引结点称为磁盘索引结点,UNIX中的每个文件都有一个唯一的磁盘索引结点,主要包括以下几个方面:

  • 文件主标识符(UID、GID);
  • 文件类型,包括普通文件、目录文件或特别文件;
  • 文件对各类用户的读、写、可执行权限;
  • 文件物理地址,每个索引结点中含有13个地址项,即 iaddr(0) ~ iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号;
  • 文件字节数;
  • 文件链接数,所有指向该文件的文件名的指针计数(硬链接);
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间;
文件被打开时,磁盘索引结点复制到内存的索引结点中,以便于使用。在内存索引结点中又增加了以下内容:
  • 索引结点编号,用于标识内存索引结点。
  • 状态,指示i结点是否上锁或被修改。
  • 访问计数,每当有一进程要访问此i结点时,计数加1,访问结束减1。
  • 逻辑设备号,文件所属文件系统的逻辑设备号。
  • 链接指针,设置分别指向空闲链表和散列队列的指针。

目录结构

在理解一个文件系统的需求前,我们首先来考虑在目录这个层次上所需要执行的操作,这有助于后面文件系统的整体理解。
  • 搜索:当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
  • 创建文件:当创建一个新文件时,需要在目录中增加一个目录项。
  • 删除文件:当删除一个文件时,需要在目录中删除相应的目录项。
  • 显示目录:用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
  • 修改目录:某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。
操作时,考虑以下几种目录结构:
1) 单级目录结构。
在整个文件系统中只建立一张目录表,每个文件占一个目录项,如图4-3所示。
单级目录结构实现了 “按名存取”,但是存在查找速度慢、文件不允许重名、不便于文件共享等缺点,而且对于多用户的操作系统显然是不适用的。
2) 两级目录结构。
将文件目录分成主文件目录(Master File Directory, MFD)和用户文件目录(User File Directory, UFD)两级,如图4-4所示。
图4-4  两级目录结构
主文件目录项记录用户名及相应用户文件目录所在的存储位置。用户文件目录项记录该用户文件的FCB信息。当某用户欲对其文件进行访问时,只需搜索该用户对应的UFD,这既解决了不同用户文件的“重名”问题,也在一定程度上保证了文件的安全。

两级目录结构可以解决多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。但是两级目录结构缺乏灵活性,不能对文件分类。

3) 多级目录结构(树形目录结构)。
用户要访问某个文件时用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件的通路上的所有目录名与数据文件名用分隔符链接起来而成。从根目录出发的路径称绝对路径。当层次较多时,每次从根目录查询浪费时间,于是加入了当前目录,进程对各文件的访问都是相对于当前目录进行的。当用户要访问某个文件时,使用相对路径标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成。
图4-5  树形目录结枸
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,在树形目录中查找一个文件,需要按路径名逐级访问中间结点,这就增加了磁盘访问次数,无疑将影响查询速度。
4) 无环图目录结构。
树形目录结构可便于实现文件分类,但不便于实现文件共享,为此在树形目录结构的基础上增加了一些指向同一结点的有向边,使整个目录成为一个有向无环图。引入无环图目录结构是为了实现文件共享,如图4-6所示。

当某用户要求删除一个共享结点时,若系统只是简单地将它删除,当另一共享用户需要访问时,却无法找到这个文件而发生错误。为此可以为每个共享结点设置一个共享计数器,每当图中增加对该结点的共享链时,计数器加 1;每当某用户提出删除该结点时,计数器减1。仅当共享计数器为0时,才真正删除该结点,否则仅删除请求用户的共享链。

图4-6  图形目录结构
共享文件(或目录)不同于文件拷贝(副本)。如果有两个文件拷贝,每个程序员看到的是拷贝而不是原件;但如果一个文件被修改,那么另一个程序员的拷贝不会有改变。对于共享文件,只存在一个真正文件,任何改变都会为其他用户所见。

4.5 共享文件(静态共享)

硬链接

软连接

4.7 文件系统层次结构

现代操作系统有多种文件系统类型(如FAT32、NTFS、 ext2、ext3、ext4等),因此文件系统的层次结构也不尽相同。图4-11是一种合理的层次结构。


图4-11文件系统层次结构
1) 用户调用接口
文件系统为用户提供与文件及目录有关的调用,如新建、打开、读写、关闭、删除文件,建立、删除目录等。此层由若干程序模块组成,每一模块对应一条系统调用,用户发出系统调用时,控制即转入相应的模块。
2) 文件目录系统
文件目录系统的主要功能是管理文件目录,其任务有管理活跃文件目录表、管理读写状态信息表、管理用户进程的打开文件表、管理与组织在存储设备上的文件目录结构、调用下一级存取控制模块。
3) 存取控制验证
实现文件保护主要由该级软件完成,它把用户的访问要求与FCB中指示的访问控制权限进行比较,以确认访问的合法性。
4) 逻辑文件系统与文件信息缓冲区
逻辑文件系统与文件信息缓冲区的主要功能是根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号。
5) 物理文件系统
物理文件系统的主要功能是把逻辑记录所在的相对块号转换成实际的物理地址。
6) 分配模块
分配模块的主要功能是管理辅存空间,即负责分配辅存空闲空间和回收辅存空间。
7) 设备管理程序模块
设备管理程序模块的主要功能是分配设备、分配设备读写用缓冲区、磁盘调度、启动设备、处理设备中断、释放设备读写缓冲区、释放设备等。

4.8 文件系统实现

目录实现

在读文件前,必须先打开文件。打开文件时,操作系统利用路径名找到相应目录项,目 录项中提供了查找文件磁盘块所需要的信息。目录实现的基本方法有线性列表和哈希表两种。
1) 线性列表
最简单的目录实现方法是使用存储文件名和数据块指针的线性表。创建新文件时,必须 首先搜索目录表以确定没有同名的文件存在,然后在目录表后增加一个目录项。删除文件则 根据给定的文件名搜索目录表,接着释放分配给它的空间。若要重用目录项,有许多方法: 可以将目录项标记为不再使用,或者将它加到空闲目录项表上,还可以将目录表中最后一个 目录项复制到空闲位置,并降低目录表长度。釆用链表结构可以减少删除文件的时间。其优点在于实现简单,不过由于线性表的特殊性,比较费时。
2) 哈希表
哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。这种方法的优 点是查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免冲突。最大的困难 是哈希表长度固定以及哈希函数对表长的依赖性。

目录查询是通过在磁盘上反复搜索完成,需要不断地进行I/O操作,开销较大。所以如 前面所述,为了减少I/O操作,把当前使用的文件目录复制到内存,以后要使用该文件时只 要在内存中操作,从而降低了磁盘操作次数,提高了系统速度。

文件实现

1. 文件分配方式
文件分配对应于文件的物理结构,是指如何为文件分配磁盘块。常用的磁盘空间分配方 法有三种:连续分配、链接分配和索引分配。有的系统(如RD0S操作系统)对三种方法都支持,但是更普遍的是一个系统只提供一种方法的支持。
1) 连续分配。
连续分配方法要求每个文件在磁盘上占有一组连续的块,如图4-12所示。 磁盘地址定义了磁盘上的一个线性排序。这种排序使作业访问磁盘时需要的寻道数和寻道时 间最小。
图4-12  连续分配
文件的连续分配可以用第一块的磁盘地址和连续块的数量来定义。如果文件有n块长并 从位置b开始,那么该文件将占有块b, b+1, b+2, …, b+n-1。 一个文件的目录条目包括 开始块的地址和该文件所分配区域的长度。

连续分配支持顺序访问和直接访问。其优点是实现简单、存取速度快。缺点在于,文件 长度不宜动态增加,因为一个文件末尾后的盘块可能已经分配给其他文件,一旦需要增加, 就需要大量移动盘块。此外,反复增删文件后会产生外部碎片(与内存管理分配方式中的碎 片相似),并且很难确定一个文件需要的空间大小,因而只适用于长度固定的文件。

2) 链接分配。
链接分配是釆取离散分配的方式,消除了外部碎片,故而显著地提高了 磁盘空间的利用率;又因为是根据文件的当前需求,为它分配必需的盘块,当文件动态增长 时,可以动态地再为它分配盘块,故而无需事先知道文件的大小。此外,对文件的增、删、 改也非常方便。链接分配又可以分为隐式链接和显式链接两种形式。

隐式连接如图4-13所示。每个文件对应一个磁盘块的链表;磁盘块分布在磁盘的任何 地方,除最后一个盘块外,每一个盘块都有指向下一个盘块的指针,这些指针对用户是透明. 的。目录包括文件第一块的指针和最后一块的指针。

创建新文件时,目录中增加一个新条目。每个目录项都有一个指向文件首块的指针。该 指针初始化为NULL以表示空文件,大小字段为0。写文件会通过空闲空间管理系统找到空 闲块,将该块链接到文件的尾部,以便写入。读文件则通过块到块的指针顺序读块。

隐式链接分配的缺点在于无法直接访问盘块,只能通过指针顺序访问文件,以及盘块指 针消耗了一定的存储空间。隐式链接分配的稳定性也是一个问题,系统在运行过程中由于软 件或者硬件错误导致链表中的指针丢失或损坏,会导致文件数据的丢失。

图4-13  隐式链接分配
显式链接,是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。在该表中,凡是 属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件 地址被填入相应文件的FCB的“物理地址”字段中。由于查找记录的过程是在内存中进行 的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的 所有盘块号都放在该表中,故称该表为文件分配表(File Allocation Table, FAT)。
3) 索引分配。
链接分配解决了连续分配的外部碎片和文件大小管理的问题。但是,链接分配不能有效支持直接访问(FAT 除外)。索引分配解决了这个问题,它把每个文件的所有的盘块号都集中放在一起构成索引块(表),如图4-14所示。

图4-14  索引分配
每个文件都有其索引块,这是一个磁盘块地址的数组。索引块的第i个条目指向文件的第i个块。目录条目包括索引块的地址。要读第i块,通过索引块的第i个条目的指针来查找和读入所需的块。

创建文件时,索引块的所有指针都设为空。当首次写入第i块时,先从空闲空间中取得 一个块,再将其地址写到索引块的第i个条目。索引分配支持直接访问,且没有外部碎片问 题。其缺点是由于索引块的分配,增加了系统存储空间的开销。索引块的大小是一个重要的 问题,每个文件必须有一个索引块,因此索引块应尽可能小,但索引块太小就无法支持大文 件。可以釆用以下机制来处理这个问题。

链接方案:一个索引块通常为一个磁盘块,因此,它本身能直接读写。为了处理大文件, 可以将多个索引块链接起来。

多层索引:多层索引使第一层索引块指向第二层的索引块,第二层索引块再指向文件块。 这种方法根据最大文件大小的要求,可以继续到第三层或第四层。例如,4096B的块,能在 索引块中存入1024个4B的指针。两层索引允许1048576个数据块,即允许最大文件为4GB。

混合索引:将多种索引分配方式相结合的分配方式。例如,系统既釆用直接地址,又采 用单级索引分配方式或两级索引分配方式。

表4-2是三种分配方式的比较。

表4-2 文件三种分配方式的比较

访问第n个记录优  点缺  点
顺序分配需访问磁盘1次顺序存取时速度怏,当文件是定长时 可以根据文件起始地址及记录长度进行 随机访问文件存储要求连续的存储空间,会产 生碎片,也不利于文件的动态扩充
链接分配需访问磁盘n次可以解决外存的碎片问题,提髙了外 存空间的利用率,动态增长较方便只能按照文件的指针链顺序访问,查 找效率低,指针信息存放消耗外存空间
索引分配m级需访问磁盘m+1次可以随机访问,易于文件的增删索引表增加存储空间的开销,索引表 的查找策略对文件系统效率影响较大
此外,访问文件需要两次访问外存——首先要读取索引块的内容,然后再访问具体的磁 盘块,因而降低了文件的存取速度。为了解决这一问题,通常将文件的索引块读入内存的缓 冲区中,以加快文件的访问速度。

2. 文件存储空间管理












  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RHEL(Red Hat Enterprise Linux)是一种基于Linux操作系统的企业级发行版。在RHEL文件系统管理是非常重要的一部分,包括目录和文件操作。 目录操作包括创建、删除、移动和重命名目录。在Linux,目录是一种特殊的文件,用于存储其他文件和目录。创建目录可以使用mkdir命令,删除目录可以使用rmdir命令,移动和重命名目录可以使用mv命令。 文件操作包括创建、删除、复制、移动和重命名文件。在Linux文件是一种用于存储数据的对象。创建文件可以使用touch命令,删除文件可以使用rm命令,复制文件可以使用cp命令,移动和重命名文件可以使用mv命令。 此外,还有一些其他的文件系统管理操作,如查看文件和目录的权限和所有权、修改文件和目录的权限和所有权、查找文件和目录等。 总之,文件系统管理是Linux操作系统非常重要的一部分,掌握好文件和目录操作可以提高工作效率和操作系统的安全性。 ### 回答2: RHEL是一种基于Linux的操作系统,它具有强大的文件系统管理能力,让用户可以有效地管理文件和目录,以便管理、存储和检索数据。在Linux文件系统,一切都是文件,包括硬件设备、文件、目录和虚拟文件系统等。 在RHEL系统,可以使用一系列命令来管理文件和目录。其,常用的命令包括ls、cd、mkdir、cp、mv、rm、chown、chmod等等。 ls命令用于列出当前目录下的文件和目录,可以使用-l选项查看详细信息,-a选项列出所有文件,包括隐藏文件。 cd命令用于切换当前工作目录,可以使用.表示当前目录,..表示上级目录。 mkdir命令用于创建目录,例如mkdir newdir就可以创建一个名为newdir的目录。 cp命令用于拷贝文件或目录,例如cp file1 file2就可以将file1复制到file2。 mv命令用于移动或重命名文件或目录,例如mv olddir newdir就可以将olddir改名为newdir,也可以使用该命令将文件从一个目录移动到另一个目录。 rm命令用于删除文件或目录,例如rm file1就可以删除file1文件,使用-r选项可以删除目录。 chown命令用于改变文件或目录的所有者,例如chown user1 file1就可以将file1的所有者改为user1。 chmod命令用于改变文件或目录的权限,例如chmod 755 file1就可以将file1的权限改为-rwxr-xr-x。 此外,在RHEL系统,还有很多其他的文件系统管理命令,例如tar、gzip、find等等,它们可以帮助用户更便捷地管理文件和目录。 总之,RHEL系统的文件系统管理功能非常强大,可以满足用户对文件和目录的各种需求。如果您是一名Linux系统管理员,那么熟练掌握RHEL系统的文件系统管理命令,将会极大地提高您的工作效率。 ### 回答3: RHEL(Red Hat Enterprise Linux)是一种常见的Linux操作系统。在系统,目录和文件操作是一个重要的部分,因为它是管理系统的基础。 在Linux文件系统,根目录“/”是树形结构的根部。以下是RHEL目录和文件操作的一些基本命令: 1. ls命令:显示当前目录的文件文件夹。 2. cd命令:更改当前工作目录。 3. mkdir命令:创建一个新目录。 4. rmdir命令:删除一个空目录。 5. touch命令:创建一个空文件或更新一个已存在的文件的时间戳。 6. cp命令:拷贝文件或目录。 7. mv命令:移动文件或目录。 8. rm命令:删除文件或目录。 9. chmod命令:更改文件或目录的文件权限。 10. chown命令:更改文件文件夹的所有者。 11. pwd命令:显示当前目录的完整路径。 12. find命令:在文件系统搜索一个文件或目录。 这些命令可用于在系统查找、移动、复制和删除文件或目录。在Linux,所有文件文件夹都位于一个根目录下的子目录,每个子目录都有一个唯一的名称。这种结构允许用户轻松地管理和组织文件。 总之,RHEL目录和文件操作是管理Linux操作系统重要的部分。了解这些基本命令可帮助用户迅速地在系统查找、管理和维护文件文件夹。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值