文件系统篇
文件系统可以用来存储文件内容,文件属性(文件所有者,日期等)和目录,这些不同类型的数据是如何存储在被编号的磁盘块上的呢?
Unix使用了一个简单的方法。它将这些磁盘块分成了3部分:
1,超级块
文件系统中的第一个块被称为超级块。这个块存放文件系统本身的结构信息。例如,超级块记录了每个区域的大小。超级块也存放未被使用的磁盘块的信息。不同版本的Unix的超级块的内容和结构稍有不同。
2,i-节点表
文件系统的下一个部分称为i-节点表。每个文件都有一些属性,如大小,文件所有者和最近修改时间等。这些性质被记录在一个称为i-节点表的结构中。所有的i-节点都有相同的大小,并且i-节点表是这些结构的一个列表。文件系统中的每个文件在该列表中都有一个i-节点。如果你有root权限,就可以像操作文件一样将分区打开,阅读并显示i-节点表。在显示utmp文件时就用过类似的技术。
以下一点很重要:表中的每个i-节点都通过位置来标识。例如,标识为2的i-节点(inode 2)位于文件系统i-节点表的第三个位置。
3,数据区
文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都是一样的。如果文件包含了超过一个块的内容,则文件会存放在多个磁盘块中。
文件有内容和属性,内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录。
创建一个新文件的过程:
1,存储属性 文件属性的存储:内核先找到一个空的i-节点,假如编号是47。内核把文件的信息记录其中。
2,存储数据 根据文件的大小,分配相应数目的块
3,记录分配情况 文件内容按顺序存放在块中,内核在i-节点的磁盘分布区记录了上述的块序列。磁盘分布区是一个磁盘块序号的列表,这3个编号放在最开始的3个位置。
4,添加文件名到目录 假设文件名是usrlist,内核将入口(47,usrlist)添加到目录文件。文件名和i-节点号之间的对应关系将文件名和文件的内容及属性连接了起来。
当用cat命令查看文件内容时,首先在目录文件中根据文件名usrlist找到所在记录的包含编号为47的i-节点号。定位i-节点号47并读取其内容。内核在文件系统中的i-节点区域找到i-节点47.i节点包含数据块编号的列表。然后cat不断的调用read函数,使得内核不断将字节从磁盘复制到内核缓冲区,进而到达用户空间。
可以得到一下结论:
目录包含的是文件的引用,每个引用被称为连接。文件的内容存储在数据块,文件的属性被记录在一个被称为i-节点的结构中,i-节点的编号和文件名存储在目录中。“目录包含子目录”的原理与此相同。
磁盘空间不足的概念:
一个Unix文件系统有一个i-节点区域和一个数据区域。因此,即使数据区有空间,i-节点空间也有可能不足。当Unix上安装了一个新的磁盘,需要将磁盘分成i-节点表和数据区。文件系统的每个文件都需要一个i-节点。i-节点表越大,则留给文件内容的空间越小。
分享到:
相关推荐
Unix/Linux操作系统简介 GNU编译工具GCC GNU C 内存管理 文件I/O 进程管理 信号 进程间通信 多线程 网络通信
《Unix编程艺术》、《Unix环境高级编程(第二版)》和《Unix网络编程(第二版)》是三本在IT领域中具有深远影响力的经典著作,涵盖了Unix操作系统的核心概念、系统调用、进程管理、文件操作、网络通信等多个重要主题...
卷二:《UNIX网络编程第二卷:高级网络编程》 本书则进一步深入到网络编程的高级主题,主要包括: 1. **套接字选项和协议**:深入解析了套接字选项的使用和各种网络协议的工作原理,如TCP、UDP、ICMP等。 2. **TCP...
Richard Stevens撰写,分为卷一和卷二,深入探讨了UNIX系统上的网络编程技术。这本书对于理解和掌握网络编程的基本概念、API以及实际应用有着极大的帮助。源代码是学习过程中的重要辅助资料,通过实践这些代码,...
Linux作为UNIX的类UNIX系统,其网络编程原理和API在很大程度上与UNIX保持一致,因而这本书的内容对Linux开发者同样具有较高的参考价值。 内容提到了UNIX网络编程常用的两种API:套接口(sockets)和XTI(X/Open传输...
《UNIX环境高级编程》与《UNIX网络编程卷1:协议》是两本深入解析UNIX系统编程的经典著作。在深入理解这些书籍的知识点之前,我们先要了解UNIX系统的基础概念。 UNIX是一个多用户、多任务的操作系统,其设计哲学...
《Unix网络编程》一书是网络编程领域中的经典之作,分为卷一和卷二,分别深入探讨了套接字API和进程间通信等核心主题。对于任何想在Unix环境下进行网络编程的开发者来说,这两本书都是不可或缺的参考资料。然而,...
- **网络编程**:深入探讨了Unix/Linux下的网络编程方法,包括TCP/IP协议栈的工作原理、socket编程接口等。 - **文件I/O操作**:覆盖了文件系统的基本概念以及各种文件操作的方法和技术,如打开、读写、关闭文件等。...
### UNIX网络编程卷2:进程间通信核心知识点详解 #### 一、进程间通信(IPC)概述 在《UNIX网络编程卷2》中,作者深入探讨了进程间通信(Interprocess Communication, IPC)这一主题。进程间通信是操作系统中一个...
从基础的套接口API,到进程间通信,再到高级套接字编程,作者以浅入深出的方式,将复杂的技术问题娓娓道来,使读者能够由表及里,逐渐掌握Unix网络编程的核心技术和方法。 在卷1中,W. Richard Stevens将套接字API...
《Unix网络编程》则专注于网络编程,包含以下核心内容: 1. 网络基础知识:TCP/IP协议族、OSI模型、端口与套接字概念的介绍。 2. 套接字API:讲解socket()、bind()、listen()、accept()、connect()、send()、recv...
《Linux/UNIX系统编程手册》是一本权威的指南,涵盖了操作系统的核心编程接口,为开发者提供了深入理解操作系统底层机制的窗口。源码分析是学习这些概念的最直接方式,因为它们揭示了内核如何与应用程序交互。以下是...
这本书详细介绍了socket接口,它是UNIX和其他类UNIX系统中实现网络通信的核心机制。socket接口为应用程序提供了一种标准化的方法来创建、连接和通信,无论是在局域网还是广域网上。 本书的知识点涵盖了以下几个方面...
《Unix网络编程》是一本详尽介绍Unix环境下网络编程技术的经典书籍,书中包含了大量实用的代码示例,帮助读者深入理解网络编程的核心原理与实践技巧。本文将重点分析书中两个代表性案例:简单的时间获取客户端与...
在这部分,读者将了解到如何利用Unix系统提供的网络编程接口来实现网络应用,如TCP/IP协议栈的工作原理、套接字的创建与操作、数据的发送与接收、多路复用I/O(如select和poll)、异步I/O等核心概念。同时,书中还...
《Steven编写的UNIX网络编程》是一本深受程序员喜爱的经典之作,涵盖了UNIX系统中的网络编程核心内容,分为两卷:第一卷“套接字联网API”和第二卷“进程间通信”。作者通过深入浅出的方式,详细阐述了网络编程的...
根据提供的标题“Unix编程艺术中文版(非加密,带目录)”及描述“Unix编程艺术中文版”,可以推测这是一本介绍Unix系统编程原理、技巧和最佳实践的书籍。本书可能涵盖Unix系统的背景知识、核心概念、编程工具和技术...
《Linux-UNIX系统编程手册(上册)》是由Linux编程专家Michael Kerrisk撰写的一部权威指南,详细介绍了...通过深入学习和实践,你将能够熟练掌握Linux和UNIX系统编程的核心技能,编写出高效、稳定和安全的系统级程序。
首先,本书的核心是Unix的网络编程接口——套接字(Sockets)。它详细阐述了如何使用Berkeley套接字API创建客户端和服务器程序。在这一部分,你可以学习到如何打开套接字、绑定IP地址和端口号、监听连接请求、接受...