18.多级页表与快表

【README】

1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;

2.操作系统内存管理:分页机制+多级页表+快表来实现;


【0】分页的问题

1)分页的问题(大页表):为了提高内存利用率,页应该小,页小了,页表项就多了,页表就大了;(页是4K,每个段最多浪费4K)

  • 问题:页表大了不利于查找,且大页表占用内存多

【例】页表结构与大页表

页号

页框号

保护

0

5

R

1

1

R/W

2

3

R/W

3

6

R

  •  如总内存大小2^32=4G,每页大小4K,则页表项数量=4G/4K=1M 即100万个页表项;
  • 又每个页表项占用4个字节,所以含有100万个页表项的页表占用的总内存为 4M;
  • 又若系统并发执行10个进程,每个进程页表项4M,所以需要40M;那如果系统并发100个进程,则需要400M存储页表,这会导致内存利用率低

【1】大页表的解决方法1(只是尝试):只存放用到的页

1)页表只存放用到的页(页表号不连续

实际上,大部分逻辑地址不会用到;
把不会用到的逻辑页号从页表中删除,从而减少了当前进程的页表大小;即,用到的逻辑页才有页表项;

 2) 用到的逻辑页才有页表项
因为删除了不使用的逻辑页号,所以页号是不连续的(页号0 1 3 )。如下。

页号

页框号

保护

0

5

R

1

1

R/W

3

3

R

在计算页基址时,需要从页表中根据页号查找页框号,进而计算出该页的物理内存基址。
3)如何根据页号查找页框号?

  • 顺序查找,折半查找都比较慢;
  • 如总内存大小为4M,页表项个数为4M/4K=1K;采用顺序查找需要1K次,采用折半需要 log(2^10)=10次;也就是说每执行一条指令都需要10次访存,1次主存访问耗费约200ns,则10次需要2us;这会严重影响指令执行速度

【小结】

  • 页号必须要连续,这样才可以立即定位到页表项。如页表项基址+3就可以得到页号为3的页表项(而不用顺序或折半查找);
  • 这又回到了刚开始的问题,即32位地址空间 + 4K页面 + 页号必须连续 => 导致了2^20个页表项 => 导致了大页表占用过多内存,造成浪费;

所以解决方法1中的尝试是失败的

 进一步的,我们得出需要解决的问题是:

  • 页号连续,且页表占用内存少;
  • 用书的章目录和节目录来类比思考;

【2】 大页表的解决方法2(尝试):多级页表

【2.1】多级页表

由单级页表转为多级页表;
即多级页表,页目录表(章)+页表(节);

1)多级页表具体分配
指令中的逻辑地址结构如下:

10 bits

10 bits

12 bits

页目录号

页号

Offset偏移量

  • 步骤1:根据页目录号从页目录表中查询到页表基址;
  • 步骤2:根据页号从页表(通过页表基址确定)中查询到页框号(物理内存页号);
  • 步骤3:根据页框号可以计算出物理内存页基址(具体是页框号乘以4K),用页基址加上逻辑地址偏移量得到物理内存地址;

因为页目录号,页号都是连续的,所以页目录号及页号的查询时间复杂度是O(1)

2)利用多级分页的地址翻译步骤 

【说明】图解说明:

  • 说明1)1个页目录项(章)指向1k个内存页,每个内存页4K,所以1个页目录项指向4M内存;所以1K个页目录项就可以映射容量为4G的内存空间;
  • 说明2)页目录表中,进程使用了3个页目录项,即使用了4G内存中的12M内存;页目录表与页表占用的总内存大小=1K*4 + 3 * 1K*4 = 16K;(每个页目录项与每个页表项均占用4个字节,因为32位地址空间)
  • 说明3)需要注意的是,如果内存使用单级分页,需要4G/4K=1M个页表项,每个页表项占用4个字节,则单级分页下的页表占用内存大小为4M;

【小结】

  • 在内存总大小4G的基础上,占用12M内存的程序,采用多级分页时页表占用16K 远远小于 单级分页时的4M

 

 


【2.2】多级页表优缺点

1)多级页表优点:

  • 多级页表既保证了页表表项的连续性,使得查找起来非常快(时间复杂度O(1))
  • 保证了内存中存储的页表少了,减少了内存浪费,提高了内存使用率;

