您的位置:首页 > 理论基础

计算机---之逻辑地址,虚拟地址和物理地址

2018-01-13 09:08 190 查看
知识储备:

x86和x64:简单理解就是cpu的内核是x86架构还是x64架构的,x86一般支持的是32位,即一次处理数据是32位,x64则是64位,一次数据传输可以处理64位。

逻辑地址:

为什么会有逻辑地址呢,因为如果是x86的cpu内核架构,则它的寻址能力有限,即最大寻址范围为2^32次方,即内存最大可以为4GB,而一般的计算机的内存物理内存只有4GB,加上虚拟内存就不止4GB了,CPU寻址范围显然没这么大,这时候怎么办呢,只能将内存分段管理,把内存分为大小相等的段,用段号×段长加偏移量,内存的各个地址们听好了,我现在要给你分组啦, 01和02 你俩是1组的, 03,04你俩是2组的,如此等等,那等我再找02的时候我就不直接去找他了,我就说 “1组2号,把你的值报给我” ,"2组2号,把你值也报给我";这样的话我就分别获取了
02和04地址的值;这里,组就是段,组号就是段基址,组内号就是偏移;翻译过来,我调用内存的时候就是 段地址+偏移量 = 逻辑地址,当然CPU调用的时候还是直接读写物理地址,因为需要因此需要转换一下;这就是逻辑地址的由来,它是面向应用程序的,只要给出逻辑地址既可以了。
而有一种说法就是x86平台上才有逻辑地址,其他平台就不一定了,可能其他平台逻辑地址就等于线性地址,我个人的理解是,为什么x86平台才有逻辑地址呢,因为x86平台下寻址能力不够啊,所以需要逻辑地址来管理内存,来增加寻址能力,一旦是x64的平台的话,2^64次方最多可以寻址2TB的内存了,也就是说只要你内存不超过2TB,CPU都可以做到轻松的寻址,所以根本不需要所谓的逻辑地址来管理内存,从内存读取数据了。

虚拟地址:

虚拟地址是什么呢,我的理解就是虚拟地址就是线性地址,即内存没那么大,通过从磁盘借内存来增加内存的虚拟内存管理机制(要理解虚拟地址首先得理解虚拟内存),所以有关虚拟内存的地址就是虚拟地址,在x86平台下,逻辑地址先转为虚拟地址,虚拟地址再通过页式管理转化为物理地址。

物理地址:

用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像
参考:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2083672

参考:http://bbs.csdn.net/topics/390751839
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: