装载的方式
程序必须从磁盘装载到内存中才可以被执行。最简单的方法就是把程序装载到加载地址即可,但是内存往往不够用。这里介绍了两种典型的装载方式:覆盖装入和页映射。书中的介绍已经很简洁明了,建议直接参照书中原文。这里只是简单概况。
覆盖装入
程序员自己将没有调用关系的代码分成不同的模块,如下图中的A/B。两个模块加载地址相同,都是0x0800F000。主模块用到哪个子模块,就将当装载进来。驻留在内存中的模块会被覆盖掉。当然,被A调用的模块C、D也可以互相覆盖装入。如下图。
覆盖装入是没有虚拟存储时的装载方式,目前几乎被淘汰了。
页映射
该方式是将磁盘中的指令和数据以“页(page)”为单位划分。linux中一般以4KB为一页。装载管理器会将用到的页装载进内存,内存不够用时,内存中的某些页会被替换掉。例如图中,P6将会被P8覆盖掉。至于如何选择被替换的页,有多种算法,如FIFO等。在linux中,存储管理器就是承担了页映射装载管理器的任务。