详解多级页表与快表

【操作系统】-- 基本分页存储管理(基本地址变换机构、具有快表的地址变换机构) 考虑支持多道程序的两种连续分配方式:1、固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率低。2、动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”处理,但是带价高。如果允许将一个进程分散装入不相邻分区中,便可充分利用内存,而不需再“紧凑”,产生了非连续分配方式。连续分配方式:为用户进程分配的必须是一个连续的内存空间。非连续分配:为用户进程分配的可以是一些分散的内存空间。非连续分配三种方式:基本分页存储管理、基本分段存储管理、段页式存储管理。分页存储管理将内存空间的逻辑地址(相对地址)空间分成若 阅读详情

多级页表与快表

什么是页表

页表就是一个用于将虚拟地址转换为物理地址的工具。

转换的公式就是: 通过页表先找到页,在使用页内偏移地址找到最终对应的实际物理内存

页表带来的问题

在页式内存管理中有两个重要的问题

  1. 虚拟物理地址到物理地址转换要快
  2. 当虚拟空间很大的时候页表也会变的很大

所以为了解决第一个问题就有了快表

所以为了解决第二个问题就有了多级页表

快表

快表一般存放在 CPU 内部的高速缓冲存储器 Cache。

快表可以直接理解为页式内存管理的高速缓存(Cache)

快表的原理是基于局部性原理、

  • 时间局部性: 也就是某个数据被访问过那么这个数据不久很可能再次访问
  • 空间局部性: 就是某个存储单元被访问过,那么它周围的存储单元很有可能被访问

快表的作用:加速虚拟地址到物理地址的转换速度

快表中存放着页表的一部分甚至全部内容

快表作为页表的高速缓存器(Cache),作用与页表的本质作用一致,只不过提高了页表的访问速度

原理:如果用页表做地址转换,则读写数据内存时,CPU要访问内存两次。当使用快表,有时只要访问一次高速缓存器,一次主存,这样就可以加速查找并提高指令执行速度

使用快表之后的地址转换流程:

  1. 根据虚拟地址中的页号查找快表
  2. 若该页在快表中,则直接从快表中读取对应的物理地址
  3. 若该页不在快表中,则访问内存中的页表,再从页表中读取物理地址,同时将该页表中的物理地址映射到快表中
  4. 当快表填满时,又要增加新的页表,就按照一定的淘汰策略删掉一页

多级页表

为了提高内存空间利用率,页应该小,页小了那么页表就大了

如果只有一级页表那么4G的虚拟地址空间就需要4M的连续内存来存放页表,开销太大

这时候就出现了多级页表,用来节约内存

使用二级页表的画,就只需要一个4k的页表来管理1024个二级页表,这时候你会有疑问怎么消耗的内存更大了,

其实不然,这里的内存不是都要放在内存里面的,根据局部性原理只有一级页表在内存,二级页表都存放在外部磁盘。只有当缺页中断的时候才会调用进去内存中

三级页表转换法

  1. 逻辑地址转物理地址

段起始地址+段内偏移地址=线性地址

一个32位的线性地址被划分为三部分

  • 10bit 页目录索引
  • 10bit 页吧表索引
  • 12bit 页内偏移量
  1. 线性地址转物理地址

从cr3(页表寄存器)中拿出页目录地址

页目录地址+页目录索引=页表地址+页表索引=页地址+业内偏移=物理地址

参考

深入理解操作系统之——分页式存储管理

页式内存管理中的快表和多级页表

虚拟内存,页表,快表,多级页表,倒排页表 虚拟内存尽管基址寄存器和界限寄存器可以用于创建地址空间的抽象,还有另一个问题需要解决:管理软件的膨胀(bloatware)。虽然存储器容量增长快速,但是软件大小的增长更快。需要运行的程序往往大到内存无法容纳,而且必然需要系统能够支持多个程序同时运行,即使内存可以满足其中单独一个程序的需要,但总体来看,它们仍然超出了内存大小。交换技术(swapping)并不是一个有吸引力的解决方案(换入换出耗时),... 阅读详情

相关推荐

计组+OS——虚拟存储器之页式存储实战:从原理到真题解析

