关于物理地址的疑问

时间:2021-12-22 17:36:43
8086的CPU为16位,数据总线为20位,所以内存中的物理地址用段地址+偏移量,来获取内存中的实际地址。
那如果CPU为16位,数据总线也为16位,这样的物理地址的表示还会用段地址+偏移量来表示 吗?

8 个解决方案

#1


数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。

#2


引用 1 楼 jiweijian123 的回复:
数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。


那实际上呢,以后的话不是要兼容前面的吗?比如32位的CPU,数据总线也是32位。这怎么办?

#3


说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。

#4


80386的存储管理分为分段单元和分页单元。段单元用来把逻辑地址变为线性地址。页单元把线性地址换算成物理地址。如果禁止分页,线性地址就等于物理地址,进行分页就不等。

#5


引用 3 楼 jiweijian123 的回复:
说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。

我还是不太明白 啊,DI和TI是什么 ?
也就是说以后的CPU物理地址,仍然是段地址+偏移量来表示 是吗

#6


关于物理地址的疑问
对照这个图看看。好好理解下。再找些80386内存寻址的资料。

#7


不需要,实模式的知识

#8


有数据总线是32位,地址总线也是32位的CPU在使用“段+偏移”的寻址方式。这么做是为了实现一些高级的功能,比如保护模式、虚拟内存(这个我不敢确定)等。不过这个“段+偏移”和实模式相比复杂很多,但和实模式一样都有逻辑地址和物理地址的概念。

#1


数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。

#2


引用 1 楼 jiweijian123 的回复:
数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。


那实际上呢,以后的话不是要兼容前面的吗?比如32位的CPU,数据总线也是32位。这怎么办?

#3


说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。

#4


80386的存储管理分为分段单元和分页单元。段单元用来把逻辑地址变为线性地址。页单元把线性地址换算成物理地址。如果禁止分页,线性地址就等于物理地址,进行分页就不等。

#5


引用 3 楼 jiweijian123 的回复:
说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。

我还是不太明白 啊,DI和TI是什么 ?
也就是说以后的CPU物理地址,仍然是段地址+偏移量来表示 是吗

#6


关于物理地址的疑问
对照这个图看看。好好理解下。再找些80386内存寻址的资料。

#7


不需要,实模式的知识

#8


有数据总线是32位,地址总线也是32位的CPU在使用“段+偏移”的寻址方式。这么做是为了实现一些高级的功能,比如保护模式、虚拟内存(这个我不敢确定)等。不过这个“段+偏移”和实模式相比复杂很多,但和实模式一样都有逻辑地址和物理地址的概念。