-
-
关于80X86的段寄存器和虚拟地址生成索引的问题
-
发表于:
2009-1-17 05:48
4504
-
1、32位机段寄存器用来存放段选择子的,抽取前13位生成索引,这个索引指向GDT或者LDT描述符选择子,GDTR高32位存放GDT的基址,后根据索引指向的描述符得出段地址,这个能够明白。
2、有在分页存储中根据虚拟地址的前20位生成索引的后找出物理地址的一部分+偏移量的到内存的物理地址,应该是这样的吧。
3、不明白的地方是描述符的内存物理地址如何和这些索引建立的联系呢?如:CS段:0X00023H
的索引是4,应该是4*8(8个字节)得到的,后根据基址+这个偏移量就得到了段描述符的位置,也就的到了段的起始物理地址,这个段是否为PE文件中的第四段呢?我想是否为这样的行为,操作系统读PE文件头知道这个程序有多少段,然后给每个段制定一个索引,即第一段为1,以后各段累加1的得来的呢?那么分页存储中的索引是否也是这个套路得来的呢?
4、还有一个问题在虚拟存储器中,系统是否按照00001:0X01234567H MOV EAX [EBX]的形式组织的虚拟内存呢?还是根据段头部信息以后只是+一些偏移量得到其它的地址呢?
5、如果不分页的话,VC++中给定的0X04000000H的基址是否为真是的物理地址?如果是那么如果我运行的几个程序的进程都是这个物理地址,虽然在一个时间片内,CPU只执行一个程序,那调度起来岂不是非常麻烦?一会将这个程序的段调入这段内存,一会又将哪个的程序段调入这段内存?GDTR中的高32位的存放的GDT基址是否为实际的物理地址?
我写的可能很啰嗦,可能理解的也有问题,还望不吝赐教
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课