欢迎来到天天文库
浏览记录
ID:15423091
大小:1.04 MB
页数:33页
时间:2018-08-03
《第4章 存储器管理52618》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第四章存储器管理第一节基本概念1程序的装入和链接在多道程序环境下,要使程序运行,必须创建进程,而创建进程第一件事就是将程序和数据装入内存。一个用户源程序要变为在内存中可执行的程序,通常要进行以下处理:(1)编译:由编译程序将用户源程序编译成若干个目标模块(2)链接:由链接程序将目标模块和相应的库函数链接成装入模块(3)装入:由装入程序将装入模块装入内存1.1一些概念u逻辑地址--用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。也就是相对与初始地址的,逻辑地址又称相对地址,相对基地址而言。u物理地址--内存中各物理存储单元的地址从统一的基地址进
2、行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。u地址空间(名空间):指用户程序使用的全部地址。地址空间中的每个地址单元编号称为逻辑地址(logicaladdress),由于通常逻辑地址都是相对于程序的起始地址的,故又称为相对地址(relativeaddress)。u存储空间:指内存中存储数据的物理单元的集合。这些物理单元的集合称为物理地址(physicaladdress)或绝对地址(absoluteaddress)。u重定位:当作业的地址空间与存储空间不一致时,所进行的地址调整以便使作业能够执行的过程称为重定位。重定位实质是地址变
3、换,即作业地址空间中的逻辑地址变换为主存空间的物理地址。根据地址变换进行的时间及采用技术手段不同,可分为静态重定位和动态重定位两类。1.2程序的装入将装入模块装入内存时。可以有以下装入方式。1.2.1绝对装入方式思想:编译时,若知道程序将驻留内存的什么位置,则编译程序将产生绝对地址的目标代码,链接得到装入模块。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,因此不用对程序和数据进行修改。适用:单道程序环境1.2.2重定位装入方式基本思想:在多道环境下,不可能预知程序应该放在内存的
4、哪个位置,装入程序在装入时根据内存的实际情况把相对地址(逻辑地址)转换为绝对地址,装入到适当的位置。(在装入时进行地址转换)静态重定位。适用:用于多道程序环境。课本例子见下图P1041.2.3动态运行时装入方式(动态重定位的装入方式)思想:在把装入模块装入内存后,并不立即进行地址转换,而是把相对地址到绝对地址的的地址转换推迟到程序真正开始运行的时候再进行。需要一个重定位寄存器支持。其本质就是在程序运行的过程中进行地址转换。适用:多道环境中程序在内存中改变位置。1.2.4三种装入方式的对比绝对装入方式只能将装入模块装入到内存中事先指定的位置,在多道程序环
5、境下是不可能事先知道每一道程序在内存中的位置的,因此这种装入方式只能用于单道程序环境。地址转换时机:程序中所使用的绝对地址,既可在编译或汇编时给出,也可由程序员直接赋予。适用于单道环境。可重定位装入方式可将装入模块装入到内存中任何允许的位置,故可用于多道程序环境;然而它不允许程序在运行中移动位置。地址转换时机发生于程序装入内存时发生。适用于动态运行时装入方式允许程序在运行中移动位置,需要特殊硬件的支持。地址转换时机发生于程序运行时。适用于1.2程序的链接由链接程序将目标模块和相应的库函数链接成装入模块。按照链接时间不同分为三种:1.2.1静态链接方式思
6、想:我们常说静态链接实在生成可执行文件时进行的。是一种事先链接方式,即在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块(执行文件),以后不再拆开。实现静态链接应解决的问题:(1)相对地址的修改。每个模块中所有相对地址的修改。比如,原起始地址为0,现在为L。则模块中所有相对地址都要加L。(2)变换外部调用符号。每个模块中所用的外部调用符号也都要变换。存在问题:(1)不便于对目标模块的修改和更新(2)无法实现对目标模块的共享如图1.2.2动态链接在装入或运行时进行链接。通常被链接的共享代码称为动态链接库(DLL,Dynamic-L
7、inkLibrary)或共享库(sharedlibrary)。优点–共享:多个进程可以共用一个DLL,节省内存,减少文件交换。–部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。–便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。–便于运行环境适应:调用不同的DLL,就可以适应多种使用环境和提供不同功能。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。1.2.2.1装入时动态链接思想:指将一组目标模块
8、在装入内存时,边装入边链接的方式。具有便于修改和更新、便于实现对目标模块的共享。存在问题:由于
此文档下载收益归作者所有