系统如何选择正确的页表?

2023-11-25

让我们关注单处理器计算机系统。据我所知,当创建进程时,就会建立页表,将虚拟地址映射到物理内存地址空间。每个进程都有自己的页表,存储在内核地址空间中。但是,由于不仅有一个进程在运行,并且会发生很多上下文切换,MMU 如何为进程选择正确的页表呢?

任何帮助表示赞赏!

最好的, 西蒙


处理器有一个特权寄存器,称为页表基址寄存器 (PTBR),在 x86 上它是CR3。在上下文切换时,操作系统会更改 PTBR 的值,以便处理器现在知道要使用哪个页表。除了 PTBR 之外,许多现代处理器还有地址空间编号 (ASN) 的概念。进程被赋予一个地址空间编号(来自有限池),并且该 ASN 也被设置在上下文切换的寄存器中。该 ASN 用作 TLB 匹配的一部分,并允许来自多个地址空间的 TLB 条目共存。仅当 ASN 被重用时才需要刷新 TLB,并且仅针对与该 ASN 匹配的条目。大多数 x86 实现比这更粗粒度,并且存在全局页面的概念(用于共享库和共享数据)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

系统如何选择正确的页表? 的相关文章

  • 为什么是补码?

    我正在编写一个教程来教孩子们 9 至 13 岁 编程 我从计算机本身开始 它们与计算机科学没有太大关系 更多的是涉及解决计算问题的过程 以此为出发点 我引导他们认识到机器可以帮助我们解决某些计算问题 人们擅长抽象思维和想象力 但计算机非常擅
  • CPU是如何做减法的?

    我有一些基本的疑问 但每次我坐下来尝试面试问题时 这些问题和我的疑问就会出现 假设 A 5 B 2 假设A和B都是4字节 那么CPU是怎么做的呢 A B添加 我知道 A 的符号位 MSB 为 0 表示正值 B 的符号位为 1 表示负整数 现
  • 在未排序的整数列表中最优搜索 k 个最小值

    我刚刚接受采访时提出了一个问题 我很好奇答案应该是什么 问题本质上是 假设您有一个包含 n 个整数的未排序列表 您如何找到此列表中的 k 个最小值 也就是说 如果您有一个 10 11 24 12 13 列表并且正在寻找 2 个最小值 您将得
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • 我们应该在“编程基础”课程中教授指针吗?

    明年秋季 我将教授编程基础知识课程 即一年级计算机科学课程 在这样的课程中教授指针的优点和缺点是什么 我的立场 应该教导他们 Edit 我对 迎合你的观众 论点的问题是 在大学的头几年 我们 教授 不知道学生是否想成为科学家 我们希望我们知
  • 使用 node.js 获取正在运行的进程的 stdin/stdout

    我正在从节点启动一个进程child process spawn http nodejs org docs v0 6 1 api child processes html child process spawn处理 process stdou
  • AVX-512 指令编码 - {er} 含义

    在 Intel x86 指令集参考中 有许多 AVX 512 指令在指令中具有可选的 er 例如 VADDPD 的一种形式定义为 EVEX NDS 512 66 0F W1 58 r VADDPD zmm1 k1 z zmm2 zmm3 m
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 如何在程序中将自己缝合到自己的尾部,无限循环地封装 64KB 代码段?

    如果指令的顺序执行经过偏移量 65535 则8086将从同一代码段中的偏移量 0 处获取下一个指令字节 接下来的 COM 程序利用这一事实 不断将其整个代码 总共 32 个字节 缝合到自己的尾部 环绕在 64KB 代码段中 你可以称之为二元
  • 为什么 FMA _mm256_fmadd_pd() 内在函数有 3 个 asm 助记符:“vfmadd132pd”、“231”和“213”?

    有人可以向我解释一下为什么融合乘法累加指令有 3 种变体 vfmadd132pd vfmadd231pd and vfmadd213pd 而只有一个 C 内在函数 mm256 fmadd pd 为了简单起见 在 AT T 语法中 有什么区别
  • 如何获取进程的错误信息?

    For vsinstr coverage hello exe 我可以使用 C 代码如下 Process p new Process StringBuilder sb new StringBuilder COVERAGE sb Append
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 分支预测器和分支目标缓冲区如何共存?

    我的问题是它们如何在现代 CPU 架构中共存并协同工作 你把它稍微颠倒了 每次获取时 您都会索引到分支预测器 它会告诉您刚刚收到的指令是否will be解码为已采取的分支 如果没有 则获取下一个连续地址 但是 如果您的分支预测器说它将是一个
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • Java:执行 /cmd /c start path-with-spaces\program.exe

    我已经阅读了很多有关该问题的内容 但我找到的答案并不完全有效 我尝试运行这段代码 String args cmd c start C Program Files XML Marker xmlmarker exe Runtime rt Run
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v