本文深入解析计算机组成原理与操作系统中的虚拟存储器核心机制——页式存储。从虚拟地址与物理地址转换、页表与快表(TLB)的工作原理入手,结合经典考研与面试真题,手把手演示逻辑地址到物理地址的转换全过程,并探讨了多维数组遍历的局部性对性能的影响,帮助读者从原理到实战全面掌握页式存储技术。

weixin_29251131的博客 309

内存管理<原理篇>(五、页表和快表)

这一篇,介绍了页表和多级页表还有快表,再加上前面的分段,现在操作系统的内存管理已经出来了,下一篇就开始介绍段页结合的实际内存管理了。

酱油师兄的博客 1万+

使用循环神经网络预测温度

简介 本文以天气时间序列数据集为例,讨论如何使用深度学习模型预测未来天气温度。 使用的是由德国耶拿马克思普朗克生物地球化学研究所的气象站记录。 数据每10分钟记录一次,共记录14种不同的量,如气温、气压、湿度、风向等,原始数据可追溯到2003年,本例只使用2009-2016年的数据。 数据 下载并解压数据略。 加载数据: data_dir = r'E:\practice\tf2\temperature' fname = os.path.join(data_dir, 'jena_climate_2009_

guotianqing的博客 5282

存储管理

页式存储器管理 页 相对物理块来说,页是逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8KB。 例如:一个 32 位的操作系统,页的大小设为 2^12=4Kb,那么就有页号从 0 编到 2^20 的那么多页逻辑空间。 物理块 物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致。 例如:...

majju333的博客 3598

ubuntu20.04下dsp-slam的运行配置

DSP-SLAM:具有深度形状先验的面向对象的 SLAM

baidu_38431960的博客 3159

一文吃透 BMS:动力电池与储能共用的电池管控全架构详解

BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。

小帽子的博客 341

快表、页表和cache之间的关系

快表、页表和cache之间的关系全相联映射快表命中全相联映射快表未命中四路组相连映射 在32位操作系统中,一个地址对应32位2进制数,则能寻址到4GB(232)的地址。 而在linux内存管理中,内存以页为单位进行管理,一般情况下每页4KB大小, 4GB内存就有个4GB/4KB=220页。 所以可将一个32位的地址分为20位+12位。 前20位可以确定出地址在页中的哪一页,剩下的12位就可以确定出在这一页中的哪个位置。 反过来,若是知道了页内为12位,那每页大小就肯定为212=4KB了。 全相联映射

sparky的博客 2万+

蓝牙Channel Sounding为真正的距离感知赋能

1:工作原理蓝牙™信道探测使用两种经过验证的测距方法——PBR(PBR)和RTT(RTT),实现蓝牙设备之间的安全精密测距。

weixin_43720159的博客 807

多级分页系统解决了什么问题?又引入了什么新问题?

计算机考研-408-知识点梳理 操作系统 & 组成原理 多级分页系统解决了什么问题?又引入了什么问题? 多级页表是为了解决页表占用过多连续内存的问题,进一步将页表离散化,提高内存的利用率。多级页表是一种典型的“时间换空间”方法,增加了访存次数,降低了分页系统的性能。 ...

ccrick's blog 1210

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)

本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。

weixin_29062963的博客 561

操作系统内存管理简单知识点

操作系统内存管理基础1. 内存管理介绍2. 常见的内存管理机制3. 快表和多级页表4. 分页机制和分段机制的共同点和区别? 1. 内存管理介绍 操作系统的内存管理主要负责内存的分配与回收,以及地址转换(将逻辑地址转换成物理地址)。 2. 常见的内存管理机制 操作系统的内存管理机制分成连续分配和非连续分配两种。这里的连续和非连续指的是给用户进程分配的内存空间是否连续。 连续分配指的是为一个用户进程分配一个连续的内存空间,比如块式管理; 非连续分配指的是允许一个进程使用的内存在物理分布上是不相邻的,比如页式管

qq_37691334的博客 604

算法导论之线性规划

线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。 在一般线性规划问题中,最优化一个

医疗影像检索 2万+

别再死记硬背了!用‘找房子’的比喻,5分钟搞懂页表、快表和多级页表

