首页 > 编程知识 正文

段页式存储管理访问几次内存,避免使用一级页表

时间:2023-05-04 11:30:37 阅读:163096 作者:2980

简而言之,页面表是存储物理页面地址的表。 据了解,当前程序使用的是虚拟内存,CPU在执行指令和获取数据时使用的是虚拟地址。 为了能够从内存中检索数据,必须将虚拟地址转换为物理地址,虚拟地址到物理地址的映射关系保存在页表中。 每个进程都有自己的页面表。

下图显示了两个进程以及它们各自的页表和物理内存之间的对应关系。 这里假设页面大小为4K,32位地址总线进程的地址空间大小为[2^32]4g。 这时,页表项目是4G/4K=1048576个,各页表项目是1地址,占用4字节,1048576*4(b ) ) 1024 )对应于各页表项目的映射也就是说,几页的映射就足够了。 如下图所示,过程1的页表只使用了3页,0、1、1024,剩下的1048573页的表项为空。 这导致了巨大的浪费,为了避免内存的浪费开发了计算机系统

首先看下图。 这是与上图流程1对应的两阶段页面表。 首先,计算以下两个阶段的页表的内存消耗。

一级页面表占用=1024 * 4 B=4K,

2级页面表占用=(1024*4b ) * 2=8K。

的占用情况共计12K,与一级页表4M相比,节约了99.7%的内存占有量。

让我们看看接下来的两级页表为什么可以节省这么大的内存空间。 与上图中一级页表的一对一关系相比,两级页表中的一级页表项是一对多关系。 这里是1:1024。 这样,就需要1048576/1024=1024个一级的页面表项目。 相当于将上图的单级页表分割为1024份。 第一级页面条目PTE0指示虚拟地址页面0至0~1023,而PTE1指示虚拟地址页面1024至2047。 如果对应的1024个虚拟地址页中存在任何实际映射,则主页表条目指向辅助页表条目,辅助页表条目与虚拟地址页一一对应。 在上图中,流程1的虚拟页面0、1、1024存在映射,0、1虚拟页面属于此处的PTE1、1024。 如果一级页表条目为null,则表示未使用对应的1024个虚拟页。 因此,不需要2级页表条目,可以节省空间。 当然,如果虚拟地址页被完全映射,则多级页表的占有=一级页表项目(1024 * 4B )二级页表项目) 1024 * 4B )=4M 4K,比一级映射多4K 因为,进程的地址空间很少被完全映射。 由于节省了大量未映射的页表条目,页表空间大幅减少。

参考资料:

1. 《深入理解计算机操作系统》 Randal E.Brayant

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。