1. 段式虚拟内存
将整个内存空间可以划为若干个段,这种把程序内存空间按照逻辑意义划分为多个段,每段有段名,段的长度不定(如:代码段、数据段、堆栈段)的方式就是段式内存空间。
段氏程序内存空间 |
---|
堆栈段 |
数据段 |
代码段 |
… |
哪如何表示段式内存空间的一个地址呢?
虚拟地址(VA) = 段基地址(BA) + 段内偏移量(S)
在32位linux系统中,每个进程独占4G的虚拟内存空间,每个进程的内存空间都是独立的,进程是隔离的。
进程需要运行在物理内存上,但物理内存有限,无法为每个进程都分配4G的物理内存空间。为了解决该问题,需要将进程的虚拟内存按需加载到物理内存上。
段式映射的缺点:
按照段式地址表示,当用到某个段时,需要将整个段加载到物理内存上,这样将占用大量的物理内存,而在小的时间片内,进程只用到其中一小段内存空间,因此将整个段的内存加载到物理内存中会导致利用率低。为了提高物理内存空间利用率,引入页式虚拟内存。
2. 页式虚拟内存
页式虚拟内存,是将程序的内存空间分成一个个的页,每个页的