鱼C论坛

 找回密码
 立即注册
查看: 1114|回复: 3

[已解决]段地址(16位),偏移地址(32位)可以构成32位环境下的物理地址,对吗?

[复制链接]
发表于 2023-4-20 16:06:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
段地址(16位):偏移地址(32位)可以构成32位环境下的物理地址,对吗?若不对,请说出理由?
最佳答案
2023-4-22 10:14:44
不对。

在32位的环境下,物理地址通常是由一个32位的地址值来表示的,其中高位的一部分表示段地址,低位的一部分表示偏移地址。但是,32位环境下使用的段地址仍然是16位,因此只能表示64KB的内存空间,这远远不足以满足现代计算机的内存需求。因此,在32位环境下,需要使用分页机制来扩展内存空间。

另外,虽然段地址和偏移地址可以组合成一个32位的地址值,但这并不一定构成一个合法的物理地址。实际上,操作系统会根据内存映射表来将逻辑地址转换为物理地址,以确保程序访问的内存区域是合法的并且受到保护。因此,要想访问一个特定的物理地址,需要了解操作系统的内存管理机制,并编写相应的系统级程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-20 16:10:27 | 显示全部楼层
不完全正确。在32位环境下,使用段地址(16位)和偏移地址(32位)并不能直接构成物理地址。这是因为在x86架构中,实际上是通过“段基址+偏移地址”来计算线性地址(也称虚拟地址)的。然后,线性地址经过分页机制转换成物理地址。

在实模式下(即16位环境),段地址(16位)左移4位后与偏移地址(16位)相加,可以计算出20位的物理地址。但是在32位保护模式下,情况发生了变化。

在32位保护模式下,段地址不再是直接参与物理地址的计算。而是作为一个段选择子(segment selector),用于在全局描述符表(GDT)或局部描述符表(LDT)中查找相应的段描述符。段描述符包含了段基址、段限制和访问权限等信息。系统将段描述符中的段基址与偏移地址相加,得到线性地址。接下来,通过分页机制将线性地址映射到物理地址。

因此,在32位环境下,不能简单地通过“段地址(16位):偏移地址(32位)”构成物理地址。而需要考虑保护模式下的段选择子、段描述符和分页机制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 10:14:44 | 显示全部楼层    本楼为最佳答案   
不对。

在32位的环境下,物理地址通常是由一个32位的地址值来表示的,其中高位的一部分表示段地址,低位的一部分表示偏移地址。但是,32位环境下使用的段地址仍然是16位,因此只能表示64KB的内存空间,这远远不足以满足现代计算机的内存需求。因此,在32位环境下,需要使用分页机制来扩展内存空间。

另外,虽然段地址和偏移地址可以组合成一个32位的地址值,但这并不一定构成一个合法的物理地址。实际上,操作系统会根据内存映射表来将逻辑地址转换为物理地址,以确保程序访问的内存区域是合法的并且受到保护。因此,要想访问一个特定的物理地址,需要了解操作系统的内存管理机制,并编写相应的系统级程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 23:11:28 | 显示全部楼层
不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 05:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表