可执行文件只有装载到内存后才能被CPU执行。早期的程序装载十分简陋,装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置。

装载的方式

  • 静态装载
    程序是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件.程序执行时所需要的指令和数据必须在内存中才能够正常运行,最简单的办法是将程序运行所需要的指令和数据全都装入内存,这样程序就可以顺利运行,这是最简单的静态装入方法.
  • 动态装载
    进程则是一个动态的概念,它是程序运行的一个过程.但是很多情况下程序所需的内存大于物理内存的数量,这时候就不能将程序完全装入。后来研究发现,程序由局部性原理,所以我们可以将程序最常用的部分驻留在内存中,而将一些不常用的数据存放在磁盘里面,这就是动态载入。

覆盖装入

由于跨模块间的调用都需要覆盖管理器,以确保所有被调用到的模块都能够正确地驻留在内存,而且一旦模块没有在内存中,还需要从磁盘或其他存储器读取相应的模块,所以覆盖装入的速度肯定比较慢。

页映射

页映射也不是一下子就把程序的所有数据和指令都装入内存,而是将内存和磁盘中的数据和指令按照“页”为单位划分为若干个页,以后所有的装载和操作的单位就是页。(物理内存直接与磁盘打交道)

从操作系统角度看可执行文件的装载

上面的页映射的动态装入的方式可以看出,可执行文件中的页可能被装入内存中的任意页。比如程序需要p4时,它可能会被装入F0~F3这4个页中的任意一个。很明显,如果程序使用物理地址直接进行操作,那么每次页被装入时都需要重定位。

进程的建立

虚拟内存

https://blog.csdn.net/guoruibin123/article/details/134524783