gpt4 book ai didi

windows - 全局描述符表

转载 作者:可可西里 更新时间:2023-11-01 12:44:50 28 4
gpt4 key购买 nike

我一直在阅读有关虚拟内存(分段 + 分页)的英特尔手册。据我了解,有一个特殊的寄存器可以保存全局描述符表(GDT)。 GDT 包含 NULL Descriptor、Local Descriptor Table、TSS 和 Segment Descriptor。此外,几乎所有操作系统 (OS) 都有一个 GDT,它会在启动时加载并且无法更改(也许!!!)。我的问题是:

  1. 所有这些信息(NULL、LDT、TSS 和段描述符)存储在哪里?它们是在物理内存、RAM 还是本地硬盘中?
  2. 段描述符是否与代码段 (ASM: CS)、数据段 (ASM: DS) 等相同?如果是,其中有多少存储在 GDT 中(是否只有一个 CS,一个 DS,.. ..)?
  3. Protable Executable (PE) Loader 是否操纵这些信息?

最佳答案

Where all of those information stored (NULL, LDT, TSS, and Segment Descriptor)? Are they in Physical Memory, RAM or Local Hard Drive?

如果 CPU 不在内部缓存 GDT 的内容,则需要不时访问它,也许是一直访问它。 CPU 不能只是去从磁盘读取它,因为它对磁盘或磁盘上的文件系统一无所知,也不知道如何不干扰操作系统访问同一磁盘。 CPU 也不能依赖操作系统的帮助,因为操作系统在从磁盘获取内容的过程中也可以让 CPU 从 GDT 获取内容。第 22 条。

您真的不想将 GDT 换出到磁盘。如果不是出于上述原因,则是因为性能影响。因此 GDT 总是在内存中,物理内存 (=RAM)。

Are Segment Descriptors the same as Code Segment (ASM: CS), Data Segment (ASM: DS), ... and if so how many of those are stored in GDT (Is there only one CS, one DS, ...)?

段寄存器(CS、DS 等)包含段选择器,它们基本上是保护模式下 GDT(或 LDT)的索引,这些索引指向/选择描述符表中的段描述符。在实际和虚拟 8086 模式下,它是相同的,除了不使用表,因为段位置和大小(我们从保护模式下的表中获得)不是任意的,不需要查找,它们是立即计算的。

请注意,以下术语含义不同,请勿混淆或互换使用:

  • 段寄存器
  • 段选择器
  • 段描述符
  • 段描述符表
  • 分割

Does Protable Executable (PE) Loader manipulate any of these information?

不应该。至少不是直接的。大多数 Windows 程序在 CS、DS、ES、SS 中使用相同的段选择器值。这些选择器指向的 GDT 条目不会更改,它们是全局的并在所有程序之间共享。

程序和线程之间通常唯一不同的是用于访问线程本地存储 (TLS) 的段(可能还有它的选择器)。 FS 或 GS​​ 段寄存器保存指向该 TLS 段的选择器。所有对 TLS 的访问都是通过使用适当的段覆盖前缀(FS: 或 GS​​:)的指令完成的。 TLS 对于每个线程都是唯一的。

关于windows - 全局描述符表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715941/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com