Linux中的内存管理

Linux下的文件系统知识总结

Linux下的内存的抽象

  1. 一个机械硬盘有许多个磁盘组成,每个磁盘又由多个同心圆组成,每个同心圆又被分为许多个扇区。

Linux下的内存管理基本知识

在Linux下,使用一种简单的方法,将存储空间划分为一下:

超级块:用来存储文件系统本身的信息。比如,文件系统中各个区域的大小。没有被使用的区域的大小。
i-node节点表:这个表的作用是将文件和文件存储的数据块联系起来。将文件的元数据存储与i-node结点表中。每一个i-node结点表意味着一个文件。
为什么需要使用i-node结点来表示一个文件,而不是直接使用块的编号来表示一个文件名。这是因为一个块的大小一般是固定的。(512byte),所以当又一个大文件的时候,其不止占用了一个内存块,这是就需要一个新的概念来表示一个文件。

1
ls -i #可以查看i-node节点号和文件名的定义

数据区:将文件的数据存储在此。

一个文件的创建过程

一个文件的创建的过程是:

  1. 存储文件的属性,在Linux内核的帮助下文件系统会寻找一个空的i-node结点,用以存放该文件的元数据。诸如访问时间、文件大小、访问权限、归属者等等。但是注意文件名不是文件的元数据,所以其也不会存储在i-node结点中
  2. 存储文件的内容,内核从空余的存储空间中找的满足文件大小的存储空间,便将其地址写入到i-node结点中。
  3. 添加文件名到目录中。

一个可执行文件的执行过程

  1. 通过用户输入的路径名称查找该文件的目录,通过目录找到了其对应的i-node号,但是并不会返回i-node号,而是添加一层抽象——文件描述符。文件描述符fd不仅仅包含了i-node节点号,还包括了文件当前的读写位置、文件打开的模式等等信息。
  2. 通过文件描述符中的i-node节点号,找到对应的i-node结点
  3. 分析该程序头,找到该程序的入口地址。
  4. 创建进程空间,建立物理地址和虚拟地址之间的映射关系。
  5. 装载程序,建立虚拟地址与程序存储空间之间的映射关系。
  6. 执行

参考资料

《Unix-Linux编程实践教程》第4章

https://en.wikipedia.org/wiki/X86-64


Linux中的内存管理
https://ysc2.github.io/ysc2.github.io/2023/11/12/Linux中的内存管理/
作者
Ysc
发布于
2023年11月12日
许可协议