Linux内存管理 - 大页 (一)
一. 内存映射和页表
我们通常说的内存容量, 指的是物理内存, 只有内核才可以直接访问物理内存。 进程并不可以
Linux内核给每个进程都提供了一个独立的虚拟地址空间, 并且这个地址空间是连续的, 这样, 进程就可以很方便的访问虚拟内存。
虚拟地址空间的内部又被分为内核空间和用户空间两部分。 不同字长的处理器, 地址空间的范围页不同。
* 并不是所有的虚拟内存都会分配物理内存, 只有那些实际使用的虚拟内存才分配物理内存, 并且分配后的物理内存, 是通过内存映射来管理的。
二. 页表
为了完成内存映射, 内核为每个进程都维护了一张页表, 记录虚拟地址和物理地址的映射关系。
页的大小只有4KB, 但是当物理内存很大时, 页表就变得非常大。
三. 页表的简单工作原理
32位系统下, 页大小为4K
- 目录表: 用于索引页表的数据结构。 存储目录项。 每个目录项指向一个页表
- 页表: 用来存放物理地址页的起始位置 (页表项)
- 页表项: 每个页表项指向4K的物理内存页。