当程序从操作系统加载到文件系统的内存中时,操作系统如何知道程序有多大?
它是否只是一次从文件系统中的一页中翻页? 或者是否有某种硬件或软件指示器,以便操作系统知道程序有多大?
答案 0 :(得分:2)
可执行文件的开头有一个标题,用于列出操作系统可执行文件的各个部分。在Linux上,这通常是"ELF" format,在Windows上它的格式不同,但想法是一样的。
可执行文件中的部分可以直接复制到内存中,也可以按需加载/分页。某些部分可能是虚拟的(例如,布局显示“我需要8MB的零内存”,但该文件实际上并不包含8MB的零)。章节可以在内存中移动,也可以加载到内存中的固定位置。
操作系统仅以这种方式加载初始可执行文件。操作系统间接加载任何其他文件(或动态链接的库等)(应用程序只询问内存,要求将一些文件复制到该内存中,然后跳转到该代码中)。