OS复习笔记ch7-3

承接上文我们讲完了页式管理和段式管理,接下来让我们深入讲解一下快表和二级页表

快表

快表和计算机组成原理讲的Cache原理如出一辙。为了减少访存的次数,OS在访问页面的时候创建了快表(Translation Lookaside Buffer ,简称TLB),包含最近使用过的页表表项,避免了反复查询处于内存中的页表。

image.png
如图所示,OS会先根据TLB是否命中决定是否访问在内存中的页表,如果命中就直接拿着快表表项组合已有的偏移量构成物理地址。反之,OS会继续访问页表找到对应的页表项,得到物理地址,然后将该页表项加入到快表中以备下次查询。如果快表和页表都没有找到,就会引发缺页中断,有关内容我们下一章节会详细叙述。

二级页表

首先,我们先思考一个问题,假设的是32位逻辑地址,页面大小为4kb,并且假设页表项大小为4B,那么一个进程最多有多少页,需要分配的页框占据多少空间?


页面大小是4KB,也就是需要12位表示业内偏移量,总共有32位逻辑地址,剩余20位组成页号,也就是一个进程最多有220个页,每个页对应一个页号,而一个页号对应一个页表项,则至少需要220 *4 = 2^22个字节的空间存放,即4GB的空间。
实际上,我们普通电脑的内存不过8GB、16GB,如果光是一个进程就干掉4GB,那显然是捉襟见肘的。同时,由于一个进程的页面是连续存放的,那么一个进程就要连续分配4GB/4Kb = 1024个页面,显然一次性给一个进程分配这么多页面也是不合理的。


实际上,进程不会一次访问所有的页面,而是只会访问特定的页面,所以我们不需要一次性分配所有的页面。为了解决进程页面必须连续存放的问题,我们采用解决进程在内存中连续存放的思路,使用二级页表,把页面存放离散化。

image.png

如图所示,我们已知页表是一种索引结构,进程有2^20个页也就是有0~1048575的页号,我们在此基础上分组,每1024个为一组,总共就是1024组,然后在每一组中的页号对1024取余,统一成0~1023。然后再在这1024组上建一层索引,也就构成了我们的页目录。

image.png
奇妙的是,按照1024划分,每一个二级页表刚好对应一个页框,而页目录表也是一个页框(1024*4B = 4KB)。也就是说,我们将原先连续的页面按照页框大小分组,然后在分组上建索引得到了一个新的页表——页目录表。

现在,我们查询就要分为两次:先查页目录表,对应的内存块号是存二级页表的内存位置,然后再查二级页表,二级页表中的内存块号就是实际访存的内存块号了。

与之对应,二级页表的逻辑地址结构部分,原先的前20位页号就要拆成一级页号和二级页号。
其中,查页目录表就是查一级页号对应的内存块号,然后根据该内存块号找到内存中对应的二级页表,然后根据二级页号查二级页表找到对应的内存块号,就是实际访存的内存块。
而一级页号总共是10位,因为总共有1024个二级页表,二级页号也有10位,因为每个二级页表有1024个页表项。

建立多级页表本质上就是建立多重索引。二级页表就是借助二重索引的迭代查询来实现对于一重索引的离散化。

举一个更具体的例子
image.png

假设我们的32位的逻辑地址如图所示,根据10+10+12的原则,一级页号就是0,二级页号就是1,页内偏移就是1023.
我们先在页目录表中查一级页号对应的内存块号3,再到与之对应的二级页表中查询二级页号1,得知内存块号4是最终需要访问的内存块,结合页面大小4KB,最终的访问地址是4*4K+1023 = 17407。

几个细节
image.png
一般来说,各级页表大小不能超过一个页面,不然就又会出现页面连续存放的问题。
所以上述例子中,每级页表最多2^10个,占用10位,40位逻辑地址就至少需要三级页表,即(40-12)/ 3 向上取整。

假设不考虑TLB,访存次数根据页表级数N而定,因为页表也是存储在内存中的,所以查询每一级页表都需要访存,最终访存次数是N+1。

至于一开始提到的进程自身页表存储量最高可达4GB,现有的内存容量无法满足需求的解决方案,我们将会在下一章的虚拟存储中提及。

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

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

相关文章

pikachu靶场全流程

目录​​​​​​​ 暴力破解: 1.基于表单的暴力破解: 2.验证码绕过(on server): 3.验证码绕过(on client): token防爆破: XSS: 1.反射型xss(get): 2.反射性xss(post): 3.存…

Elasticsearch之写入原理以及调优

1、ES 的写入过程 1.1 ES支持四种对文档的数据写操作 create:如果在PUT数据的时候当前数据已经存在,则数据会被覆盖,如果在PUT的时候加上操作类型create,此时如果数据已存在则会返回失败,因为已经强制指定了操作类型…

RPA影刀 | 设置当前时间

1. 新建流程 2. 创建指令 指令1:获取当前日期时间 指令3:日期时间转文本 %Y:年 %m:月 %d:日期 其他字符自由添加。 常用格式如下: %Y年%m月%d日%Y-%m-%d%Y_%m_%d%Y%m%d 3. 运行流程

【办公类-04-02】华为助手导出照片读取拍摄时间分类导出,视频不行)

