更新时间:2022-04-05 18:12
装入程序是指可处理所有的与指定的基地址或起始地址有关的可重定位的地址的程序。
编译器、汇编程序或连接程序生成的代码经常还不完全适用或不能执行,但是它们的主要存储器访问却可以在存储器的任何位置中且与一个不确定的起始位置相关。这样的代码被称为是可重定位的(relocatable),而装入程序可处理所有的与指定的基地址或起始地址有关的可重定位的地址。装入程序使得可执行代码更加灵活,但是装入处理通常是在后台(作为操作环境的一部分)或与连接相联合时才发生,装入程序极少会是实际的独立程序。
系统装入程序将共享库装入到多个全局共享库区域内。一个区域称为共享库文本区域,它包含装入的共享库的可执行指令。共享库文本区域映射到每个进程的同一虚拟地址。
另一个区域是共享库数据区域。这个区域包含共享库的数据。因为共享库数据是可读/写的,所以每个进程都有自己的专用区域,一个全局共享库区域的副本。这个专用区域映射到每个进程中的同一虚拟地址。
因为全局共享库区域已映射到每个进程的同一虚拟地址,所以共享库在多数情况下装入到同一虚拟地址中。当系统中装入多个版本的共享库时不符合上述情况。无论何时当使用中的共享库被更改或者任何依赖的共享库被更改时会发生这种现象。当发生这种现象后,装入程序必须创建已更改的共享库的新版本和所有其他依赖于已更改的共享库的共享库的新版本。注意所有共享库最终都依赖于内核名称空间。内核名称空间包含所有由内核定义的系统调用并且可以在内核扩展动态装入或者卸载的任何时候进行更改。当系统装入程序创建共享库的新版本时,此新版本必须处于全局共享库段内的另一位置。因此,使用新版本的进程与使用先前版本的共享库的进程相比具有在不同虚拟地址装入共享库的区别。
装入程序域是系统中装入的所有共享库的子集。系统中装入的所有共享库的集合称为全局装入程序域。此全局装入程序域能够被细分为更小的用户定义的装入程序域。用户定义的装入程序域包含任何特定共享库的一个版本。多个进程可指定一个装入程序域。如果一个进程指定一个装入程序域,那么该进程使用包含在该装入程序域内的共享库。如果多个进程指定同一装入程序域,那么它们使用同一组共享库。因为一个装入程序域包含任何特定共享库的一个版本,所以指定同一装入程序域的所有进程使用共享库的同一版本并且将它们的共享库装入同一虚拟地址。