在 Linux 中,当操作系统决定运行该程序时,如何将其加载到内存中?

在 Linux 中,当操作系统决定运行该程序时,如何将其加载到内存中?

我们知道,Linux 实现了页面缓存来存储可能用到的文件片段的代码或数据。我的一个问题是,当一个程序(例如 vim)运行时,它的数据和代码会首先加载到这些页面缓存中,对吗?

另外一种理解我也不太清楚,OS 是不是只加载程序启动时会立即使用的代码片段?还是一次全部加载?OS 是不是会使用文件的空间缓存来存储加载的代码和数据?OS 用什么模块函数来执行代码加载?

答案1

它的数据和代码将首先加载到那些页面缓存中,对吗?

是的。

操作系统是否只加载程序启动时会立即使用的部分代码?还是一次加载所有代码?

一些片段。实际上,当代码真正执行时,将发生 page_fault,并且页面将从关联文件移动到内存(page_cache)

操作系统使用什么样的模块功能来完成代码加载?

加载_elf_二进制 http://lxr.free-electrons.com/source/fs/binfmt_elf.c#L663

相关内容