【读书笔记unix操作系统设计】文件的内部表示

文章目录文件系统概述一、索引节点1.1索引节点的定义文件系统概述一个文件系统由一个逻辑块序列组成,每个块包含512、1024、2048个字节或512个字节的任意倍数,这依赖于系统的实现。如下图所示:引导块: 文件系统的开头,可以含有被读入机器中起引导作用或初启操作系统作用的引导代码。虽然为了引导系统只需要一个引导块,但每个文件系统都有一个引导块(虽然可能是空的)。超级快: 描述文件系统...
摘要由CSDN通过智能技术生成

读完本文可以了解到什么

本章从索引节点和磁盘块的角度讲述了文件创建删除、读取时所采取的索引节点和磁盘块的操作,主要涉及索引节点的分配与释放(第五部分)(用于创建删除文件)、磁盘块的分配与释放(第六部分)(用于创建删除文件)、内存中索引节点的分配与释放(第一部分)(用于读取文件)。

文件系统概述

一个文件系统由一个逻辑块序列组成,每个块包含512、1024、2048个字节或512个字节的任意倍数,这依赖于系统的实现。如下图所示:
在这里插入图片描述

  • 引导块: 文件系统的开头,可以含有被读入机器中起引导作用或初启操作系统作用的引导代码。虽然为了引导系统只需要一个引导块,但每个文件系统都有一个引导块(虽然可能是空的)。
  • 超级快: 描述文件系统的状态----如文件系统多大,能存储多少文件,文件系统何处能找到空闲的空间以及其他信息。
  • 索引节点表: 一张装有索引节点的表(存放在磁盘)。内核通过索引来访问索引节点表中的索引节点。有一个索引节点是文件系统的根索引节点,在执行了系统调用mount后,该文件系统的目录结构就可以从这个根索引节点进行读取了。对索引节点表操作时会被加入内存(不是全部加入内存,是部分加入)(内存中索引节点表和磁盘上数据结构有些差别)
  • 数据块: 存储数据。

一个文件的内部由一个索引节点给出,索引节点记录了文件数据在磁盘上的布局,并且包含文件所有者、创建时期等等信息。每个文件都有一个索引节点,但是它可以有几个名字,这几个名字都映射到该索引节点上(这一个文件)。每个名字都被称为一个联结

上面描述了磁盘中文件的结构,下面简单介绍下内核中和文件系统相关的数据结构:

内核中包含另外两个数据结构(除了磁盘上的inode):文件表和用户文件描述符表

  • 文件表:是一个全局核心表,文件表中存着文件中的字节偏移量(下一次读写位置),对打开进程的所允许的存取权限。
  • 用户文件描述符表:每个进程有一张,标识这一个进程的所有打开文件。

综上,文件系统主要通过三张表维护,索引节点表、用户文件描述符表、文件表。下图展示了三者的关系:
在这里插入图片描述

一、索引节点

1.1索引节点的定义

索引节点以静态形式存放在磁盘上,内核把他们读入内存索引节点表中以便操作它们。故在磁盘和内存中都有索引节点存在,但存储内容略有不同。

磁盘索引节点数据结构如下:
在这里插入图片描述

内存索引节点数据结构如下:
在这里插入图片描述
其中,内存索引节点状态、该文件的文件系统逻辑设备号、索引节点号、指向其他内存索引节点的指针、引用数均为内存索引节点独有的。

  • 内存索引节点状态:是否上锁、索引结点是否更改、对应文件数据是否更改、是否有进程在等待、是否该文件为安装点(第5章详解)
  • 索引节点号:文件在磁盘索引结点块中索引结点的数组下标
  • 指向其他内存索引节点的指针:在空闲表和散列队列中的指针
  • 引用计数:该文件的活跃实例数目(如几个进程打开了文件)

1.2索引节点的存取与释放

在介绍完文件系统中索引节点的数据结构后,我们将来探讨内核是如何获取索引节点并释放索引节点的。

1.2.1索引节点的存取

在获取将要读取的文件的索引节点号后(如何获取是上层服务完成),利用算法iget在内存中分配一个存储空间存放磁盘索引节点的拷贝(当然还有一些其他信息,正如1.1所述)。可以将内存中的索引节点理解为磁盘索引节点的高速缓冲,其分配算法和上一章中磁盘高速缓冲分配算法getblk几乎相同:内核把设备号和索引节点号散列映射到一个散列队列上,并搜索散列队列以找到该索引节点。如果找到索引节点但被上锁,那么阻塞等待唤醒。如果能找到索引节点且未上锁,则在空闲表中移除该节点,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值