0 概述
进程是操作系统进行资源分配的最小单位,而内存是进程运行必不可少的资源。
现代操作系统为每个进程分配独享的内存空间,这个独享的内存空间只是虚拟内存空间。
每次访问内存空间的某个地址(虚拟地址),都需要把地址翻译成实际物理内存地址。
进程要知道哪些虚拟地址上的数据在物理内存上,哪些不在;还有存放在物理内存上的位置,需要用页表来记录。
正因为每个进程都有一个自己的页表,使得相同的虚拟地址映射到不同的物理内存。每当切换到另一个进程时,就要通过设置MMU的某些寄存器来设置这个进程的页表,然后MMU就可以把CPU发出的虚拟地址转化到物理地址了。
1 虚拟内存地址空间布局介绍
32位模式下它是一个4GB的内存地址块
- 每个进程看到的地址空间都是一样的
- .text 都是从 0x80048000开始
- 内核地址空间都是 0xC0000000 ~ 0xFFFFFFFF
- 用户栈都是向低地址增长
- 堆都是向高地址扩展
1.1 0x00000000 ~ 0x80048000
不能给用户访问,这里面是一些C运行库的内容,访问会报