能力值:
( LV2,RANK:10 )
|
-
-
2 楼
第一天 没人问津
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
段描述符表由处理器的内存管理硬件来引用,跟分页机制独立的。其实Window NT中一般用不到分段机制的,现代操作系统一般都是纯分页系统,保留分段机制只是为了兼容性的要求。用OD加载程序,查看段CS的段描述符一般为0023,该段的基地址为0,段限长为FFFFFFFF,ss,ds,es的段就是整个4G空间。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢楼上的。
请问 有相关的参考资料吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
3楼说的RING0?
|
能力值:
(RANK:260 )
|
-
-
6 楼
不论分不分页,分段机制只涉及到“逻辑地址”与“线性地址”。
而分页机制涉及到线性地址与物理地址。
其实,段寄存器中装载的选择子,只有在装载时,选择子对应的描述符才被用到。一旦段寄存器装载完成,描述符就被SHADOW寄存器缓存起来了,之后只要不重新装载段寄存器,不管进行什么操作(比如从保护模式返回实模式,或者修改内存中GDT中的描述符),SHADOW寄存器中的内容就不会变,那么逻辑地址到线性地址的映射关系就不会变。
关于这一点,我最初见于梁肇新先生的《编程高手箴言》一书中,之后又在INTEL的手册中见过,不过记不得是哪一章了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
3楼和6楼的观点不一样
3楼 段描述符表由处理器的内存管理硬件来引用,跟分页机制独立的
描述符里有32位的段基地址 这个段基地址在没启用分页的时候 指的就是物理地址 启用了分页之后呢?
6楼 逻辑地址到线性地址的是没有变 但是在启用分页前的线性地址就是物理地址 而启用的分页之后 就由分页机制决定物理地址。
一旦段寄存器装载完成,描述符就被SHADOW寄存器缓存起来了,之后只要不重新装载段寄存器,不管进行什么操作(比如从保护模式返回实模式,或者修改内存中GDT中的描述符),SHADOW寄存器中的内容就不会变,那么逻辑地址到线性地址的映射关系就不会变。 在此刻之前 我一直以为我现在写的实模式程序 是段左移4位加上偏移得出物理地址。其实不然,80386(可能是80286吧,没考究过)的寻址是一样的,只不过实模式下SHADOW寄存器的段描述符是固定的。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
在启用分页机制的过程中,如果一些数据已经在固定的物理内存中存在 比如GDT表,0b8000 等。这些固定的都是由分页程序来完成物理地址到分页地址的一一映射。如果线性地址(物理地址)是08b000H 那么在分页机制启用的过程中就要把分页地址0b8000H对应到物理地址0b8000H 如此一来 就保证了分页机制启用后 系统的寻址方式是段机制+分页机制的统一形式且数据不会错乱
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
呵呵,问个比较菜页和标题无关的问题哈。
这本书,好不好呀~ 我想看看。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
个人觉得不错
注重实践 系统点的理论知识可以去看看其它书
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
08年的时候曾经提过一个类似的问题:http://bbs.pediy.com/showthread.php?t=74953,后来自己也就没有关注这个帖子了,今天偶然看到了这个问题,见还没有答复。今天就按照自己的理解给个答案吧,分段机制和分页机制是两个过程,分段机制是必须的,分页机制是可选的。在开启分页机制的情况下,分页机制是在分段机制后进行的,进一步将分段机制产生的线性地址转换为物理地址,由于分页机制是在分段机制之后进行的,那么在分段机制产生线性地址的过程中,寻址GDT也就不存在页目录,页表等转换过程了,而是按照分段机制的要求寻址GDT(注意红色部分),在线性地址产生后,才开始分页处理过程。
|
能力值:
( LV1,RANK:0 )
|
-
-
12 楼
09年的回答让22年的我醍醐灌顶
|
|
|