当前位置:  技术问答>linux和unix

关于虚拟地址的困惑

    来源: 互联网  发布时间:2016-03-03

    本文导语:  本人刚刚学习Linux,对虚拟地址,逻辑地址和线性地址,物理地址有好多困惑: 1、虚拟地址是由段选择符合段内偏移地址形成的,我的困惑是:如果段选择符所选择的段描述符的基地址是0x10000000;而段偏移地址是0xf0...

本人刚刚学习Linux,对虚拟地址,逻辑地址和线性地址,物理地址有好多困惑:
1、虚拟地址是由段选择符合段内偏移地址形成的,我的困惑是:如果段选择符所选择的段描述符的基地址是0x10000000;而段偏移地址是0xf0000000;这样算出来的线性地址是什么?如果只是分段机制书上说线性地址就是物理地址,那这样是不是超出了4G的无理地址范围而无法表示?还是说段偏移地址根本就不可以超过某个范围以保证不超出4G空间?这个问题十分困惑
2、逻辑地址和虚拟地址到底有什么差别??

小弟十分困惑,夜不能寐,,还望各位前辈高手指教一二,,希望能拨开迷雾见晴天,,,不胜感激,,谢谢!

|
Well, maybe you have not yet fully understood the mechanism of the virtual memory.
First of all, segmentation and paging are different concepts.
In segmentation-only mode, the offset (0xf0000000 in your case) is used "as is", and won't be interpreted by the VMM.
In paging mode, the offset will be divided into three sections and you could refer to your textbook for more information.

Remember that under protected more, the segment does NOT add up to the offset anymore, it is a descriptor rather than a starting point. DS/CS/ES has the range which the segment covers in the memory and will be used when some memory faults are generated.

In your case, friend, your DS (0x10000000) points to GDT+0x10000000 and the range of your linear address will be there.
Suppose your address ranges from 0 to 0xffffffff which is the whole space, and then your offset (0xf0000000) will be dissected into 0x3C0, 0x0 and 0x0, which have 10, 10 and 12 bit respectively. Then the first part 0x3C0 is added with register CR3 to give you the level-1 page entry which points to the starting point of your level-2 page entry; your second part 0x0 is then added with the level-2 page entry to get the address of your page frame; and finally the third part 0x0 is added with the page frame to get your final physical address.

Therefore, 0xf0000000 will NEVER be added up with 0x10000000 in your case, but rather, they're interpreted in the way discussed above.

Try to understand the segmentation and paging first, friend, and you'll love it. :)

    
 
 

您可能感兴趣的文章:

  • 求教:关于内核物理地址和虚拟地址的问题
  • 平时用&取到的地址是虚拟地址还是真是的物理地址?
  • 虚拟地址→物理地址变换问题
  • linux内存管理虚拟地址 逻辑地址 交换分区(swp)
  • X86下linux虚拟地址向物理地址的转换
  • s3c2440的虚拟地址和实际地址是如何转化的
  • Linux 物理地址转化成虚拟地址及IO_ADDRESS的用法
  • 谁搞得灵清虚拟地址与物理地址!帮帮忙啦
  • DSP芯片物理地址如何remap成内核虚拟地址
  • Linux内存映射 物理地址映射到虚拟地址
  • get_free_pages后获得的虚拟内存地址如何才能转换成物理地址?
  • 如何获得虚拟地址对应的物理地址?
  • 进程,线性地址(虚拟地址),kernel之间的关系
  • 关于外设的物理地址 和 虚拟地址。。。
  • 关于虚拟地址的问题......
  • 《计算机操作系统》 如何将虚拟地址1123456对应的物理地址
  • 如何获得虚拟机的ip地址
  • 虚拟机linux访问本地windowsip地址
  • Linux的虚拟地址空间
  • 如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • VPN虚拟局域网和本地局域网共存(连上vpn后正常打开网页)
  • 虚拟机的系统为Linux ,我在虚拟机下装了tomcat,我在虚拟机下可以访问tomcat的应用,但是为什么在本机访问不了虚拟机下的应用
  • VLAN(虚拟局域网)技术工作原理介绍
  • 我有两个电脑都装了Virtual PC虚拟机,请问我在一个虚拟机上装了LINUX后,另一个虚拟机可以用吗?
  • docker和VM虚拟机的区别以及如何用docker搭建基础设施
  • [虚拟机下安装linux]初次使用虚拟机,请帮忙推荐虚拟机和可以下载的镜像
  • ​docker之轻量虚拟化技术——docker实战分享
  • 在虚拟机上运行的程序和非虚拟机的区别
  • 虚拟机能虚拟硬件平台不 ?
  • 一台机器能不能装两台虚拟机或是同一台虚拟机能装两个linux系统么??
  • ARM ping不通虚拟机,虚拟机可以ping通ARM
  • linux(虚拟机)如何使用windows上的虚拟光驱?谢谢了
  • 虚拟机安装xampp后虚拟接口一访问网站,主机不可以
  • vmware虚拟机linux不能ping通主机,主机能ping通虚拟机
  • VMware虚拟机下Linux怎么访问虚拟机的光驱
  • Fedora9中虚拟机工具不能创建虚拟机
  • 虚拟机-虚拟光驱的搭配,有安装LINUX成功的办法么?
  • 在虚拟机上安装freebsd7.0后,将虚拟硬盘移到其它虚拟机上,出现mounroot> 怎样解决?
  • aix可以用虚拟机虚拟吗?
  • redhat 虚拟机的ip设置好了,如何让虚拟机跟xp本机通讯呢?
  • 虚拟linux,我在windows下面怎么虚拟linux。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3