请教Windows虚拟地址问题
进程启动后,是不是要把虚拟地址转换为物理地址呢?怎样转换呢?
那位能说下过程?
另外,相对虚拟地址和虚拟地址有什么区别呢?
最好能说下exe启动后,地址的转换过程,谢谢。
[解决办法]
这个你得看windows核心编程了。
[解决办法]
每一个exe在编译时可以设定起base address你可以找个反汇编工具看看,然后程序内部编译出来使用的地址都是基于该base address的偏移量而已,在程序运行时系统又有一套机制,即如果你exe得出来的物理地址没被占用,运行时就是那个base address加偏移量,否则系统会自动再对你的地址做变更,不错exe的相对偏移位置不会变
[解决办法]
现在的windows操作系统用户进程都是加载到虚拟内存了
至于虚拟内存和物理内存映射的问题则由操作系统完成
[解决办法]
参考:
Intel 80386 Programmer Reference
简单说一下,32位处理器有32根地址线,因此可寻址的物理空间可达4GB;
在保护模式下,虚拟地址由 段选择子(16位)+偏移地址(32位)共48位组成,所以支持的虚拟空间可达64T(2^48-1)字节,
由于物理地址空间远小于虚拟地址空间,通过分段管理机制,把部分虚拟地址空间映射到线性地址空间,线性地址空间与物理地址空间对等;
实际物理存储器(内存等)的大小要远小于物理地址空间,通过分页管理机制把线性地址直接映射到物理地址空间,而实际上只有部分能真正映射到物理存储器中,如果请求的不在物理存储器中,系统进行页交换到物理存储器中,否则程序运行失败。
[解决办法]