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

Memory management 当操作系统将程序从文件系统加载到内存中时,操作系统如何知道程序有多大?,memory-management,operating-system,Memory Management,Operating System,当操作系统将程序从文件系统加载到内存中时,操作系统如何知道程序有多大 它一次只从文件系统中分页吗? 或者是否有某种硬件或软件指示器,以便操作系统知道程序有多大?在可执行文件的开头有一个标题,它为操作系统列出了可执行文件的各个部分。在Linux上这通常是相同的,在Windows上则是不同的格式,但想法是相同的 可执行文件中的节可以直接复制到内存中,也可以按需加载/分页。某些部分可能是虚拟的(例如,布局上说“我需要8MB的零位内存”,但文件实际上不包含8MB的零位)。节可以在内存中移动,也可以在内存

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

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

在可执行文件的开头有一个标题,它为操作系统列出了可执行文件的各个部分。在Linux上这通常是相同的,在Windows上则是不同的格式,但想法是相同的

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


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

你的确切意思是
多大
?你所说的“程序”是什么意思,机器代码的大小(.text)或者所有的exe段?我基本上要问的是(我想)当一个程序被制作成一个进程时,操作系统如何知道分配给进程多少内存?您单击的.exe只是许多文件中的一个文件。它通常会解析一些包含程序信息的头文件,包括可执行部分的大小,并相应地进行处理。无论它是否将整个内容映射到内存中都是一个细节——你可以像它那样继续,因为系统会在需要时透明地将丢失的内容分页到内存中。啊,请阅读你的评论!谢谢你,尼克!因此,寻呼是我遇到的问题。有关于文件系统分页工作原理的好链接吗?(不交换分页,除非它们是相同的内容)再次编辑以简化。