x86 段寄存器在现代 CPU 和操作系统上有特殊含义/用途吗?

2023-11-29

从 16 位到 32 位再到 64 位,x86 CPU 历代都有各种棘手的模式和内存分段。

如今,现代操作系统在现代操作模式下使用现代 CPU,您不必担心内存段,但您仍然可以在现代 CPU 上的旧操作系统上运行旧应用程序,在这种情况下,我假设 CPU 在特殊旧版中运行模式(保护模式、实模式等)。

很明显,段寄存器的存在是为了向后兼容,但这是唯一的原因吗?

段寄存器也有现代用途吗?或者它们现在已经成为通用寄存器,仅具有反映其历史功能的名称?

这个问题的灵感来自于这个旧的 Stack Overflow 线程的评论:为什么mov指令必须这样使用呢?


2002年,Linux内核黑客Ingo Molnar在实现时使用了分段执行盾,32 位 x86 系统上的一种数据执行预防形式。这是一modern我所知道的分段的使用,但主要是在从无法改变的硬件机制中获得最大收益方式。分段不用于在 x86-64 CPU 上实现数据执行预防NX支持。

The FS and GSx86-64 上仍然使用段寄存器:

在 64 位模式下,通常(但不是完全)禁用分段,从而创建平坦的 64 位线性地址空间。处理器将 CS、DS、ES、SS 的段基数视为零,从而创建等于有效地址的线性地址。 FS 和 GS 段是例外。这些段寄存器(保存段基址)可以用作线性地址计算中的附加基址寄存器。它们有助于寻址本地数据和某些操作系统数据结构。

英特尔系统编程指南,第 3.2.4 章

在 x86-64 上,Linux 使用FS用于线程本地存储和GS每个 cpu 数据的内核空间。看Linux AMD64 中如何使用 fs/gs 寄存器? and Linux x86 64 中 MSR_GS_BASE 的详细信息

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

x86 段寄存器在现代 CPU 和操作系统上有特殊含义/用途吗? 的相关文章

