热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

段寄存器如何参与内存地址转换?

如何解决《段寄存器如何参与内存地址转换?》经验,为你挑选了1个好方法。

在我迄今为止学到的关于分割的内容中:

虚拟地址包含段选择器和偏移量

段选择器与GDTR结合使用以查找段描述符的线性地址

段描述符包含有关所选段的信息,包括其线性地址

所以,我的问题是:

基于我所读到的内容,虚拟地址被加载到段寄存器中,然后以某种方式从那里继续转换.在将虚拟地址加载到其中以获取描述符后,段寄存器会发生什么?

据我了解,段寄存器还包含描述符的缓存值.这在翻译过程中如何发挥作用?

系统如何确定要加载哪个段寄存器,假设段选择器最多可以有2 ^ 13个不同的值且只有6个主寄存器?

Margaret Blo.. 6

通常的翻译如下:

 Logical address   -->   GDT -->  Linear address          --> Page tables --> Physical Address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/ 
                  Virtual address                                     
             (can be either logical or linear)

如果在VMX非root模式下运行(即在VM中)并且启用了EPT,则:

 Logical address   -->   GDT -->  Linear address          --> Page tables --> Guest Physical Address --> EPT --> (System) Physical Address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/                      \__________________________________________________________/
                  Virtual address                                                        Physical address
             (can be either logical or linear)

如果存在IOMMU(如伞形技术VT-d):

Logical address   -->   GDT -->  Linear address          --> Page tables --> Guest Physical Address --> EPT --> (System) Physical Address  -->  1 or 2 level translation --> (IO) Physical address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/                     \___________________________________________________________________________________________________________________/
                  Virtual address                                                        Physical address
             (can be either logical or linear)

MMIO甚至可以执行访客虚拟地址或访客物理地址的转换(其中一个目的是将应用程序的虚拟地址重新定义到硬件并简化对翻译期间遇到的大量地址空间的管理).

注意正如Hadi Brais所指出的,术语"虚拟地址"仅在Intel和AMD手册中指定了一个线性地址.
我发现将逻辑和线性地址标记为虚拟更有用,因为它们在页面转换步骤之前.


段寄存器保存一个段选择该索引的片段的描述符,其用于执行安全检查,并获得该段被求和与的偏移部分的逻辑地址.
在那之后,它完成了.

在指令级指定的每个地址是逻辑地址 -规定的段的查找描述符.
为了避免每次通过指令访问内存时从内存中读取内存,CPU会对其进行缓存 - 否则这将成为性能杀手.

操作系统根据需要做的事情设置段寄存器,但无论如何它很少需要更多的四个段.

分段(在PM中)的主要目的是通过为每个程序定义非重叠段来实现过程隔离.
程序通常只需要一个堆栈段,数据段和代码段-其他三个在那里,以避免保存/恢复数据段回那么当段最大尺寸为64KiB(阅读:实模式.fsgs后来虽然加入).

今天操作系统使用平面模型,其中只有两个段(代码和数据/堆栈 - 这是一个简化,需要其他段)包含整个地址空间,以及TLS或PEB/TEB等操作系统特定段.
因此,六个段寄存器甚至超过了它所需要的,GDT的8192个条目就在那里,以防它们(如果需要).



1> Margaret Blo..:

通常的翻译如下:

 Logical address   -->   GDT -->  Linear address          --> Page tables --> Physical Address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/ 
                  Virtual address                                     
             (can be either logical or linear)

如果在VMX非root模式下运行(即在VM中)并且启用了EPT,则:

 Logical address   -->   GDT -->  Linear address          --> Page tables --> Guest Physical Address --> EPT --> (System) Physical Address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/                      \__________________________________________________________/
                  Virtual address                                                        Physical address
             (can be either logical or linear)

如果存在IOMMU(如伞形技术VT-d):

Logical address   -->   GDT -->  Linear address          --> Page tables --> Guest Physical Address --> EPT --> (System) Physical Address  -->  1 or 2 level translation --> (IO) Physical address
(segment:offset)                 (segment base + offset)         

\______________________________________________________/                     \___________________________________________________________________________________________________________________/
                  Virtual address                                                        Physical address
             (can be either logical or linear)

MMIO甚至可以执行访客虚拟地址或访客物理地址的转换(其中一个目的是将应用程序的虚拟地址重新定义到硬件并简化对翻译期间遇到的大量地址空间的管理).

注意正如Hadi Brais所指出的,术语"虚拟地址"仅在Intel和AMD手册中指定了一个线性地址.
我发现将逻辑和线性地址标记为虚拟更有用,因为它们在页面转换步骤之前.


段寄存器保存一个段选择该索引的片段的描述符,其用于执行安全检查,并获得该段被求和与的偏移部分的逻辑地址.
在那之后,它完成了.

在指令级指定的每个地址是逻辑地址 -规定的段的查找描述符.
为了避免每次通过指令访问内存时从内存中读取内存,CPU会对其进行缓存 - 否则这将成为性能杀手.

操作系统根据需要做的事情设置段寄存器,但无论如何它很少需要更多的四个段.

分段(在PM中)的主要目的是通过为每个程序定义非重叠段来实现过程隔离.
程序通常只需要一个堆栈段,数据段和代码段-其他三个在那里,以避免保存/恢复数据段回那么当段最大尺寸为64KiB(阅读:实模式.fsgs后来虽然加入).

今天操作系统使用平面模型,其中只有两个段(代码和数据/堆栈 - 这是一个简化,需要其他段)包含整个地址空间,以及TLS或PEB/TEB等操作系统特定段.
因此,六个段寄存器甚至超过了它所需要的,GDT的8192个条目就在那里,以防它们(如果需要).


推荐阅读
  • IhaveWindows8.1prowithanAMDprocessor.IinstalledtheAndroidSDKandEclipse.Itworksbut ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 如何解决《volatile语句的负载障碍在哪里?》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《英特尔x86_64处理器不仅是流水线架构,还是超标量?》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《在英特尔SGX中禁用系统调用意味着什么》经验,为你挑选了1个好方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
author-avatar
小丘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有