ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

操作系统——多级页表与快表

2021-10-01 19:00:58  阅读:384  来源: 互联网

标签:逻辑 快表 多级 4MB 查找 内存 目录 页表


为了不浪费更多的内存,页面尺寸是越小越好,这样造成的内存碎片的长度就很小。但页面尺寸越小,同样的内存分区时所需要的页表的个数就越多,页表占用的空间也就越大。

一般情况下,操作系统将页面尺寸设置为4KB,相较于操作系统能使用的内存来说,这是很小的。页表是由页表项组成的,每个页表项记录逻辑页放入了哪个物理页框,因此每一个逻辑也都需要一个页表项来记录信息。譬如32位程序使用的逻辑地址是32位的,所以最大的逻辑地址是让2^32,每个页面大小为4KB(2^12),这样就有2^20个逻辑页,每个逻辑页需要一个页表项来记录信息,因此32位逻辑地址需要2^20=1M个页表项,一般需要4B空间来保存一个页表项,这样就需要4MB的空间,而一个进程需要4MB的页表空间,一个操作系统中可能同时并发处理100个进程,这样就需要占用400MB大小的空间,这是不可接受的。

如此大的页表中,其实可能只有很少的页表项会被用到,通常的程序比如ls都很小,只有几千个字节,只会用到几个逻辑页。即使对于很大的程序来说,由于程序本身具有的顺序结构、循环结构、函数调用等因素,因此一段时间内执行的指令地址(PC)总在一个局部变化,这个局部性会直接影响到操作系统及计算机系统的很多设计。

一个直观的解决方法就是将页表项中没有记录页框号的项去掉,这样就减小了页表的大小。但这样做就会导致页号的不连续,页号从连续的(0,1,2,3)变成了(0,1,3),这会导致查找的时间代价增大。

给定一个逻辑页号,要查找该页号对应的页框号,就需要和也表中存储的逻辑页号进行比较,即使是使用较快的折半查找方法,也需要比较O(logT)次,T是页表项数量。,假设T=1000,那么就需要约10次页表项比较。这意味着没进行一次地址转换,都要伴随着进行10次额外的页表访问,即10次内存访问,内存的使用效率下降了90%。

因此,我们就需要用多级页表来帮助我们在不使页号断开的情况下,达到隐藏部分页表项的目标。

 类似于一本书的目录,页表项就相当于目录中记录每一页内容的节目录,而目录除了节目录之外还设置了章目录,章目录下是节目录。比如我们要查询第四章中的每一页,那么我们只需要看一下前三章的章目录,发现并不匹配,之后查找第四章下的节目录,对比找到所需要的页表项。这种情况下就省去了对前三章中页表项的比较,效率大大提高。

两级页表结构就是引入了页目录表,每个页目录向下有多个页表,首先根据页目录表查到对应的页目录项,再找到对应的页表,再从页表中找到页表项。

 如图所示的两级页表,其所能查询的空间为0MB~4MB、4MB~8MB、(4GB-4MB)~4GB,共计12MB的空间,如果是单级页表的话,就需要1M个页表项,占用内存是4MB。但如果采用如上图所示的两级页表,要存放1K个页目录项和3K个页表项,占用内存是16KB,远低于4MB。

虽然多级页表引入页目录之后,虽然可以降低存储页表造成的空间代价,但页目录的引入也让地址转换时间变长。如果只有页表,只查找一次就可以完成地址转换,而现在要查找一次页目录表,然后才能查找页表,所以需要查找两次,如果是4级页表,地址转换的时间效率就变成了原来的1/4.

变换旁查缓冲器(TLB)的引入就是为了缓解这个问题。TLB也就是快表会将我们常用的逻辑页映射关系缓存起来,那么现在的地址转换过程就是:先查快表,如果命中很快就能获得物理页框号,如果未命中,则查找页目录表、页表,并更新快表。

我们对分页机制进行一个总结:

(1)将物理内存分成页,以页为单位进行内存分配,可以解决内存碎片问题造成的空间浪费。

(2)一旦分页胡,需要存放页表来完成地址转换过程。

(3)采用多级页表可以降低存放页表造成的空间开销。

(4)采用快表来降低多级页表的时间开销。

(5)最终形成结合快表和多级页表的分页机制,时间和空间开销都表现良好。

 

 

标签:逻辑,快表,多级,4MB,查找,内存,目录,页表
来源: https://blog.csdn.net/m0_56561130/article/details/120575755

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有