如果使用分段内存模型操作的32位操作系统仍然是4GB的限制吗?
我当时正在阅读Intel处理器家族开发手册,它指出,使用分段内存模型,可以映射到内存的64 to。
“在内存组织的分段模型中,逻辑地址空间由多达16,383段组成,每段最多4 be,或总计高达2^46字节(64 to )。处理器通过第11章描述的地址转换机制将这64 to的逻辑地址空间映射到物理地址空间。应用程序程序员可以忽略这种映射的细节。分段模型的优点是分别检查每个地址空间内的偏移,并且可以单独控制对每个段的访问。

这不是一个复杂的问题。我只想确定我正确地理解了课文。如果Windows或任何其他操作系统在分段模型中工作,而不是在平面模型中工作,那么内存限制会是64 the吗?
更新:

英特尔的3-2-3 a系统文档。

http://pdos.csail.mit.edu/6.828/2005/readings/i386/c05.htm
节域不应该像传统的实模式意义上的那样被认为.段寄存器充当全局描述符表的选择器。
在受保护模式下,您可以使用表格A:B中的逻辑地址来寻址内存。与实模式一样,A是段部分,B是该段中的偏移量。>保护模式下的寄存器限制为32位。32位可以表示0到4Gb之间的任何整数。因为B可以是0到4Gb之间的任何值,所以我们的段现在的最大大小是4Gb (与实模式中的推理相同)。现在是为了区别。在受保护模式中,A不是段的绝对值。在保护模式A中是一个选择器。选择器表示系统表中的偏移量,称为全局描述符表(GDT)。GDT包含一个描述符列表。这些描述符中的每一个都包含描述段特征的信息。
段选择器提供了分页无法实现的附加安全性。
这两种方法都有各自的优点,但分页效果要好得多。分割作为内存保护和虚拟内存的一种方法,虽然仍然可用,但很快就过时了。事实上,x86-64体系结构需要一个平面内存模型(一个基本为0的段,限制为0xFFFFFF),以便它的一些指令能够正常运行。 然而,分段是完全内置在x86架构中的.不可能绕过它。在这里,我们将向您展示如何设置您自己的全局描述符表--一个段描述符列表。 如前所述,我们将尝试建立一个平面内存模型。段的窗口应该从0x00000000开始,扩展到0xFFFFFF(内存结束)。但是,有一件事是分页不能做的,那就是设置环级别。
-html/4.-%20 The%20和%20 IDT.html
例如,GDT列出了各种用户、它们的访问级别和内存访问区域:
样本GDT表
GDT[0] = {.base=0, .limit=0, .type=0};
// Selector 0x00 cannot be used
GDT[1] = {.base=0, .limit=0xffffffff, .type=0x9A};
// Selector 0x08 will be our code
GDT[2] = {.base=0, .limit=0xffffffff, .type=0x92};
// Selector 0x10 will be our data
GDT[3] = {.base=&myTss, .limit=sizeof(myTss), .type=0x89};
// You can use LTR(0x18)GDT.3F
寻呼部分是映射到物理内存的部分。(PAE)提供高达64 up的附加内存。
所以简而言之。答案是否定的,你不能有超过4GB的逻辑内存。我认为64‘s的索赔在Intel奔腾处理器家族开发手册中是错误的。
发布于 2010-10-28 03:03:54
编辑:我的答案假设"4GB限制“指的是线性(虚拟)地址空间的最大大小,而不是物理地址空间的最大大小。正如在下面的注释中所解释的,后者实际上并不限于4GB --即使在使用平面内存模型时也是如此。
重复你的话,并强调:
逻辑地址空间由多达16,383段组成,每段最多可达4G。
现在,引用“Intel 64和IA-32架构软件开发人员手册第1卷:基本架构”(PDF现有这里):
在内部,为系统定义的所有段都映射到处理器的线性地址空间。
这个线性地址空间(在32位处理器上)被限制在4GB以内。因此,分段记忆模型仍然会受到限制。
发布于 2010-10-28 03:06:25
你还记得以前的日子吗?在x86上的DOS在实模式下有64 in的段?FAR指针?HMA?XMS?随着内存的增加,他们已经找到了使用比处理器通常所能处理的更多内存的方法。但它很丑。
当然,他们可以使用分割32位,但为什么?没有必要。当32位处理器出现时,4Gb的限制就足够了,所以决定使用平面模型。
此外,32位操作系统可以使用超过4Gb,它的进程是限制在4Gb的地址空间(甚至2或3在windows上)。
发布于 2014-08-15 06:37:39
声明的逻辑地址空间为64 of。提出物理内存限制是不相关的,因为通过启用内存分页,可以绕过物理限制。
然而,这仍然是一个有点误导的说法,因为段选择器的索引字段为16位,表指示符为-1位,请求保护级别为2位,总共留下了8,192 (13位)段选择器。对于8192个4GB段,只能访问GDT(全局描述符表)或LDT (本地描述符表)中的32 to逻辑内存。要能够访问64 To的逻辑内存,就必须充分利用GDT和LDT的16,384个独特段。
无论如何,第一个问题是,“是否有4GB的限制”,答案是“否”。例如,在启用分段和分页的32位系统上,可以将512 DS分配给代码段(CS),1GB分配给堆栈段(SS),将4GB分配给数据段(DS)。
第二个问题的答案是,如果使用分段内存模型,操作系统是否会被限制在64 to之内,答案就不那么直接了。操作系统的工作是提供内存管理器。显然,物理上的限制是32 of的RAM。32位Linux,因为它使用分页,可以为每个应用程序提供一个4GB的平面地址空间(忽略内核/用户拆分细节)。而且,每个进程都认为它有4GB的物理地址空间。
总之,我认为您混淆了分段的限制和分页的限制。分页使系统或应用程序能够使用比物理可用的内存更多的RAM。分段使进程能够映射到多个逻辑上可寻址的32位段中.注意,即使是平面模式也使用分段,但所有段寄存器都映射到相同的基址。
https://stackoverflow.com/questions/4039325
复制相似问题