随机推荐

  • 在多层应用程序中定位 Ninject 模块的位置

    我的应用程序包括许多后端程序集 包括实体框架数据存储库层 它们由许多前端程序集 包括 Windows 服务和 MVC3 Web 应用程序 共享 我对 Ninject 绑定过程的理解是 每个包含可注入类型的程序集还应该包含一个定义这些类型的默
  • Bash 最后一个索引

    很抱歉这个蹩脚的 bash 问题 但我似乎无法解决 我有以下简单的情况 我有像这样的变量artifact 1 2 3 zip 我想在连字符和点的最后一个索引之间获取一个子字符串 两者都是互斥的 我的bash技能不太强 我有以下内容 a ar
  • SBT:将输入预先应用到 inputKeys

    在 SBT 中 我想定义一个 inputKey 来读取命令行参数 稍微更改它们并uses结果作为其他 inputKey 的输入 I tried lazy val demo inputKey Unit A demo input task la
  • SQL Server 全文搜索精确匹配并回退

    首先 似乎无法使用全文搜索获得精确匹配 在使用全文搜索方法时 这似乎是一个备受讨论的问题 并且有很多不同的解决方案可以实现所需的结果 但大多数似乎效率很低 由于我的数据库容量很大 我被迫使用全文搜索 因此我最近不得不实施其中一种解决方案以获
  • 将 MATLAB 链接到 DLL 库

    我正在尝试执行 MATLAB 工具包中的一些示例代码 oscmex 该工具包允许使用 OSC 协议通过 MATLAB 进行通信 我认为这个问题是不具体的 它应该适用于any工具包就是按照这个方式设置的 撇开原因不谈 我在启动和运行该工具包时
  • 将日期和时区从 GAE 服务器发送到 GWT 客户端

    好吧 伙计们 我已经解决这个问题大约两周了 现在尝试了我能想到的一切 并查看了这里的大量答案 感觉他们会回答这个问题 但我就是不知道我该怎么做做我想做的事 这让我发疯 似乎没有人在任何地方都有答案 到处都有一半的答案 但似乎没有人真正做我需
  • 如何访问ratchet php周期性循环和客户端在应用程序内发送?

    我有一个运行良好的 Ratchet 服务器和聊天应用程序类 我的问题是如何添加周期性循环 我尝试按照中的示例进行操作定期向 Ratchet 中的客户端发送消息 但我却一事无成 我的目标就像这个人一样 是让服务器检查所有客户端是否仍然存在 每
  • 动态更改 Angular 4 组件的模板

    使用 Angular 4 1 我尝试在渲染模块之前动态更改模块类型的模板 这可能吗 我们正在页面上引导未知数量的组件 来自已知的组件类型列表 并且该页面可能包含相同类型的多个组件 我找到了一种方法 为每个组件提供不同的选择器 以便可以单独呈
  • 保留顺序的 HashSet

    我需要一个保留插入顺序的 HashSet 框架中是否有任何实现 标准 NETHashSet不保留插入顺序 对于简单的测试 插入顺序可能会因意外而被保留 但不能保证并且并不总是这样 证明中间做一些删除就足够了 有关更多信息 请参阅此问题 Ha
  • 防止将查询生成器与 DB::raw() 相结合的查询的 SQL 注入

    在 Laravel 4 中 我想保护一些复杂的数据库查询免遭 SQL 注入 这些查询结合使用查询生成器和 DB raw 这是一个简化的示例 field email user DB table users gt select DB raw f
  • Android 持久空间:“无法弄清楚如何从光标读取此字段”

    我正在尝试使用新的 Android Persistence Room 库在两个数据库表之间创建关系 我查看了文档并尝试实现在以下位置找到的示例https developer android com reference android arc
  • 将 SVG 转换为 PDF

    如何以编程方式将 SVG 文件转换为 PDF 在生成 PDF 之前 我需要在某些方面更改 SVG 因此仅使用工具对其进行预转换是不够的 理想情况下使用 Java 但 Perl 或 PHP 也可以 显然 我基本上正在考虑 Apache FOP
  • 以编程方式启动德比

    请看下面的代码 数据库连接器 java import java sql import javax swing public class DataBaseConnector private Connection con public Data
  • 在 Visual Studio 2015 中混合 - 无设计视图

    我想在 Visual Studio 2015 中用 C 构建一个应用程序 并且想使用 Blend 创建一个用户界面 但它只向我显示 MainPage xaml 中的代码 而不是图形视图 我应该怎么办 它看起来是这样的 您必须将应用程序的目标
  • 在 R 中,以点开头的变量存储在哪里?

    我对以点开头的变量感到好奇 例如 var lt 100 它不属于全球环境 这个变量属于什么环境 gt ls all names TRUE envir GlobalEnv 1 Random seed var a 查看手册页ls 通过输入 ls
  • 无法在 vscode 上渲染 ipynb 文件中的图像

    我已经安装了 vscode 和官方的 microsoft python 包 除了 markdown 中的图像渲染之外 一切都很好 我尝试使用以下代码在降价单元格中显示图像 img src images grad summary png st
  • 对象不支持属性或方法“indexOf”

    我正在使用下面的代码 它是如
  • 无法加载文件或程序集“Microsoft.ReportViewer.Common,版本=11.0.0.0”

    我最近升级了我的 n 层解决方案 NET 3 5 与 2008 到 4 5 Visual Studio 2012 除了 Crystal Reports 之外 一切都很顺利 我必须通过以下链接为 Visual Studio 2012 安装新的
  • Pickle 转储替换当前文件数据

    当我使用pickle时 它工作得很好 我可以卸载任何负载 问题是 如果我关闭程序并尝试再次转储 它会用新的转储替换旧的文件数据 这是我的代码 import pickle import os import time dictionary di
  • 系统如何选择正确的页表?

    让我们关注单处理器计算机系统 据我所知 当创建进程时 就会建立页表 将虚拟地址映射到物理内存地址空间 每个进程都有自己的页表 存储在内核地址空间中 但是 由于不仅有一个进程在运行 并且会发生很多上下文切换 MMU 如何为进程选择正确的页表呢