虚拟内存相关知识
文章只作为个人记录,准确性存疑,建议谨慎看待,不保证正确性
主要由一个过程进行展开:
无视掉图中的话,基本的操作就如上图所示。
- 编译器将代码文件编译成汇编语言,每条代码都会对应几个数据地址和指令地址(这些地址涉及到虚拟地址,等会再说)存入RAM内存中。
- CPU会读取内存的指令地址存入程序计数器(读取过程等会再说),根据程序计数器中的指令地址取相应的指令,同时数据寄存器取相应的数据地址,传入到ALU算数逻辑单元中进行计算
- 计算完毕后,将数据存回数据寄存器中,该数据会存放在相应的地址中。
那么问题来了,内存地址就那么大,每个程序在运行的时候,都需要自己的一些运行空间,如果直接在物理内存上操作的话,难免会造成内存不足的情况,所以我们需要对内存进行管理,这种管理方式我们叫做虚拟内存。
1、内存地址空间的内部是什么东西?
内核使用mm_struct来表示进程的地址空间,比较重要的内部结构如下:
- mm_user 记录使用该地址的进程数目(适用于多线程使用同地址的情况,可以标记出多少个线程使用了相同的地址)
- vm_area_struct 内存区域