程序的装入和链接

2018-11-19  本文已影响0人  星q_p光

进程如何进到内存中?

1:编译compiler:编译程序:将用户源代码编译成若干个目标模块,生成可执行目标集合。

2:链接link:链接程序:将形成的一组目标模块,及它们需要的库函数链接在一起,形成一个完整的装入模块。将各个模块合成一个整体

3:装入load:由装入程序将装入模块装入内存,构造PCB,形成进程,开始运行(使用物理地址)。

什么是地址?

分为逻辑地址和物理地址

逻辑地址(相对地址):主观上看到的,用户的程序经过汇编或编译后形成目标代码,目标代码中的指令地址是相对地址。首地址一般为零,其余的各地址都是相对于首地址来编址

物理地址(绝对地址):内存中存储单元的地址。

逻辑地址和物理地址之间会有一种相互联系,将逻辑地址转换为物理地址称为地址映射。

如何将逻辑地址装入物理地址?

分为三装入方式:绝对装入、静态可重定位装入、动态重定位装入

绝对装入:逻辑地址就是物理地址,物理地址由程序员直接赋予。只适合早期对硬件直接编程、单道环境下使用。

重定位:把目标程序中的指令和数据的逻辑地址变成内存中的物理地址的地址变换过程。

静态可重定位装入:地址映射在程序执行之前进行,重定位后物理地址不再改变。装入是根据所定位的内存地址去修改逻辑地址,添加偏移量重定位成物理地址。程序装入内存后不能移动也不易实现共享。

动态运行重定位装入:在运行时地址映射。实际运行中往往会需要程序在内存中的各位置移动,即经常需要重定位到不同的物理地址上。这种运行时移动程序要求地址变换要快速,实现时一般依靠硬件地址变换机构——一个重定位寄存器。

不同的程序链接装入方式

主要由三种:静态链接、装入时动态链接、运行时动态链接

静态链接:装入运行前将多个目标模块及所需库函数链接成一个整体,以后不再拆开。

装入时动态链接:装入内存时,边装入边链接的链接方式。

运行时动态链接:对某些目标模块的链接,在执行中需要该目标模块时,才对它进行链接。

上一篇下一篇

猜你喜欢

热点阅读