2)多级页表缺点

  • 多级页表增加了访存速度,特别64位系统(因为64位系统的多级页表有5,6级);  
  • 多级页表,每增加一级,访存次数就会加1; 所以 64位系统的多级页表访存次数约为5,6次;
  • 多级页表的级数越多,访存越多,效率越低(级数越多,类比书的多层目录),这会造成指令执行效率低;

针对多级页表缺点,引入了快表


【3】 快表(指的是TLB寄存器)

1)快表:

  • 也叫TLB,TLB是一组相联快速存储,是寄存器;
  • TLB,即Translation lookaside buffer,又称为翻译后备缓冲区寄存器;
  • 通过TLB可以快速找到最近使用的逻辑页映射的物理页号;  

2)TLB存储的内容(记录的是最近使用的逻辑页映射的物理页号)如下:

有效

页号(无序)

修改

保护

页框号(物理页号)

1

140

0

R

56

1

20

1

R/W

23

0

19

0

R/W

29

1

21

0

R

43

因为寄存器访问速度快,可以设计 TLB寄存器的硬件逻辑,使得可以一次访存就可以根据页号查询出页框号(物理页号),最后得到物理地址;

 


【3.1】基于快表的地址翻译

1)基于快表的地址翻译步骤

  • 步骤1: 根据逻辑地址的页号,查询一次TLB寄存器就可以得到页框号(物理页号);
  • 步骤2: 若快表TLB不存在页框号(未命中),则查询多级页表,并把查询结果送入TLB存储作为缓冲用于后续地址翻译;

小结:快表+多级页表合在一起形成的结构,保证了查询(翻译物理地址)时间快,页表项连续,减少了内存资源浪费;

2)这也充分体现了操作系统折中思想;通过把一些技术组合在一起,使得访问时间不错,空间利用也不错;具体是:

  • 多级页表是减少了空间浪费,降低了空间复杂度,访问时间还可以,但还想提高页表查询速度;
  • TLB是提高了页表查询速度,降低了时间复杂度
  • TLB可以弥补多级页表(特别64位系统)访存耗时,慢的缺点;

【3.2】TLB如何保证高命中率

1)TLB得以发挥作用的原因:保证高命中率;

 【说明】公式说明:

  • 有效访问时间等于命中时的访问时间 + 没有命中时的访问时间;
  • 上图有效访问时间式子中的符号解释:
  • HitR 表示 命中率;
  • (1-HitR)表示 未命中率;
  • TLB 表示访问寄存器的时间;通常为10ns (当然图中给出的是20ns,数量级相同)
  • MA表示访问内存的实际; 通常为 200ns  (图中给出的是100ns,数量级相同)
  • 可以看到: 命中率越高,则访问时间才接近于1次访存的时间

2)如何提高TLB命中率  

  • TLB越大越好, 但TLB很贵,折中处理是 TLB可以存储的页表项数量范围是 [64,1024];

3)为什么 TLB存储的页表项数量可以在 64~1024之间 ?
原因:

  • 程序的地址访问存在局部性
  • 因为访问局部性,所以程序用的是固定的那几个逻辑页号;
  • 最近访问的逻辑页与物理页映射关系会送入TLB存储,所以TLB的命中率会很高
  • 补充:程序多体现在循环,顺序结构;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle入门(十三A1)之替换变量,变量名,变量名

转载自 Oracle中的替换变量,&变量名,&&变量名替换变量(仅用于SQL *Plus或者用于原理和SQL *Plus相同的开发工具):临时存储值利用它可以达到创建通用脚本的目的利用它可以达到和用户交互,故在SQ…

常用API接口签名验证参考

项目中常用的API接口签名验证方法: 1. 给app分配对应的key、secret2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下:  a. 按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalu…

19.段页结合的实际内存管理

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.段与页 段: 用户程序采用分段结构;页: 操作系统采用分页机制管理物理内存;段页结合:程…

python中变量怎么定义_python中的变量的使用定义以及使用规则

本篇包括14章内容,系统介绍了Python语言的基础知识。内容包括Python基础语法、数据类型和类型转换、运算符、流程控制(分支结构循环结构)、数据结构(列表生成式)、函数的定义及使用、异常处理、迭代器生成器、偏函数、python中的模块和包、python标准内置库os以及使…