本文通过‘找房子’的生动比喻,轻松解释计算机内存管理中的页表、快表和多级页表概念。页表如同房产中介的登记簿,快表(TLB)则是常用查询的小本本,而多级页表则像分级管理的物业系统,帮助读者快速理解这些抽象原理及其在实际系统中的应用。

weixin_30772105的博客 400

推理篇第3节:TensorRT基础——Builder、Engine、ExecutionContext生命周期

TensorRT模型优化与推理流程摘要 TensorRT是NVIDIA的深度学习推理优化器,通过Builder、Engine和ExecutionContext三阶段实现高效推理。Builder负责编译模型,执行图优化和kernel选择;Engine是优化后的推理计划;ExecutionContext管理运行时执行。编译期进行重量级优化(如算子融合、kernel调优),运行时快速执行。TensorRT 10.x引入新API,推荐使用buildSerialized方法。构建流程包括创建Builder、网络定义、

PeterPan的博客 503

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

操作系统-----第三章 内存管理

第三章 内存管理 文章目录第三章 内存管理@[toc]1. 基础知识(1). 逻辑地址和物理地址2. 内存管理的概念(1). 内存管理的内容(2). 覆盖与交换1). 覆盖技术2). 交换技术3. 连续分配管理方式(1). 单一连续分配(2). 固定分区分配(3). 动态分区分配4. 动态分区分配算法(1). 首次适应算法(2). 最佳适应算法(3). 最坏适应算法(4). 邻近适应算法5. 基...

Benjalin_76_84的博客 753

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

操作系统知识点总结

操作系统知识点总结(来源于javaGuide) 1.什么是操作系统 答: 操作系统是管理计算机硬件与软件资源的程序,是计算机的基石。 本质上是一个运行在计算机上的软件程序,用于管理计算机硬件和软件资源。 操作系统屏蔽了硬件层的复杂性。 操作系统的内核是操作系统的核心部分,她负责系统的内存管理、硬件设备的管理、文件系统的管理。内核是连接应用程序和硬件的桥梁,决定系统的性能和稳定性。 2.什么是系统调用 答:介绍系统调用之前,得先说一下用户态和系统态。根据进程访问资源的特点,我们可以把进程在系统上的运行分为

qq_41665826的博客 421

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

页式内存管理实战:从页表、快表到页面置换算法全解析

内存管理是操作系统性能的核心,页式内存管理通过将进程地址空间分割为固定大小页面,配合页表完成虚拟地址到物理地址的转换,解决了连续分配中的外部碎片与内部碎片问题。多级页表与TLB快表机制利用局部性原理显著提升地址转换效率,而页面置换算法如LRU、Clock直接决定系统在内存紧张时的表现。无论系统编程、嵌入式开发还是数据库性能调优,深入理解分页机制是排查缺页异常、抖动问题以及优化程序访问局部性的基础。从页表项标志位到地址翻译流程,再到缺页中断后的完整处理路径,系统梳理页式内存管理的核心机制与工程实践,帮助读者真

weixin_32932149的博客 164

【c++与Linux进阶】轻量化进程与虚拟地址和页表

本文介绍了Linux线程的基本概念及其与Windows线程的差异。主要内容包括: 线程定义:线程是进程内的执行分支,共享进程资源,Linux使用task_struct管理线程,线程是CPU调度的基本单位。 平台对比: Linux采用"轻量级进程"设计,复用进程结构体task_struct Windows严格区分进程(EPROCESS)和线程(ETHREAD)结构体 Linux线程创建开销小,Windows线程创建开销大 Linux线程特点: 线程间通信快速(共享全局变量) 线程崩溃会导致

2301_80127108的博客 451

Linux 线程:从虚拟地址空间到 POSIX 线程控制全解析

本文深入剖析Linux线程核心概念与底层实现机制。首先阐明线程作为进程内轻量化执行流的本质,分析其优缺点及异常处理;其次详解虚拟地址空间与分页管理机制这一线程运行的底层基石,包括页表、TLB等关键组件;通过对比进程与线程的资源分配差异,突出线程高效共享的特性;详细介绍POSIX线程控制API及线程ID的双重机制;最后给出C++线程封装实例。全文系统性地揭示了Linux线程从概念到实现的全貌,为开发高性能多线程程序提供理论基础和实践指导。

