内存的分段和分页

分段

定义:

把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间

内存的分段和分页_第1张图片
如上图所示:
A程序需要10M的内存,假设一个地址从0x00000000到0x00A00000的10MB大小的虚拟空间,然后从实际物理内存中分配一个相同大小的物理地址,假设为0x00100000开始到0x00B00000结束的一块空间,然后我们把两块相同大小的地址空间一一映射,即虚拟空间中的每个字节对应于物理空间的每个字节。


分段的作用:

做到了地址隔离,同时,对于每个程序而言,不管它被分配到物理地址的哪一个区域,对于程序来说是透明的,它不需要关心物理地址的变化,只需按照虚拟地址来寻址。

存在的问题:

分段没有解决的问题是内存使用效率的问题,其对内存区域的映射是按照程序为单位,如果内存不足,被换入换出到磁盘的都是整个程序,势必造成大量的磁盘访问操作,从而严重影响速度。


分页

定义:

把地址空间人为的等分成固定大小的页,每一页的大小由硬件决定,或硬件支持多种大小的页,由操作系统决定页的大小。

Intel系列的处理器支持4KB、2M、1G(DPDK使用的大页内存)大小的页,同一时刻只能选择一种大小,所以对整个系统来说,页是用来固定大小的。基本上所有PC上的操作系统都使用4KB大小的页。

内存的分段和分页_第2张图片


如上图所示:

假设两个进程Process1和Process2,它们中部分虚拟页面被映射到物理页面,有部分却在磁盘中。图中的线表示映射关系,其中Process1的VP0和Process2的VP2映射到相同的物理页,实现了内存共享(进程间通信的方式???)

Process1的VP2和VP3不在物理内存中,当进程需要用到这两个页的时候,硬件会捕获到这个消息,即所谓的页错误(Page Fault),然后操作系统接管进程,负责将VP2和VP3从磁盘中读取出来并且装入内存。同时为物理内存中的页与VP2和VP3建立映射关系。



你可能感兴趣的:(linux)