3

当操作系统将程序从文件系统加载到内存中时,操作系统如何知道程序有多大?

它一次只从文件系统中翻页吗?或者是否有某种硬件或软件指示器,以便操作系统知道程序有多大?

4

1 回答 1

2

可执行文件的开头有一个标头,它为操作系统布置了可执行文件的各个部分。在 Linux 上,这通常是“ELF”格式,在 Windows 上是不同的格式,但想法是一样的。

可执行文件中的部分可以直接复制到内存中,也可以按需加载/分页。某些部分可能是虚拟的(例如,布局显示“我需要 8MB 的零内存”,但文件实际上并不包含 8MB 的零)。部分可以在内存中移动,或者可以加载到内存中的固定位置。

操作系统仅以这种方式加载初始可执行文件。任何其他文件(或动态链接库等)都由操作系统间接加载(应用程序只要求内存,要求将文件位复制到该内存中,然后跳转到该代码)。

于 2012-11-13T21:30:25.960 回答