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

本文详细介绍了Unix操作系统中文件的内部表示,包括索引节点的定义、存取与释放,以及磁盘块的分配与释放。讨论了文件系统的基本构成如引导块、超级块、索引节点表、数据块,并阐述了内存中索引节点表、用户文件描述符表和文件表的作用。重点讲解了索引节点如何记录文件存储区域,以及路径名到索引节点的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读完本文可以了解到什么

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

文件系统概述

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

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

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

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

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

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

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

一、索引节点

1.1索引节点的定义

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

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

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

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

1.2索引节点的存取与释放

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

1.2.1索引节点的存取

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

译者序 前言 第1章 系统概貌 1.1 历史 1.2 系统结构 1.3 用户看法 1.3.1 文件系统 1.3.2 处理环境 1.3.3 构件原语 1.4 操作系统服务 1.5 关于硬件的假设 1.5.1 中断与例外 1.5.2 处理机执行级 1.5.3 存储管理 1.6 本章小结 第2章 内核导言 2.1 UNIX操作系统的体系结构 2.2 系统概念介绍 2.2.1 文件子系统概貌 2.2.2 进程 2.3 内核数据结构 2.4 系统管理 2.5 本章小结 2.6 习题 第3章 数据缓冲区高速缓冲 3.1 缓冲头部 3.2 缓冲池的结构 3.3 缓冲区的检索 3.4 读磁盘块与写磁盘块 3.5 高速缓冲的优点与缺点 3.6 本章小结 3.7 习题 第4章 文件内部表示 4.1 索引节点 4.1.1 定义 4.1.2 对索引节点的存取 4.1.3 释放索引节点 4.2 正规文件的结构 4.3 目录 4.4 路径名到索引节点的转换 4.5 超级块 4.6 为新文件分配索引节点 4.7 磁盘块的分配 4.8 其他文件类型 4.9 本章小结 4.10 习题 第5章 文件系统的系统调用 5.1 系统调用Open 5.2 系统调用read 5.3 系统调用write 5.4 文件记录的上锁 5.5 文件的输入/输出位置的调整lseek 5.6 系统调用close 5.7 文件的建立 5.8 特殊文件的建立 5.9 改变目录及根 5.10 改变所有者及许可权方式 5.11 系统调用statfstat 5.12 管道 5.12.1 系统调用pipe 5.12.2 有名管道的打开 5.12.3 管道的读写 5.12.4 管道的关闭 5.12.5 例 5.13 系统调用dup 5.14 文件系统的安装拆卸 5.14.1 在文件路径名中跨越安装点 5.14.2 文件系统的拆卸 5.15 系统调用link 5.16 系统调用unlink 5.16.1 文件系统的一致性 5.16.2 竟争条件 5.17 文件系统的抽象 5.18 文件系统维护 5.19 本章小结 5.20 习题 第6章 进程结构 6.1 进程的状态状态的转换 6.2 系统存储方案 6.2.1 区 6.2.2 页页表 6.2.3 内核的安排 6.2.4 u区 6.3 进程的上下文 6.4 进程上下文的保存 6.4.1 中断例外 6.4.2 系统调用的接口 6.4.3 上下文切换 6.4.4 为废弃返回(abortive return)而保存上下文 6.4.5 在系统用户地址空间之间拷贝数据 6.5 进程地址空间的管理 6.5.1 区的上锁解锁 6.5.2 区的分配 6.5.3 区附接到进程 6.5.4 区大小的改变 6.5.5 区的装入 6.5.6 区的释放 6.5.7 区与进程的断接 6.5.8 区的复制 6.6 睡眠 6.6.1 睡眠事件及其地址 6.6.2 算法sleepwakeup 6.7 本章小结 6.8 习题 第7章 进程控制 7.1 进程的创建 7.2 软中断信 7.2.1 软中断信的处理 7.2.2 进程组 7.2.3 从进程发送软中断信 7.3 进程的终止 7.4 等待进程的终止 7.5 对其他程序的引用 7.6 进程的用户标识 7.7 改变进程的大小 7.8 Shell程序 7.9 系统自举进程init 7.10 本章小结 7.11 习题 第8章 进程调度时间 8.1 进程调度 8.1.1 算法 8.1.2 调度参数 8.1.3 进程调度的例子 8.1.4 进程优先权的控制 8.1.5 公平共享调度 8.1.6 实时处理 8.2 有关时间的系统调用 8.3 时钟 8.3.1 重新启动时钟 8.3.2 系统的内部定时 8.3.3 直方图分析 8.3.4 记帐统计 8.3.5 计时 8.4 本章小结 8.5 习题 第9章 存储管理策略 9.1 对换 9.1.1 对换空间的分配 9.1.2 进程的换出 9.1.3 进程的换入 9.2 请求调页 9.2.1 请求调页的数据结构 9.2.2 偷页进程 9.2.3 页面错 9.2.4 在简单硬件支持下的请求调页系统 9.3 对换请求调页的混合系统 9.4 本章小结 9.5 习题 第10章 输入输出子系统 10.1 驱动程序接口 10.1.1 系统配置 10.1.2 系统调用与驱动程序接口 10.1.3 中断处理程序 10.2 磁盘驱动程序 10.3 终端驱动程序 10.3.1 字符表Clist 10.3.2 标准方式下的终端驱动程序 10.3.3 原始方式下的终端驱动程序 10.3.4 终端探询 10.3.5 建立控制终端 10.3.6 间接终端驱动程序 10.3.7 注册到系统 10.4 流 10.4.1 流的详细的示例 10.4.2 对流的分析 10.5 本章小结 10.6 习题 第11章 进程间通信 11.1 进程跟踪 11.2 系统V IPC 11.2.1 消息 11.2.2 共享存储区 11.2.3 信量 11.2.4 总的评价 11.3 网络通信 11.4 套接字 11.5 本章小结 11.6 习题 第12章 多处理机系统 12.1 多处理机系统的问题 12.2 主从处理机解决方法 12.3 信量解决方法 12.3.1 信量定义 12.3.2 信量实现 12.3.3 几个算法 12.4 Tunis系统 12.5 性能局限性 12.6 习题 第13章 分布式UNIX系统 13.1 卫星处理机系统 13.2 纽卡斯尔连接 13.3 透明型分布式文件系统 13.4 无存根进程的透明分布式模型 13.5 本章小结 13.6 习题 附录A 系统调用 参考文献 索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值