`
jarfield
  • 浏览: 200685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux文件系统中一些重要概念的分析

阅读更多


文件控制块(FCB,File Control Block)

linux文件系统使用目录来组织文件。目录也被组织成文件存放在磁盘上,成为目录文件。每个文件都在它属于的目录文件中登记一个文件目录项,这个文件目录项就是文件控制块。下图就是一个目录文件的物理结构示意图。遍历该结构,就可以找到该目录下的所有文件的文件控制块
文件控制块1
文件控制块2
...
文件控制块n

文件控制块包含了文件除数据以外的控制信息,例如有关文件存取控制的信息(文件名、存取权限等)、有关文件逻辑结构和物理结构的信息、有关文件管理的信息(创建时间等)。因此,一个文件控制块的存储空间还是很大的。如果将文件控制块都直接保存在目录文件中,那么目录文件将会占据较多的物理块。遍历目录时就会读取多个物理快,从而降低了检索文件的速度。为了解决这个问题,linux引入了名为索引节点的数据结构。

索引节点(inode)

为了减少目录文件所占的物理块,linux将文件控制块一分为二,第一部分是文件名,第二部分是其他信息。其他信息被组织成定长的数据结构,称为索引节点。每个索引节点都有一个编号,称为索引号。每个文件目录项只保存文件名及文件名对应的索引号。这样文件目录项中只剩下14字节的文件名和2字节的索引号,一个512字节的物理块就可以保存32个文件目录项。也就是说,一个包含32个文件或子目录的目录,只占据1个物理块。可见,目录文件占据的物理块被大大减少。下图是使用了索引节点的物理文件的物理结构示意图。
文件名1
索引号1
文件名2
索引号2
...
...
文件名n
索引号n

提高文件访问速度,关键在于减少访问磁盘的次数,即减少访问读取物理块的数量。

外存索引节点

索引节点被保存在外存中,称为外存索引节点。

内存索引节点、内存索引节点表

索引节点存放在外存中。对某个文件的访问,会经常使用到它的索引节点,这样就会频繁地在内存和外存之间来回拷贝索引节点,效率较低。为了避免这个问题,linux在系统主存中开辟了一张内存索引节点表,该表共有100个表项,每个表项就是一个索引节点,称为内存索引节点。需要使用文件信息时,先到内存索引节点表中查找,如果找到则直接使用,否则将外存中的索引节点拷贝到内存索引节点表中,并使用之。使用内存索引节点表,不但能够加快文件访问速度,而且便于实现文件共享,这点在后面会提到。下图是内存索引节点表的示意图
索引节点1
索引节点2
...
索引节点n

内存索引节点表又被称为活动索引节点表内存索引节点又被称为活动索引节点

系统打开文件表

用户使用文件系统提供的API,按名访问文件,而不是直接访问索引节点。访问索引节点是文件系统的事情。文件系统必须根据文件名,在目录中查找到该文件的索引号,找到索引号后才能从内存索引节点表中查找索引节点。虽然索引节点可能被缓存在内存索引节点表中,但是在目录中查找索引号需要访问磁盘,效率是低下的。
为了解决这个问题,文件系统在内存中建立了一张系统打开文件表,该表共有100个表项。每个表项中存放了一个已打开的文件的索引号和其它信息。在文件被打开的时候,文件系统会在系统打开文件表中登记相应的表项。如果以后需要访问该文件,文件系统会首先在系统打开文件表中查找该文件的索引号。下图是系统打开文件表的示意图。
索引号1
其它信息1
索引号2
其它信息2
...
...
索引号n
其它信息n

系统打开文件表不但能提高文件访问效率,还便于实现文件共享,这点在后面会提到。

用户打开文件表

每个进程拥有一张用户打开文件表,该表有15个表项。它的表项类似于指针,指向系统打开文件表的表项。下图是用户打开文件表的示意图。
文件号1
指针1
文件号2
指针2
...
...
文件号n
指针n

这里没有使用文件名来标识一个文件,而是使用了文件号。用户打开文件表便于实现文件共享,这点在后面提到。

索引表

那么,索引节点是怎么描述文件数据的物理存储的呢?我们知道,文件数据存放在一个或多个物理块中,索引节点必须维护这些物理块的块号,才能真正找到文件数据。linux使用索引表来管理存放文件数据的物理块。索引表的每个表项都是一个物理块号。遍历索引表,就可以访问存放文件数据的所有物理块。那么,索引表是如何存放的呢?索引表同文件数据一样,也存放在物理块中。索引节点中包含了索引表所在物理块的块号,因此通过索引节点就可以访问到索引表,从而访问到文件数据。
如果文件很大,文件数据占用的物理块可能很多,索引表也会很大,那么,如果一个物理块不足以存放索引表怎么办?linux采用了多重索引表。
多重索引表是这样的。
  1. 每个文件的索引表规定为13个索引项,每个项4个字节,登记一个物理块。
  2. 索引项0-9中登记的是存放文件数据的物理块号。
  3. 索引项10登记的是存放一张二级索引表的物理块号。二级索引表拥有128个索引项,每个索引项登记的是存放文件数据的物理块号。
  4. 索引项11登记的是存放一张三级索引表的物理块号。三级索引表拥有128个索引项,每个索引项登记的是存放一张二级索引表的物理块号。二级索引表的内容同上。
  5. 索引项11登记的是存放一张四级索引表的物理块号。四级索引表拥有128个索引项,每个索引项登记的是存放一张三级索引表的物理块号。三级索引表的内容同上。
根据多重索引表的结构,我们可以计算出linux支持的最大文件体积。(10+128+128*128+128*128*128)*512字节 约等于128*128*128*512,即2的30次方,大约1G字节。

文件系统在外存上的组织安排。

磁盘被分成几个分区,每个分区称为一个文件卷。文件系统管理一个文件卷。文件卷被分成若干柱面、磁道和扇区。每个扇区为512字节,又称为物理块。0号物理块用于系统引导,1号物理块为超级块(super block),用于记录文件系统管理所需的信息。2-k块,用于存放外存索引节点表,k+1-n块,用于存在文件数据,n+1块的用途还不清楚。

文件的共享

linux上的文件共享分为两种:静态共享和动态共享。静态共享是指多个文件对应同一个物理存储。这可以通过文件连接和符号连接来实现。动态共享,是指不同进程并发地访问同一文件。动态共享是运行时的概念,进程结束了,共享关系也就消失了。

文件连接和普通文件一样被登记在目录文件中,他们的区别在于,文件连接会登记被链接文件的索引号,而符号连接只是登记被链接的文件的路径。

下面重点看看动态共享是如何实现的。

动态共享又分为两种情况:共享读写指针和不共享读写指针。如果两个进程合作访问一个文件,那就需要共享读写指针,这种情况常见于父子进程中。如果两个进程需要独立地、互不影响地访问一个文件,那就需要各自拥有独立的读写指针。

文件的读写指针是保存在系统打开文件表项中的。两个进程如果需要共享某个文件的读写指针,那么该文件在它们的用户打开文件表中的表项,应该都指向系统打开文件表的同一表项。 相反,则指向系统打开文件表的两个不同表项,只不过这两个表项都指向同一个索引节点

系统打开文件表的表项中除了含有读写指针f_offset,还有文件的访问计数f_count和内存索引节点的指针f_inode。f_count指出使用同一系统打开文件表项的进程数,注意不是使用同一文件的进程数。f_count是系统打开文件表项能够释放的标志。





分享到:
评论

相关推荐

    操作系统课程设计-文件系统的模拟设计.doc

    功能结构图如图1.0所示: (3)详细设计及少数重要编码的说明 这次课程设计中,我负责4个板块,分别是显示列表函数和目录、创建函数文件创 建函数、打开文件函数和关闭文件系统函数。 1. 显示列表函数和目录 流程图...

    LINUX网站建设技术指南

    第4章 Linux文件及系统管理 4.1 文件和目录 4.1.1 文件和目录概述 4.1.2 文件类型 4.2 文件权限 4.2.1 文件权限的概念 4.2.2 文件权限的构成 4.2.3 文件权限的依赖性 4.2.4 改变权限 4.3 文件链接 4.3.1 硬链接 ...

    RED HAT LINUX 6大全

    11.5 重要的DNS事实和概念 206 11.5.1 DNS客户和服务器截然不同 206 11.5.2 DNS术语 206 11.5.3 DNS将名字映射到IP地址及反 序操作 207 11.5.4 前区和反区必须保持同步 207 11.5.5 HUP信号和重启 207 11.5.6 IN-...

    Linux系统下的ELF文件分析

    ELF(Executable and Linkable Format)即可执行连接文件格式,是Linux,SVR4和Solaris2.0默认的目标文件格式,目前标准接口委员...分析elf文件有助于理解一些重要的系统概念,例如程序的编译和链接,程序的加载和运行等

    入门学习Linux常用必会60个命令实例详解doc/txt

    不过目前大多数较新的Linux发行版本(包括红旗 Linux、中软Linux、Mandrake Linux等)都可以自动挂装文件系统,但Red Hat Linux除外。 umount 1.作用 umount命令的作用是卸载一个文件系统,它的使用权限是超级...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    第3章 嵌入式Linux内核、引导系统和文件系统36 3.1 Linux内核定制、裁剪和添加36 3.1.1 概述36 3.1.2 内核目录简介37 3.1.3 配置文件和配置工具37 3.1.4 内核的编译命令39 实验3.1 Linux内核裁剪与编译40 3.2...

    嵌入式Linux程序设计案例与实验教程-实例代码

    第3章 嵌入式Linux内核、引导系统和文件系统36 3.1 Linux内核定制、裁剪和添加36 3.1.1 概述36 3.1.2 内核目录简介37 3.1.3 配置文件和配置工具37 3.1.4 内核的编译命令39 实验3.1 Linux内核裁剪与编译...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    第3章 嵌入式Linux内核、引导系统和文件系统36 3.1 Linux内核定制、裁剪和添加36 3.1.1 概述36 3.1.2 内核目录简介37 3.1.3 配置文件和配置工具37 3.1.4 内核的编译命令39 实验3.1 Linux内核裁剪与编译40 3.2...

    ANDROID取证实战—调查、分析与移动安全,高清完整扫描版

    第4章分析了android系统的数据存储方式、涉及的内存类型,以及android中常见的各类文件系统;第5章分析了android终端设备成为泄漏数据以及用于作为主动攻击源的原因,并为个人、企业安全总监和应用开发者提供了一些...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    第3章 嵌入式Linux内核、引导系统和文件系统36 3.1 Linux内核定制、裁剪和添加36 3.1.1 概述36 3.1.2 内核目录简介37 3.1.3 配置文件和配置工具37 3.1.4 内核的编译命令39 实验3.1 Linux内核裁剪与编译40 3.2...

    CentOS.5系统管理-part1

    9.1 Linux文件系统概述 9.1.1 什么是文件系统 9.1.2 文件系统布局 9.1.3 几个重要的文件系统 9.1.4 几个特殊的文件系统 9.1.5 主流的日志文件系统 9.1.6 其他类型的文件系统 9.1.7 非日志文件系统和日志文件系统 ...

    redhat linux教材20课程学习文档

    2.4 文件系统的基本概念 2.4.1 概述 2.4.2 Linux目录结构 2.4.3 mount 2.4.4 主要文件系统类型 2.4.5 日志文件系统 2.4.6 i结点 2.5 线程与进程的基本概念 2.5.1 基本概念 2.5.2 僵尸进程 2.5.3 进程和多任务的实现 ...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的...重要组织机构7 1.4.3各种UNIX系统分支7 习题9 第2章UNIX基本概念及入门技术10 2.1UNIX系统基本常识10 2.1.1两种前端机10 />...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    第6章 ext3文件系统反删除利器ext3grep 6.1 “rm–rf”带来的困惑 6.2 ext3grep的安装与使用 6.2.1 ext3grep的恢复原理 6.2.2 ext3grep的安装过程 6.3 通过ext3grep恢复误删除的文件与目录 6.3.1 数据...

    基于Mailserver性能监视系统

    电子邮件是整个互联网行业重要的组成... 第六章讲述了本系统中Makefile文件的编写方法,同时对系统进行了一些必要的测试,并进行了总结。 关键词:邮件服务器性能监视,多进程,守护进程,共享内存,信号量,PRO*C

    基于Linux 的防火墙技术研究

    第三个办法便是使用proc 文件系统。netfilter 采用了第 一种修改系统调用的办法。ipables 在应用层调用setsockopt 进入内核,然后调用netfilter. c 又件中 nbetsockopt()实现交互,这样通过配置防火墙就可以按...

    Ubuntu权威指南(2/2)

    4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接文件 98 4.3.5 符号链接文件 99 4.3.6 管道文件 101 4.4 文件的安全保护机制 101 4.4.1 显示文件的...

    Ubuntu权威指南(1/2)

    4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接文件 98 4.3.5 符号链接文件 99 4.3.6 管道文件 101 4.4 文件的安全保护机制 101 4.4.1 显示文件的...

    大物(下)复习提纲(电学,磁学,光学,电磁感应)文件格式为Linux下的压缩包

    大学物理课程在为学生系统地打好必要的物理基础、培养科学的世界观,增强学生分析问题和解决问题的能力,培养学生探索精神和创新意识等方面,具有十分重要的作用。 通过大学物理课程的教学,应使学生对物理学的...

Global site tag (gtag.js) - Google Analytics