应用程序最终是如何访问到物理地址的?
我们都知道windows是一个多任务的系统,可以"同时"执行几个进程,各个进程有自己的地址空间.
一般的操作系统的书上都会讲逻辑地址转换到物理地址的内容,但是我不明白究竟是什么时候转换的?这个过程是不是操作系统完成的?还是CPU自己完成的?因为在VC中我可以看见CPU寄存器中的值仍然是逻辑地址,这样的话操作系统就不会有机会转换了.
应用程序最终是如何访问到物理地址的?
问题点数:20、回复次数:9Top
1 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-09-25 14:24:43 得分 4
操作系统转换的,页文件交换等Top
2 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2005-09-25 15:05:33 得分 4
当然是操作系统转换的啦,可以参考下win32保护模式编程。Top
3 楼longge520(longge520)回复于 2005-10-01 10:34:59 得分 0
在VC中我可以看见CPU寄存器中的值仍然是逻辑地址,这样的话操作系统就不会有机会转换了啊.
Top
4 楼steedhorse(晨星)回复于 2005-10-08 23:47:46 得分 4
但很可能另外一个寄存器里保存着另外一个重要的地址,而CPU对访问的实际地址是由他们两个共同决定的。Top
5 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-10-08 23:59:02 得分 4
是由CPU完成的,不过之前的工作是由操作系统完成的。
一个线性地址的Base部分,根据由操作系统在切换到该任务之前设置的CR3分页register,得到页目录的项,然后根据线性地址Page部分与页目录项中的页表地址,得到物理内存中页的地址,然后根据线性地址中Offset部分,得到该物理页上的偏移。
其中页表的和页目录的维护是操作系统完成的,而这个转换过程是x86CPU中的电路完成滴。
不过有的系统并不是按这种二级分页,一般64位的系统都是用三级分页,Linux上用的是三级分页,所以,同样的代码,可以在32位和64位下都能使用
另外,在80x86里还有中扩展分页,其中物理内存的也大小是4MB,它相当于一级分页Top
6 楼steedhorse(晨星)回复于 2005-10-09 00:09:42 得分 2
顶一顶鸡丁。Top
7 楼longge520(longge520)回复于 2005-10-30 19:33:04 得分 0
还是不太明白 希望有人对下面这句话给出明确的回答是或不是:
CPU的某个寄存器被装入一个逻辑地址,然后CPU自己访问到正确的物理地址,yes or no?Top
8 楼crcr(游侠)回复于 2005-10-30 21:14:12 得分 2
操作系统完成的Top
9 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2005-10-30 22:02:51 得分 0
在x86 microprocessor中,逻辑地址到物理地址的转换是CPU提供的功能,也就是常说的保护模式下的分段,分页寻址Top




