前言
在Linux中,新创建的进程都拥有独立的虚拟地址空间。为深入多进程多线程的理解,了解虚拟地址空间分区十分有必要。
一、概念
- 虚拟地址空间分为4G空间,其中1G为内核区,3G为用户区。
- 虚拟地址空间的地址从0开始,且该地址是虚拟的。但是通过CPU中的内存管理单元MMU(Memory Management Unit),可以将进程的虚拟地址空间中映射到磁盘上。
二、为什么不直接加载物理内存?
- 每个进程的地址相互不隔离,存在安全风险。若有些进程越界修改了其它进程的数据,那么就会导致某些功能实现错误。
- 效率低下。若物理内存不够大,那么一般就会将不常用的进程拷贝到磁盘的交换分区中,而对于数据量较大的进程,这种拷贝时间长、效率低。
- 进程中的数据地址不确定。由于物理内存是动态变化的,我们无法确定内存现在的地址情况。
三、分区
虚拟地址空间的分区如下图(借鉴爱编程的大丙)所示: