我有两个问题: -
答案 0 :(得分:1)
注意 - 您的问题与32位Linux有关。在64位中,它通常是相同的,但具有更大的数字,实际上是无限的(所以你只受到安装的实际内存的限制)。
您的计划无法开始运行 它将无法编译(如果单个对象太大)或链接(如果所有对象的大小太大)。无论哪种方式,它都永远不会开始运行 这可能会在明显低于4GB的限制下发生,具体取决于编译器。
内核的确限制为1GB
对于所有进程,3GB以上的虚拟地址部分是相同的。由于表是分层的,因此没有真正的重复 - 所有进程的顶级表只指向共享内核表。
正如您所说,内核及其中的所有内容(可加载模块,内核的动态分配)限制为1GB。如果您编写内核代码,请保持简单明了。
答案 1 :(得分:1)
行为是否与错误的分配或类似 当数据段增加超出时发生的分段错误 限制?该程序至少会在崩溃之前启动吗?
loader 是一个程序,它将可执行对象文件的代码和数据加载到内存中,然后通过跳转到第一条指令来运行程序。如上所述,加载器将无法加载,因此无法启动程序的执行。会有不确定的行为。
那么,每个进程的页表是否映射了内核区域 虚拟地址空间到相同的物理内存页面?
不,内核维护一些交换内存,用于存储当前未运行的进程信息。当内核调度特定进程时,它会映射到其物理内存。