为何需要段页式内存管理

为何需要段页式内存管理

为何需要虚拟内存空间?

虚拟内存是计算机系统内存管理的一种技术,它使得进程认为它拥有连续可用的内存,而实际上在物理内存中,它通常被分割成多个内存碎片,还有部分暂时被交换到外部磁盘上。

每个进程都有独立的虚拟内存空间。虚拟内存空间的存在,对于操作系统来说,使得每个进程运行时互不干扰;对于硬件来说,不要求物理内存存在连续的一段空间,可以更好地利用内存碎片;对于每个进程来说,可以得到逻辑地址固定的内存区域,而不必关心物理地址的变化。

为何需要段式内存管理?

这得从早期的8086架构说起,早期的8086具有20根地址线,可以访问1M大小的物理内存,但是寄存器只有16位,若只利用16位的地址则只能访问到64K大小的内存,则将造成巨大的浪费。

那么如何将16位的寄存器产生20位的地址呢?聪明的工程师决定将段寄存器中的16位左移4位然后加上偏移地址,即段基址*16+偏移地址。

分段寻址机制在一定程度上解决了以前程序无法重定位,地址必须写死在程序中的问题。

为何需要页式内存管理?

在分段寻址中,物理地址=段基址*16+偏移地址,则段的大小至少为64KB,若寄存器位宽更大,则每一个段的大小更大。每个段会映射到物理内存中一个连续的内存片段,这会导致那些较小的内存碎片无法被利用,且在内存与磁盘之间以段为单位交换开销较大。

而在段式管理的基础上加上页式内存管理则能够很好地解决这个问题。页式内存管理使用页目录、页表来找到对应的页面,然后加上在这个页面的偏移地址即可得到物理地址。一般来说,每个页面的大小为4KB,比段式管理中的每个段大小小很多。这样的页式管理使得连续的虚拟空间映射到不一定连续的物理内存,提高内存空间的利用效率。

在这里插入图片描述

地址转换

逻辑地址–>线性地址–>物理地址

x86架构虚拟内存地址转换

猜你喜欢

转载自blog.csdn.net/qq_38600065/article/details/105327512