随机推荐

  • .htaccess 中的条件 PHP 版本

    在我的本地测试服务器上 我使用 PHP 5 4 然而 在实时主机上 我目前仅限于 PHP 5 3 并且必须在 htaccess 中指定它 否则默认为 5 2 所以我可以添加 Use PHP 5 3 Action application x
  • 写入记录器时发生错误。 (无法打开源“.NET Runtime”的日志。您可能没有写入权限。)

    我在 Net core 3 1 中创建了一个 Web 应用程序 并尝试使用 EF Core 访问数据库 在访问它时 我遇到以下错误 奇怪的是 它之前可以正常工作 但应用程序方面没有任何变化 at Microsoft Extensions L
  • 如何在mysql中对西里尔字母进行编码?

    这是怎么回事 我有一个问题 希望你能帮助我解决 我的一个朋友有一个简单 可靠的 html 网站 我实现了一点 php 文章的 CRUD 系统 我遇到的问题是从 mysql 数据库放置和获取西里尔字符 我接下来想要实现的目标是 在主导航中有一
  • 了解地图功能

    Python 2 文档说 内置功能 map function iterable 将函数应用于可迭代的每个项目并返回一个列表 结果 如果传递额外的可迭代参数 函数必须 接受这么多参数并应用于所有项目 并行迭代 如果一个迭代比另一个短 则假定它
  • 使用functions.php将Bootstrap添加到Wordpress

    我尝试使用以下代码将 Bootstrap 嵌入到 Wordpress 但它不起作用 需要帮忙
  • 设置用双引号括起来的单词的 CSS

    这是我的问题的后续问题如果代码包含保留字 则设置代码的 CSS 我正在尝试做什么 如果某些代码有引号或双引号 我想将字体颜色设置为红色和粗体 前任 System out println Hello world 应该将 Hello world
  • 如何使 PageView.Builder() 滚动动画从滞后变得极其流畅 - Flutter

    我使用 PageView Builder 来构建由基本文本小部件数组提供的小部件 但在调试模式下 动画感觉非常滞后 在发布或分析模式下 动画仍然滞后 但少了很多 有什么方法可以完全消除使用PageView时的动画滞后现象 这是我的代码 im
  • 如何从另一台计算机连接到 SQL Server?

    我想使用 SQL Server 2005 从家里连接到另一台 PC 我查看了 msd 但在连接之前它说我应该连接到另一台计算机 使用计算机管理但没有成功 我只能连接到我的工作组中的计算机 谢谢 路易莎 免责声明这只是一些可能对任何人都有帮助
  • 提取C/C++函数原型

    我想做这个 extract prototypes file1 c file2 cpp file3 c 并让任何脚本 程序打印给定 C C 文件中定义的所有函数的函数原型的良好列表 它必须很好地处理多行声明 有没有一个程序可以完成这项工作 越
  • Python 的 eval() 在不受信任的字符串上的安全性?

    如果我使用 eval 评估 Python 字符串 并且有一个类似以下的类 class Foo object a 3 def bar self x return x a 如果我不信任该字符串 会有哪些安全风险 尤其 Is eval strin
  • 计算不同数字数量的省时方法

    get number 返回一个整数 我将调用它 30 次并计算返回的不同整数的数量 我的计划是将这些数字放入std array
  • C++ 在编译时获取月份作为数字

    我有一个 C 项目 必须打印修订字符串 修订字符串是公司指定的 协议包括构建时间 yyyy mm dd 我过去常常将其指定为构建系统中的宏 但这不再是一个选项 因为会弄乱预编译头 在增量构建中 当日期发生变化时 我试图通过从编译器获取构建日
  • 表达式引擎 - 完全删除index.php

    一段时间以来 我一直在 htaccess 文件中使用以下代码 以使 EE URL 正常工作 而无需在 URL 中使用 index php 我发现 虽然我从爬行工具中收到一些报告 但我得到了重复的内容 如 lorem ipsum 也以 ind
  • R 插入符 / rfe 变量选择 Factor() AND NA

    我有一个数据集NAs慷慨地撒在各处 此外 它还有需要的列factors 我正在使用rfe 函数从caret包来选择变量 看来functions 论证中rfe using lmFuncs适用于具有 NA 的数据 但不适用于因子变量 而rfFu
  • 在 C# 中使用信号量

    嗨 我正在尝试使用Semaphore在我的应用程序中 我已经这样声明了 class MyThread public Thread Thrd static Semaphore sem new Semaphore 2 2 public MyTh
  • 关于 Mongoid/MongoDB 标签树结构的建议

    我正在寻找有关如何构建此数据模型的标签部分的一些建议 这是它的简化版本 一个站点有许多帖子 关系关联 mongoid 中的references many 站点有一个标签树 帖子有一系列标签 网站标签的子集 顺序无关紧要 我关心的用例是 快速
  • 尝试在 raspbian wheezy 上构建 opencv-2.4.10 时未声明 SIZE_MAX

    我正在尝试在我的 Raspberry Pi model B 喘息 上构建 opencv 2 4 10 如下这些说明但出现以下错误 解决这个问题的最佳方法是什么 14 Building CXX object modules highgui C
  • 使用socket处理生物指纹考勤机

    我正在尝试使用 Java 程序连接生物识别指纹考勤设备 我使用的设备是Biocom指纹考勤系统 然而 我正在搜索和阅读相关内容 我发现可以根据设备类型使用 SDK 这很难 不符合逻辑 而且 它不是全局解决方案 我研究了如何使用指纹设备连接
  • 使用java Scanner获取字符串中的标记数量

    Java中有没有办法获取Method Scanner获取到的字符串中token的个数 我的意思是 我可以使用s sc nextLine 获取字符串形式的输入行 但在这个字符串上我不能使用lenght 方法因为它给了我字符总数 我认为 是否有
  • x86 段寄存器在现代 CPU 和操作系统上有特殊含义/用途吗?

    从 16 位到 32 位再到 64 位 x86 CPU 历代都有各种棘手的模式和内存分段 如今 现代操作系统在现代操作模式下使用现代 CPU 您不必担心内存段 但您仍然可以在现代 CPU 上的旧操作系统上运行旧应用程序 在这种情况下 我假设