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