2012-11-13 39 views
3

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

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

+1

你的意思是“多大”? –

+1

你的意思是'程序',机器代码的大小(.text)还是所有的exe段? – James

+0

我基本上问的(我认为)是当一个程序变成一个进程时,操作系统如何知道要分配给进程的内存量? 您点击的.exe只是许多文件中的一个。 –

回答

2

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

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

只有最初的可执行文件被OS以这种方式加载。任何其他文件(或动态链接的库等)都是由操作系统间接加载的(应用程序只是要求存储器,要求将一些文件复制到该存储器中,然后跳转到该代码中)。