兰州市政建设集团办公网站,提供手机自适应网站公司,有了源码然后如何做网站,网站关键字如何设置目录
4.2.1 程序的装入
一、绝对装入方式
二 、可重定位装入方式
三、动态运行时装入方式
4.2.2 程序的链接
一、静态链接
二、装入时动态链接
三、运行时动态链接 在多道程序环境下#xff0c;如果程序要运行#xff0c;那么必须为之创建进程。而创建进程的第一件…目录
4.2.1 程序的装入
一、绝对装入方式
二 、可重定位装入方式
三、动态运行时装入方式
4.2.2 程序的链接
一、静态链接
二、装入时动态链接
三、运行时动态链接 在多道程序环境下如果程序要运行那么必须为之创建进程。而创建进程的第一件事就是要把用户编写好的源程序和数据装入内存。如何将一个用户的源程序变成一个可在内存中执行的程序通常要经过下列几步 1、编译
源程序是用高级语言或汇编语言编写的一组程序语句。计算机不能直接执行源程序它需要被编译程序或解释程序翻译成机器级代码即目标模块。
2、链接
目标模块是纯二进制的机器级代码。虽然计算机可以执行目标级代码但是典型的目标模块是不完备的它还需要包含对其它目标模块或库函数的引用。因此目标模块通常是不能被装入计算机并执行的需要首先被链接成一个装入模块。
装入模块是能被装入并执行的完备的机器级代码。这个将目标模块链接成装入模块的过程是由链接程序Linker实现的。
3、装入
装入是指由装入程序将装入模块装入内存并执行。 4.2.1 程序的装入
根据存储空间的分配方式将一个装入模块装入内存时可采用三种方式 一、绝对装入方式
装入程序按照装入模块中的地址将程序和数据装入内存。装入模块被装入内存后由于程序中的逻辑地址与实际内存地址完全相同因此不需要对程序和数据的地址进行修改。
通常在程序中采用符号地址然后在编译或汇编时再将这些符号地址转换为绝对地址。 二 、可重定位装入方式
目标模块中的地址为相对地址即地址都是相对于0开始的。装入模块中的逻辑地址与实际装入内存的物理地址不同。
重定位在装入内存时对相对地址做出相应的修改以得到正确的物理地址。 相对地址是指数据地址和指令地址。 根据地址变换进行的时间及采用技术手段不同分为
静态重定位动态重定位
静态重定位
地址变换是在装入内存时一次性完成的并且以后不能移动物理地址 相对地址 内存中的起始地址
适用于多道程序环境可以将装入模块装入到内存中任何允许的位置
优点不需要硬件地址变换机构支持可以装入有限多道程序缺点一个程序通常占用连续的内存空间装入内存后不能移动不易实现共享 三、动态运行时装入方式
装入程序将装入模块装入内存后并不立即把装入模块中的相对地址转换为绝对地址而是把这种地址转换推迟到程序执行时进行。
动态重定位在硬件地址变换机构的支持下随着对每条指令或数据的访问自动进行地址变换。
重定位寄存器 RR将相对地址与 RR 中的内容相加后得到的地址作为访问主存的地址。 采用动态重定位技术后程序中所有指令和数据的实际地址是在运行过程中最后访问的时刻确定的。 主要优点
对主存的使用更加灵活有效几个作业共享一程序段的单个副本比较容易有可能向用户提供一个比主存的存储空间大得多的地址空间
主要缺点
需要附加硬件地址变换机构实现存储器管理的软件比较复杂 4.2.2 程序的链接
链接程序的功能将编译后得到的一组目标模块以及它们所需要的库函数装配成一个完整的装入模块。根据链接时间的不同可把链接分成三种 一、静态链接
在程序运行之前先将各目标模块及它们所需的库函数链接成一个完整的装入模块以后不再拆开。装入模块又称为执行模块或称为可执行文件。 应该是在装入内存之前完成链接的。 说明将几个目标模块链接成一个装入模块时需要解决以下两个问题
1、对相对地址进行转换将除第一个模块外的模块的相对地址转换为装入模块中相对地址。 2、对外部调用符号进行转换将每个模块中所用的外部调用符号都转换为相对地址。 例如将 call B 变换为 JSR “L” 二、装入时动态链接
用户源程序经编译后所得到的目标模块是在装入内存时边装入边链接的。即在装入一个目标模块时若发生一个外部模块调用将引起装入程序去找出相应的外部目标模块并将其装入内存。
优点
1、便于软件版本的修改和更新。对于经静态链接装配在一起的装入模块如果要修改或更新其中的某个目标模块则要求重新打开装入模块。这不仅是低效的而且有时是不可能的。若采用动态链接方式由于各目标模块是分开存放的所以要修改或更新各目标模块是件非常容易得事。
2、便于实现目标模块共享。即可以将一个目标模块链接到几个应用模块中从而实现多个应用程序对该模块的共享。 三、运行时动态链接
将对某些目标模块的链接推迟到程序执行时才进行即在执行过程中若发现一个被调用模块尚未装入内存时立即由 OS 去找到该模块将它装入内存并链接到调用模块上。
优点执行过程中未被用到的目标模块都不会被调入内存和被链接到装入模块上不仅可加快程序的装入过程而且可节省大量的内存空间。