【问题标题】:When a program is loaded by the OS into memory from the file system, how does the operating system know how big the program is?当操作系统将程序从文件系统加载到内存中时,操作系统如何知道程序有多大?
【发布时间】:2012-11-13 16:46:46
【问题描述】:

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

它是否一次只从文件系统中分页一页? 或者是否有某种硬件或软件指标让操作系统知道程序有多大?

【问题讨论】:

  • how big 到底是什么意思?
  • 你所说的“程序”是什么意思,机器码(.text)的大小或所有的exe段?
  • 我基本上要问(我认为)当一个程序被制作成一个进程时,操作系统如何知道要为进程分配多少内存?您点击的 .exe 只是众多文件中的一个。
  • 它通常会解析一些包含程序信息的头文件,包括可执行部分的大小,并相应地继续。是否将整个内容映射到内存中是一个细节 - 您可以像处理过一样继续进行,因为系统会在需要时透明地将丢失的任何内容分页到内存中。
  • 啊,刚刚看了你的评论!谢谢尼克!所以分页是我遇到问题的地方。关于文件系统分页如何工作的任何好的链接? (不交换分页,除非它们是相同的东西)为了简洁再次编辑。

标签: memory-management operating-system


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2014-05-27
    • 2015-06-25
    • 1970-01-01
    • 2020-03-12
    • 2012-08-16
    相关资源
    最近更新 更多