第三章数据存储与管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 把在装入时对目标程序中指令和数据的变换过程称为 重定位。因为地址变换是在装入时一次完成的,以后 不再改变,故称为静态重定位。
• 采用静态重定位方法将程序装入内存,称为可重定位装 入方式。
(3).动态运行时装入方式
• 装入程序将目标模块装入内存后,并不立即把装入模 块中的相对地址转换为绝对地址,而是把这种地址转 换推迟到程序执行时进行,在硬件地址变换机构的支 持下,随着对每条指令或数据的访问自动进行地址变 换,故称为动态重定位。
分区描述表
(2).分区分配
• 固定分区式分配 的优缺点:可运行多道程序的存储管 理方式 。存在“内零头”会造成存储空间的浪费 。
• 内零头——在分区内没有利用的部分称为内零头。
2.动态分区方式
★动态分区分配是根据进程的实际需要,动态地为 之分配内存空间。 (1) 分区组织
为了实现分区分配,系统中配置相应的数据结构, 为分配提供依据。常用的数据结构有以下两种形式:
①空闲分区表。在系统中设置一张空闲分区表,用于记录 每个空闲分区的情况。
②空闲分区链。为了实现对空闲分区的分配和链接,设置 前向指针和后向指针,通过前、后向链接指针将所有的 空闲分区链接成一个双向链。
空闲分区链表
(2) 分区分配算法
①首次匹配(首次适应算法FF ):要求空闲分区链以地址递 增的次序链接。在分配内存时,从链首开始顺序查找, 直至找到一个大小能满足要求的空闲分区为止;
•采用动态重定位方法将程序装入内存,称 为动态运行时装入方式 。
2. 程序的链接
★源程序经过编译后,可得到一组目标模块,再 利用链接程序将这组目标模块链接形成装入模 块。根据链接时间的不同,可把链接分成如下 三种:
(1)、静态链接方式。在程序运行之前,先将各目 标模块及它们所需的库函数,链接成一个完整 的装配模块(又称执行模块),以后不再拆开。 我们把这种事先进行链接的方式称为静态链接 方式。
Байду номын сангаас
①对相对地址进行修改
由编译程序产生的所有目标模块中,使用的都是相对 地址,其起始地址都为0,在链接成一个装入模块时修 改模块的相对地址。即把原B中的所有相对地址都加上L, 把原C中所有相对地址都加上L+M。 ②变换外部调用符号
将每个模块中所用的外部调用符号也都变换为相对地 址。例如将call B 变换为JSR “L”
• 为了便于程序的修改,对编译的程序采用符号地址,然 后在编译或汇编时,再将这些符号地址转换为绝对地址。
(2).可重定位装入方式 • 目标模块的起始地址通常是从0开始的,程序中的其它
地址也都是相对于起始地址计算的。
• 由装入程序将装入模块装入内存后,装入模块中程序所 访问的所有逻辑地址与实际装入内存的物理地址不同 , 必须进行变换。
分; 2. 用户区是指除系统区以外的全部内存空间,提供给
用户使用。 • 配置了存储器保护机构,用于防止用户程序对操作
系统的破坏 。
相对地址:2100 作业空间
2100
分区首址寄存 器:10000
10000
12100

302
处理机侧 存储器侧
物理内存
3.2.2 分区管理
1. 固定分区分配:将内存用户空间划分为若干个 固定大小的区域,在每个分区中只装入一道作 业。
3.2 连续分配方式
• 连续分配方式,是指为一个用户程序分配一个连续的内存空 间。
• 连续分配方式有四种: 1. 单一连续分配 2. 固定分区分配 3. 动态分区分配 4. 可重定位分区分配(汤子瀛)
3.2.1 单一连续分配
• 把内存分为系统区和用户区两部分 1. 系统区仅提供给0S使用,通常是放在内存的低址部
• 如何将一个用户源程序变成一个可在内存中 执行的程序,通常要经过3步骤:
1. 编译:由编译程序(Compiler)将用户源代码 编译成若个目标模块
2. 链接:由链接程序(Linker)将编译后形成的 一组目标模块,以及它们所需要的库函数链 接在一起,形成一个完整的装入模块
3. 装入:由装入程序(Loader)将装入模块装入 内存。
第三章 数据存储与管理
如何对存储器加以有效的管理,不仅
直接影响到存储器的利用率,而且还
对系统性能有重大影响。存储器管理 的主要对象是内存。
3.1 概述
3.1.1 存储系统的结构
中央处理器
一级缓存



访 问
二级缓存
往 下





内存



磁盘交换区
图3-1 现代存储系统的结构
3.1.2 程序的装入和链接
(1).划分分区的方法两种:
①分区大小相等。当程序太小时,会造成内存空间的浪费 。当程序太大 时,一个分区又不足以装入该程序,致使该程序无法运行
②分区大小不等。可把内存区划含有多个较小的分区、适量的中等分区 及少量的大分区。
(2).分区分配
• 固定分区式分配 的实现。为了便于内存分配,通常将 分区按大小进行排队,并为之建立一张分区使用表。如 下图所示。
1. 程序的装入
• 在将一个装入模块装入内存时,可以有绝对装 入方式、 (1).绝对装入方式 如果知道程序将驻留在内存的什么位置,那么, 编译程序将产生绝对地址的目标代码。 绝对装入程序按照装入模块中的地址,将程序 和数据装入内存。装入模块被装入内存后,由 于程序中的逻辑地址与实际内存地址完全相同, 故不需对程序和数据的地址进行修改。
但采用装入时动态链接方式时,OS则很容易将一个 目标模块链接到几个应用模块上,实现多个应用程序对 该模块的共享。
(3)、运行时动态链接。这是指对某些目标模块的链接, 是在程序执行中需要该目标模块时,由0S去找到该模块 并将之装入内存并把它链接到调用者模块上。
优点:凡在执行过程中未被用到的目标模块,都不会 被调入内存和被链接到装入模块上,这样不仅可加快程 序的装入过程,而且可节省大量的内存空间。
(2)、装入时动态链接。是指将用户源程序编译后所得到 的一组目标模块,在装入内存时,采用边装入边链接的 链接方式。
• 装入时动态链接方式有以下优点: ①便于修改和更新
若采用动态链接方式,由于各目标模块是分开存放的, 所以要修改或更新各目标模块,是件非常容易的事。
②便于实现对目标模块的共享
在采用静态链接方式时,每个应用模块都必须含有 其目标模块的拷贝,无法实现对目标模块的共享。
相关文档
最新文档