Linux-内存管理子系统

Linux-内存管理子系统

内存管理子系统职能:

1. 管理虚拟地址和物理地址的映射;2. 管理物理内存的分配

虚拟内存空间

空间分布:

1. 用户空间 如 0-3G地址空间

被用户进程所使用与内核的直接映射区使用的是同个内存区域。

2. 内核空间

2-1. 直接映射区(3G-3G+896MB),896MB以下为物理内存的低端内存,896MB以上为物理内存的高端内存;在直接映射区中,3G对应物理内存0地址,3G+8         96MB对应物理内存的896MB地址

2-2. Vmalloc区:既可以访问低端内存也可以访问高端内存

2-3. 永久内核映射区:访问高端内存

2-4. 固定映射的线性地址:访问一些寄存器等

虚拟内存---->物理内存(以二级页表为例)

 

物理内存分配

假设物理内存空间为拥有50个座位的电影院,电影院老板欲邀请人坐满该影院,在影片播完前不能有空位和打瞌睡的人出现,此时邀请的人数必然应该大于50位,因为中途可能会有人离座或者打瞌睡。这就可以类比为什么需要虚拟内存这个概念了,为了最大程序地利用好这个电影院的50个座位(物理内存),允许启动的进程应该大于50个(虚拟地址),当影院中有人离座或者是有人打瞌睡了,在影院外的人便可以进入影院填补这个空位。而分配是由电影院(MMU)来进行的。

 

一般用户空间的进程在一开始并不给其虚拟内存映射物理内存,而是在当使用到该虚拟内存的时候,再通过请页异常来分配物理内存,而内核空间中通过Vmalloc分配的虚拟地址也是如此,只有内核空间中的Kmalloc分配区才会在一开始的时候通过空闲物理内存池中选出物理内存来与虚拟内存映射起来

Tips:

1. 虚拟内存大小由硬件来决定,32位系统中虚拟内存大小为4G

2. 32位内核中用户进程可访问的内存最大可达3G,内核可访问所有物理内存

3. 64位内核中可访问的虚拟内存最大可达2^64,此时只要物理内存大小不超过内核地址空间范围则内核地址空间可以采取直接映射的方式,内核可以访问所有的物理内存

猜你喜欢

转载自blog.csdn.net/yedushu/article/details/82714476