背景需求 今天我用QQ相册导出照片,但是始终在转圈,手机上无法跳出“连结“”的提示,换了台式和笔记本都无法传输。(明明5月14日还可以导出的) 最后我只能用华为传输助手,把照片快速提取出来了。 使用原来…

从记忆到想象:探索AI的智能未来

引言 人工智能(AI)在信息处理、数据分析和任务自动化等方面展现了强大的能力。然而,在人类独有的记忆和想象力领域,AI仍然有很长的路要走。加利福尼亚大学戴维斯分校的心理学和神经科学教授查兰兰加纳特(Charan Ranga…

STM32编程:实现LED灯闪烁(基于手写SDK的方式)

项目结构 stm32f10x.h 文件 //寄存器的值常常是芯片外设自动更改的,即使CPU没有执行程序,也有可能发生变化 //编译器有可能会对没有执行程序的变量进行优化//volatile表示易变的变量,防止编译器优化, #define __IO volati…

Linux(Rocky)下 如何输入中文(切换中文输入法)教程

RockyLinux如何输入中文(切换中文输入法) 注意 在字符画界面的Linux系统中 默认不具备中文输入法的功能 需要SSH或其他远程工具来实现 问题 可能大家有的时候安装了一个虚拟机之后 想切换中文输入法 但是一直找不到方法 下面将利用Rocky9.2作为演示…

Failed to build causal-conv1d -- 离线安装(mamba_ssm)

Building wheels for collected packages: causal-conv1d Building wheel for causal-conv1d (setup.py) … error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> [8 lines of output] torch.__versi…

苹果将推出“Apple Intelligence”AI系统,专注于隐私和广泛应用|TodayAI

据彭博社报道,苹果公司将在下周的 WWDC 2024 开发者大会上揭晓其全新的 AI 系统——“Apple Intelligence”,该系统将适用于 iPhone、iPad 和 Mac 设备。这一新系统将结合苹果自身技术和 OpenAI 的工具,为用户提供一系列新的 AI 功能&#xf…

独立游戏之路 -- TapTap广告收益损失和常见问题

一个操作带来的TapTap广告收益损失 一,收益损失1.1 广告入口1.2 损失对比二,常见问题2.1 有展现量没有预估收益 /eCPM 波动大?2.2 新建正式媒体找不到预约游戏2.3 聚合模式由于没有回传 oaid 无数据2.4 每日观看次数限制是否有限制一,收益损失 1.1 广告入口 TapTap广告联…

【JAVASE】日期与时间类(下)

三:LocalDateTime 相当于LocalDate类,在LocalDateTime类的对象中还可以封装时、分、秒和纳秒(1纳秒是1秒的十亿分之一)等时间类型。 例如,创建LocalDateTime对象 , LocalDateTime date LocalDateTi…

动手学深度学习29 残差网络ResNet

动手学深度学习29 残差网络ResNet ResNet代码ReLU的两种调用1. 使用 torch.nn.ReLU 模块2. 使用 torch.nn.functional.relu 函数总结 QA29.2 ResNet 为什么能训练处1000层的模型ResNet的梯度计算怎么处理梯度消失的 QA ResNet 更复杂模型包含小模型,不一定改进&…

Shell以及Shell编程

Shell的任务 ①分析命令; ②处理通配符、变量替换、命令替换、重定向、管道和作业控制; ③搜索命令并执行。 内部命令:内嵌在Shell中。 外部命令:存在于磁盘上的独立可执行文件。 #!/bin/bash #! 称为一个幻数&…

Polar Web【中等】你知道sys还能这样玩吗

Polar Web【中等】你知道sys还能这样玩吗 Contents Polar Web【中等】你知道sys还能这样玩吗思路&探索源码 EXPPHP测试生成十六进制化的命令上传测试 Python 脚本 运行&总结 思路&探索 本题属实是有些…即使提示了sys也难以迅速想到 /sys.php 这个路径,…

MySQL—多表查询—多表关系介绍

一、引言 提到查询,我们想到之前学习的单表查询(DQL语句)。而这一章节部分的博客我们将要去学习和了解多表查询。 对于多表查询,主要从以下7个方面进行学习。 (1)第一部分:介绍 1、多表关系 2、…

每日5题Day18 - LeetCode 86 - 90

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:86. 分隔链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;…

Vue前端在线预览文件插件

Vue前端在线预览文件插件 一、使用场景 1.1.像文档资料等,只想让他人在线预览,但不能下载。此等场景需求可以用到此插件。 二、此文档介绍两种插件 1.view.xdocin插件 (上线后免费几天,然后收费,添加作者后,可以延…

二叉树的实现(初阶数据结构)

1.二叉树的概念及结构 1.1 概念 一棵二叉树是结点的一个有限集合,该集合: 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出: 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分,次序不能…

DevOps入门

DevOps: 让技术团队、运维、测试等团队实现一体式流程自动化 CICD: CI:持续集成 CD:持续交付持续集成:从编码、编译、测试、发布项目到仓库的自动化流程持续交付:包含持续集成,并且增加将项目部署到对应的环境的自动化流程 传统项目闭环流程: DevOps闭环流程…

软考架构-计算机网络考点

会超纲,3-5分 网络分类 按分布范围划分 局域网 LAN 10m-1000m左右 房间、楼宇、校园 传输速率高 城域网 MAN 10km 城市 广域网 WAN 100km以上 国家或全球(英特网) 按拓扑结构划分 总线型:利用率低、干…