M1nat0_的博客 368

【操作系统】面试题汇总

???? 博客主页:⭐️这是一只小逸白的博客鸭~⭐️ ???? 欢迎 关注❤️点赞????收藏⭐️评论???? ???? 小逸白正在备战实习,会经常更新面试题和LeetCode题解,欢迎志同道合的朋友互相交流~ ???? 如果有问题敬请指正,记得点个关注哦! 回顾之前的文章: 【操作系统】常见面试题总结 目录一、操作系统概述1.1 系统调用 / 用户态和内核态1.2 说了用户态和系统态之后,那么什么是系统调用呢?1.3 那么如何从用户态切换到内核态呢?(仅需知道是这哪三种就可以了,其实一般只会问到举

一只小逸白 1326

18.多级页表与快表

1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;2.操作系统内存管理:分页机制+多级页表+快表来实现;1)分页的问题(大页表):为了提高内存利用率,页应该小,页小了,页表项就多了,页表就大了;(页是4K,每个段最多浪费4K)【例】页表结构与大页表页号页框号保护05R11R/W23R/W36R1)页表只存放用到的页(页表号不连续)实际上,大部分逻辑地址不会用到; 把不会用到的逻辑页号从页表中删除,从而减少了当前进程的页表大小;即,用到的逻辑页才有页表项; 2) 用到的逻辑页才有

PacosonSWJTU的博客 3848

【操作系统基础】页表 快表 多级页表

文章目录页表页面的大小页表特性PTBR--寄存器快表TLB 命中率基于页表的保护与共享多级页表 页表 为什么说分页的逻辑地址是一维的地址; 从下图我们可以看出,把一个程序分为等大的页面(这里每个页面大小假设4bytes),每一个页面的里的指令(假设每条指令大小为1bytes)都会有相对应的逻辑地址,都是从0开始算起的; 页表记录的主要信息就是:页框号和页面号的映射关系,页框号也就是物理地址,页面号也是逻辑地址的一部分; 上面的例子中:把程序分为了3个页面的大小,放入到内存中,其中#0页面放入到了f

呋喃吖的博客 1万+

操作系统学习笔记十一(基本分页存储管理方式)

1.基本概念 页:将一个进程的逻辑地址空间分成若干个大小相等的片 页框:将物理内存空间分成与页大小相同的若干个存储块 分页存储:将进程中的若干页分别装入多个可以不相邻的页框中 页内碎片:进程最后一页一般装不满一个页框,形成页内碎片 页表:实现从页号到页框号的映射 ...

zheng2780071070的博客 2482

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

为了不浪费更多的内存,页面尺寸是越小越好,这样造成的内存碎片的长度就很小。但页面尺寸越小,同样的内存分区时所需要的页表的个数就越多,页表占用的空间也就越大。 一般情况下,操作系统将页面尺寸设置为4KB,相较于操作系统能使用的内存来说,这是很小的。页表是由页表项组成的,每个页表项记录逻辑页放入了哪个物理页框,因此每一个逻辑也都需要一个页表项来记录信息。譬如32位程序使用的逻辑地址是32位的,所以最大的逻辑地址是让2^32,每个页面大小为4KB(2^12),这样就有2^20个逻辑页,每个逻辑页需要一个页表项来

m0_56561130的博客 3012

多级页表与快表

之前页表结构的不足 之前的页表结构看起来挺好的呀,有什么问题呢? 如果每个页的大小是4k,也就是2的12次方。如果是32位的地址话,也就是说,有2的20次方个页。 那么对应到页表,也就说页表应该有2的20次方个项。因为每个项表示的是一个内存地址,也就说一个项的大小是32位,也就是4个字节。 这样算下来,对应于一个32位的内存地址,一个页表应该4M大小。看起来还可以接受啊。 但注意,每个进程都有一个页表。看下,我的电脑现在有280个进程,也就说如果采用之前的结构,光页表结构就得占用280*4M=1120M,

子翊寒 2381
上一篇: 带你手撕单调栈(二)
下一篇: c++之malloc底层实现
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值