第4章存储器管理95191.doc

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 存储器管理 第一节 基本概念 1 程序的装入和链接 在多道程序环境下,要使程序运行,必须创建进程,而创建进程第一件事就是将程序和数据装入内存。一个用户源程序要变为在内存中可执行的程序,通常要进行以下处理: (1)编译:由编译程序将用户源程序编译成若干个目标模块 (2)链接:由链接程序将目标模块和相应的库函数链接成装入模块 (3)装入:由装入程序将装入模块装入内存 1.1 一些概念 逻辑地址--用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。也就是相对与初始地址的,逻辑地址又称相对地址,相对基地址而言。 物理地址--内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。 地址空间(名空间):指用户程序使用的全部地址。地址空间中的每个地址单元编号称为逻辑地址(logical address),由于通常逻辑地址都是相对于程序的起始地址的,故又称为相对地址(relative address)。 存储空间:指内存中存储数据的物理单元的集合。这些物理单元的集合称为物理地址(physical address)或绝对地址(absolute address)。 重定位:当作业的地址空间与存储空间不一致时,所进行的地址调整以便使作业能够执行的过程称为重定位。重定位实质是地址变换,即作业地址空间中的逻辑地址变换为主存空间的物理地址。根据地址变换进行的时间及采用技术手段不同,可分为静态重定位和动态重定位两类。 1.2 程序的装入 将装入模块装入内存时。可以有以下装入方式。 1.2 思想:编译时,若知道程序将驻留内存的什么位置,则编译程序将产生绝对地址的目标代码,链接得到装入模块。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,因此不用对程序和数据进行修改。 适用:单道程序环境 1.2.2 基本思想:在多道环境下,不可能预知程序应该放在内存的哪个位置,装入程序在装入时根据内存的实际情况把相对地址(逻辑地址)转换为绝对地址,装入到适当的位置。(在装入时进行地址转换)静态重定位。 适用:用于多道程序环境。 课本例子见下图P104 1.2.3 思想:在把装入模块装入内存后,并不立即进行地址转换,而是把相对地址到绝对地址的的地址转换推迟到程序真正开始运行的时候再进行。需要一个重定位寄存器支持。其本质就是在程序运行的过程中进行地址转换。 适用:多道环境中程序在内存中改变位置。 1.2. 绝对装入方式只能将装入模块装入到内存中事先指定的位置,在多道程序环境下是不可能事先知道每一道程序在内存中的位置的,因此这种装入方式只能用于单道程序环境。地址转换时机:程序中所使用的绝对地址,既可在编译或汇编时给出,也可由程序员直接赋予。适用于单道 环境。 可重定位装入方式可将装入模块装入到内存中任何允许的位置,故可用于多道程序环境;然而它不允许程序在运行中移动位置。地址转换时机发生于程序装入内存时发生。适用于 动态运行时装入方式允许程序在运行中移动位置,需要特殊硬件的支持。地址转换时机发生于程序运行时。适用于 程序的链接 由链接程序将目标模块和相应的库函数链接成装入模块。按照链接时间不同分为三种: 静态链接方式 思想:我们常说静态链接实在生成可执行文件时进行的。是一种事先链接方式,即在程序运行之前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块(执行文件),以后不再拆开。 实现静态链接应解决的问题: (1)相对地址的修改。每个模块中所有相对地址的修改。比如,原起始地址为0,现在为L。则模块中所有相对地址都要加L。 (2)变换外部调用符号。每个模块中所用的外部调用符号也都要变换。 存在问题: (1)不便于对目标模块的修改和更新 (2)无法实现对目标模块的共享 如图 1.2.2 动态链接 在装入或运行时进行链接。通常被链接的共享代码称为动态链接库(DLL, Dynamic-Link Library)或共享库(shared library)。 优点 共享:多个进程可以共用一个DLL,节省内存,减少文件交换。 部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。 便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。 便于运行环境适应:调用不同的DLL,就可以适应多种使用环境和提供不同功能。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。 1.2.2.1 装入时动态链接 思想:指将一组目标模块在装入内存时,边装入边链接的方式。具有便于修改和更新、便于实现对目标模块的共享。 存在问题:

文档评论(0)

beoes + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档