32位机有0---4G的虚拟内存地址空间
(32位共有2^32 = 4x2^30个数,一个数对应内存中一个字节,故内存中共有4x2^30B=4G的地址空间)
虚拟内存各区的存储内容,如上的内存结构图所示,
.text :存储代码段
.data :存储数据,定义的变量在此处
heap:堆,由低地址向高地址,malloc的空间在此处
stack:栈,由高地址向低地址,函数及函数里定义的变量在此处
以上各部分占用0-3G,,称为用户空间
3G-4G称为内核区(内核空间)
其中,PCB(进程控制块)位于此地址空间中;
0-4G的虚拟内存空间,是在程序运行,进程产生的时候,才会有的。
但虚拟内存并不是真实存在,程序、数据其实都是存在物理内存的。物理内存并一定有4G大小。
所以,就需要将虚拟内存与物理内存进行对应,媒介就是MMU
例如:0x8123a300 int value = 1; 0x8123a300 就是虚拟内存地址;
写程序的时候,使用的是虚拟地址。
MMU的作用:
1)虚拟地址与物理地址映射
2)设置修改内存访问级别,权限高的能访问内核区,权限低的访问用户区。