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

3
当操作系统从文件系统将程序加载到内存中时,它如何知道程序的大小?
操作系统是否只会一次从文件系统中分页读取一个页面? 还是有某种硬件或软件指示器,以便操作系统知道程序的大小?

1
你具体指的是“有多大”? - Anirudh Ramanathan
1
“程序”指的是机器码(.text)的大小还是所有可执行文件段? - James
我基本上想问的是(我认为),当一个程序被制作成一个进程时,操作系统如何知道要分配多少内存给这个进程?你点击的 .exe 只是众多文件中的一个。 - Dr. Chocolate
1
通常,它会解析包含程序信息的一些头文件,包括可执行部分的大小,并相应地进行处理。它是否将整个内容映射到内存中是一个细节 - 你可以按照它已经这样做的方式进行处理,因为系统会在需要时透明地将任何缺失的内容分页到内存中。 - Nik Bougalis
啊,刚刚看了你的评论!谢谢 Nik!所以分页是我遇到的问题。有没有关于文件系统分页如何工作的好链接?(不是交换分页,除非它们是同一回事)再次编辑以简洁为主。 - Dr. Chocolate
1个回答

2
可执行文件开头有一个标题,列出了操作系统可执行文件的各个部分。在 Linux 上通常是 "ELF" 格式,在 Windows 上则是不同的格式,但思想是相同的。
可执行文件中的部分可以直接复制到内存中,也可以按需加载/分页。一些部分可能是虚拟的(例如,布局表示“我需要 8MB 的零值内存”,但文件实际上并没有包含 8MB 的零)。部分内容可以在内存中移动,也可以在内存中固定位置加载。
操作系统只将初始可执行文件加载到内存中。任何其他文件(或动态链接库等)都是由操作系统间接加载的(应用程序只是要求分配内存,要求将文件位复制到该内存中,然后跳转到该代码)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接