2011-04-07 91 views

回答

4

我觉得地址空间segment

在真实模式下(intel的XT和286)段只是一种使程序独立于内存空间的方法。当一个程序被编译时,地址(可变参数,标签 - 函数)被硬编码到一个程序中。 - 这样就很难同时加载两个程序,因为它们都希望使用相同的地址。

我们需要使用相对地址而不是绝对个。相对和物理地址之间的分辨率是相对于进行的。如果从段0x200开始加载一个程序,并且从0x600开始加载另一个程序,则它们可以自由使用相同的地址(例如0x41),因为这将相对于它们各自的段。在我们的情况下(实模式),段0x200将被转换为物理地址0x2000(通过将其乘以0x10),并且在添加相对地址后,生成的物理地址将为0x2041

有很多可以使用的段。数据操作默认是相对于程序的数据段(保存在CPU的DS寄存器中)并且代码操作是相对于代码段(保存在CS寄存器中)进行的。使用堆栈段SS寄存器)将堆栈地址解析为物理地址。

但是在实模式下,您可以自由使用这些段,您可以访问其他程序的段或输入任意值,这些值将被解析为任意物理地址。

在保护模式下,整个概念发生了变化。细分受众群不再拥有地址。他们持有选择器。它们只能引用表中保存真实基地址的元素。该表还包含限制,因此您不能再寻址任何物理地址,只能在由操作系统提供给您的程序的内存部分内。这引入了进程对内存块所有权的概念。

我认为这已经足够了,请随时阅读Wikipedia或其他好消息。这个话题很有文献记载。