Oracle入门(十二G)之序列

序列(SEQUENCE)序列是一数据库对象,利用它可生成唯一的整数。由于它属于可共享对象,所以允许多个用户访问。一般情况下,序列用于创建主键值。 序列号的存储和生成与表无关。因此,同一序列可以用于多个表。 …

20.内存换入-请求调页

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.操作系统关于内存管理的核心是基于虚拟内存的分段和分页管理; 3.而用内存换入和换出实现虚拟内存 ; 【1】虚拟内存 1&…

机器人点焊枪接线_用于焊接机器人焊枪工具点及工件坐标系标定装置及方法与流程...

本发明属于机器人焊接技术领域,涉及一种用于焊接机器人焊枪工具点及工件坐标系标定的装置及方法。背景技术:工业机器人是实施自动化生产线、工业4.0、智能制造车间、数字化工厂、智能工厂的重要基础装备之一。而据不完全统计,全世界在役的工业…

采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

前言 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这是一个对Entity Framework进行扩展的类库. 完全支持EF 5.0/6.0, GitHub地址 https://github.com/loresoft/EntityFramework.Extended, 最后一次更…

Oracle入门(十二J)之同义词

转载自 oracle同义词 一、创建同义词 --普通用法 create [or replace] [public] synonym [schema.] 同义词名称 for [schema.] object [dblink];--创建专有(私有)同义词 create synonym sysn_test for test;--创建公共同义词 create public synonym publ…

21.内存换出

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.有内存换入就有内存换出。 3.因为物理内存空间有限,n次(第n页)换入后导致物理内存用完,则n1次&…

antd vue表单上传文件_vue+axios+antD的上传图片踩坑

一开始使用了实验室大佬封装的axios结合formData进行图片上传,然而传递给后台的formData是空的,打印出来的form又确实是存在的,百度搜了一大推,于是借鉴了百度的做法。1.引入axios import axios from ‘axios‘;2.创建一个新的axios,const …

移动web开发调试工具AlloyLever介绍

简介 web调试有几个非常频繁的刚需:看log、看error、看AJAX发包与回包。其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持。如你所见: 特征 点击alloylever按钮之间切换显示或隐藏工具面板Console会输出所有用户…

Oracle入门(十三A2)之单行函数

一、函数介绍 功能:改变数据输出形式或进行数据运算输出二、单行函数函数格式 函数说明abs(n) 返回n的绝对值floor(n) 返回小于等于n的最大整数ln(n) 返回n的自然对数&#xff…

22.IO与显示器

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.显示器是输入型外设; 3.本章主要内容是讲 显示器是如何被驱动的;或操作系统是如何让用户来使用显示器的; 4.Pri…

d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?

(这是D3的数据)主板芯片组IntelHM76CPU系列英特尔酷睿i53代系列CPU型号Intel酷睿i53210MCPU主频2.5GHz最高睿频3100MHz总线规格DMI5GT/s三级缓存3MB核心类型IvyBridge核心/线程数双核...(这是D3的数据)主板芯片组Intel HM76CPU系列英特尔 酷睿i5 3代系列CPU型号Intel 酷睿i5 32…

[开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

一 ,为什么要造轮子 有兴趣的同学可以去各大招聘网站看一下爬虫工程师的要求,大多是JAVA,PYTHON甚至于还有NODEJS,C,再或者在开源中国查询C#的爬虫,仅有几个非常简单或是几年没有更新的项目。从我看的一些文…

Oracle入门(十三B)之高级查询(上)

下章:Oracle入门(十三C)之高级查询(下) 一、多表格查询 (1)定义将两个或两个以上的表格,按照一定的关系连接起来进行查询。(2)多表格查询分类 连接查询嵌套查…

23.键盘

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.键盘 是输出型外设; 【1】外设工作原理 【图解】外设工作原理: 步骤1:Cpu向外设控制器发出指令(如…

like左匹配索引失效_Mysql索引失效的情况

一、前提条件1、创建三张测试表:DROP TABLE IF EXISTS user;CREATE TABLE user (idint(11) NOT NULL,name varchar(25) DEFAULT NULL,ageint(11) NOT NULL DEFAULT 0,update_time datetime DEFAULT NULL,first_name varchar(25) DEFAULT NULL,last_name varchar(25)…

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心。最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示&#x…