---恢复内容开始---
新编操作系统习题与解析4.1 知识点1:存储器管理的基本概念
第4章 存储器管理 基本知识点:存储器管理的基本概念和相关技术;连续内存分配管理方式(单一连续、固定分区和动态分区分配)和非连续内存分配管理方式(基本分页、分段和段页式管理方式);虚拟存储器基本概念、3种虚拟存储管理方式(请求分页、分段和段页式管理方式)的特点和过程。
重 点:各种类型的内存分配方式以及特点。
难 点:基本分页、分段和段页式管理方式的地址转换过程,以及请求分页存储管理的页面置换算法。
4.1 知识点1:存储器管理的基本概念
4.1.1 要点归纳 1. 存储器的层次结构 计算机存储系统如图4.1所示,分为三级,最高层为CPU寄存器,中间为主存,最底层为辅存。通常情况下,层次越高,存取速度越快,但价格越贵。其中,寄存器、高速缓存、主存和磁盘缓存均属于操作系统存储管理的管辖范围,断电后它们存储的信息将不再存在,是易失性存储器;磁盘和可移动存储介质属于设备管理的管辖范围,它们存储的信息将被长期保存,属非易失性存储器。
各类存储器的说明如下:
寄存器。寄存器的访问速度最快,完全能与CPU协调工作,其长度一般以字为单位。用于加速存储系统的访问速度,如用寄存器存放操作数和地址等。
高速缓存(Cache)。高速缓存的容量远大于寄存器而远小于主存,访问速度快于主存。是用于暂存从主存得到指令的副本(很可能在下一步为处理器所需要)的专用缓冲器,它和主存一起构成一级的存储器,以提高整个存储系统的速度。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。
主存(内存)。主存用于保存进程运行时的程序和数据,其访问速度远低于CPU执行指令的速度。
磁盘缓存。磁盘缓存用于暂存磁盘数据和信息,以减少访问磁盘的次数。它本身并不是一种实际存储的存储介质,通常是主存的一部分。
磁盘。磁盘是利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器,具有存储容量大、数据传输率高、存储数据可长期保存等特点。在计算机系统中,常用于存放操作系统、程序和数据,是主存储器的扩充。磁盘是一类最常用的非易失性存储器,如硬盘等。
可移动存储介质。包括U盘、移动硬盘、软盘、光盘、存储卡等,具有体积小、容量大的特点,作为信息交换的一种便捷介质,如今已经得到广泛应用。 本章的存储器管理主要讨论内存管理。 图4.1 计算机存储系统层次图 2. 内存管理的功能 内存是计算机存储系统的核心。内存由大量的字或字节队列构成,每个字或字节都有它自己的地址。存储管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器、提高存储器的利用率以及从逻辑上扩充存储器。
为此,
存储管理应具有以下功能:
内存的分配和回收。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。为此系统应能记住每个存储区的状态;实施存储器的分配;回收系统或用户释放的存储区。
地址变换。在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,将逻辑地址转换为物理地址
扩充内存容量。借助于虚拟存储技术或其他自动覆盖技术,为用户提供比内存空间大的地址空间,从逻辑上扩充内存容量。
存储保护。保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。既要防止一道作业由于发生错误而破坏其他作业,也要防止破坏系统程序。这种保护一般由硬件和软件配合完成。 3. 应用程序的处理过程 应用程序的处理过程是:用户先编辑好应用程序,通过相关语言的编译程序将其编译成若干个目标模块,再通过链接程序将编译后的目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块,最后通过装入程序将它们装入内存进行运行。
其过程如图4.2所示。 对程序员来说,数据的存放地址是由符号决定的,故称为符号名地址或简称名地址,源程序的地址空间称为符号名空间或简称名空间。源程序经汇编或编译后得到的是目标代码程序或目标程序,由于编译程序无法确定目标代码在执行时所驻留的实际内存地址,故一般总是从0号单元开始为其编址,并顺序分配所有的符号名所对应的地址单元。它们都不是真实的内存地址,故称其为相对地址、程序地址或虚拟地址等。 很多语言的程序可以由若干个模块组成,用户可以分别编写和编译这些模块,编译程序产生的所有目标模块都是从0地址开始编址。当用连接程序将各个模块连接成一个完整的可执行目标程序时,连接程序顺次按各个模块的相对地址构成统一的从0地址开始编址的相对地址。 图4.2 应用程序的处理过程 当装入程序将可执行代码装入内存时,程序的逻辑地址与程序在内存的物理地址一般是不相同的,必须通过地址转换将逻辑地址转换成内存地址,这个过程称为地址重定位。如图4.3所示,说明了从源程序的名地址到内存中的可执行代码的地址变换过程。 图4.3 地址变换过程 地址重定位就是将程序的逻辑地址转换成物理地址。
重定位的方式有静态重定位和动态重定位两种:
静态重定位:在装入一个作业时,把作业中的指令地址和数据地址全部转换成绝对地址。这种转换工作是在作业开始前集中完成的,在作业执行过程中无须再进行地址转换。如图4.4所示就是静态重定位的示例,其中作业被装入到从1000开始的内存区域中,则该作业的物理地址为逻辑地址值加上1000。
动态重定位:在装入一个作业时,不进行地址转换,而是直接把作业装到分配的主区域中。在作业执行过程中,每当执行一条指令时,都由硬件的地址转换机构转换成绝对地址。如图4.5所示就是动态重定位的示例,其中作业被装入到从10000开始的内存区域中,则该作业的物理地址为逻辑地址值加上重定位寄存器中的起始地址10000。这种方式的地址转换是在作业执行时动态完成的。 静态重定位的特点是在一个作业装入内存时必须分配其要求的全部内存空间,如果没有足够的空闲内存,就不能装入该作业。此外,作业一旦进入内存后,在整个运行过程中不能在内存中移动,也不能再申请内存空间,也就是说静态重定位不支持程序浮动。 动态重定位的特点是可以将程序分配到不连续的存储区中。在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存,便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。但动态重定位需要附加硬件支持,且实现存储管理的软件算法比较复杂。 在重定位中通常设置一个重定位寄存器,用来存放进程分配的主存空间的地址,该寄存器也称为基址寄存器。处理器每执行一条访内存指令时要把指令中的逻辑地址转换成物理地址,即执行:物理地址=基址寄存器内容+逻辑地址。
图4.4 静态重定位示例 图4.5 动态重定位示例 归纳起来,程序链接有如下几种方式:
静态链接:在程序运行之前,先把各个目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。
装入时动态链接:将应用程序编译后所得到的一组目标模块在装入内存时,采用边装入边链接的链接方式。
运行时动态链接:对一些目标模块的链接直到程序运行过程中需要时才去对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。 程序装入有如下几种方式: 绝对装入方式:在编译时就知道程序将要驻留在内存的地址,编译程序产生绝对地址目标代码,不适合多道程序设计。
可重定位装入方式与静态重定位:根据内存当前的使用情况,采用静态重定位方式将装入模块装入到内存的适当位置,地址变换通常是在装入时一次性完成的,之后都不再改变,如图4.4所示。
可重定位装入方式与动态重定位:允许程序运行时在内存中移动位置,采用动态重定位方式将装入模块装入到内存的适当位置,如图4.5所示。
其余装入方式:与分页系统和分段系统相结合。 4. 内存空间保护 每个进程都有独立的内存空间。为此需要确定进程可访问的合法地址的范围,并确保进程只访问其合法地址。可以用基地址和界限地址寄存器来定义地址空间,如图4.6所示,可以实现这种保护。其中,基地址寄存器含有最小的合法物理内存地址,界限地址寄存器决定了范围的大小,程序B可以合法访问从300040到420939的所有地址。 内存空间保护的实现是通过CPU硬件对程序产生的每一地址与寄存器的地址进行比较来完成的。由于特权指令只可在内核模式下执行,而只有操作系统在内核模式下执行,所以只有操作系统可以加载基地址和界限地址寄存器,对它们进行修改,而不允许用户程序修改它们。 图4.6 用基地址和界限地址寄存器定义地址空间 5. 交换与覆盖技术 交换与覆盖技术是在多道程序环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中仍具有较强的生命力。
(1)交换(Swapping)技术 交换(也称为对换)技术就是把暂时不用的某个程序及数据部分(或全部)从内存移到外存中去,以便空出必要的内存空间;或把指定的程序或数据从外存读到相应的内存中,并将控制权转给它,让其在系统上运行的一种内存扩充技术,如图4.7所示,第2章介绍的中级调度就是采用交换技术。 图4.7 交换示意图 与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构,而且交换主要是在进程或作业之间进行;而覆盖则主要在同一个作业或进程中进行。另外,覆盖只能覆盖与覆盖程序段无关的程序段。 交换进程由换出和换入两个过程组成,换出是把内存中的数据和程序换到外存的交换区,而换入则是把外存交换区中的数据和程序换到内存中。 交换的特点是打破了一个程序一旦进入主存便一直运行到结束的限制,但运行的进程大小仍受实际主存的限制。
(2)覆盖(Overlay)技术 所谓覆盖管理技术,就是把一个大的程序划分为一系列覆盖,每个覆盖就是一个相对独立的程序单位,把程序执行时并不要求同时装入内存的覆盖组成一组,称为覆盖段,将一个覆盖段分配到同一个存储区域,这个存储区域称为覆盖区,它与覆盖段一一对应。显然,为了使一个覆盖区能为相应覆盖段中的每个覆盖在不同时刻共享,其大小应由覆盖段中的最大覆盖来确定。 覆盖技术要求程序员必须把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序,操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。 例如,一个用户程序由6个模块组成,如图4.8(a)所示,给出了各个模块的调用关系。从中看到,Main模块是一个独立的段,它调用A和B模块,A和B模块是互斥被调用的两个模块。在A模块执行过程中,它调用C模块,而B模块执行过程中,它可能调用D或E模块,显然D和E模块也是互斥被调用的,因此可以为该程序建立如图4.8(b)所示的覆盖结构:Main模块是常驻段,而其余部分组成两个覆盖段。 根据以上分析,A和B模块组成覆盖段1,C、D和E模块组成覆盖段2。为了实现真正的覆盖,相应的覆盖区应为每个覆盖段中最大覆盖的大小。这样采用覆盖技术后运行这个程序总共只需要80KB内存。 覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行。 图4.8 用户程序的覆盖结构 6. 内存分配方式 程序只有调入到内存中才能执行,内存必须容纳操作系统和各种用户进程,操作系统应尽可能有效地分配内存的各个部分。主存空间分成系统区和用户区,存储管理是指对主存空间的用户区进行管理,所以内存分配指的是主存用户区的分配。 在进行存储管理时,操作系统建立一个主存空间分配表,记录主存空间的分配情况。 常用的内存分配方式如图4.9所示,每种分配方式各有优缺点,其中请求分配方式是采用虚拟存储器技术。 图4.9 内存分配方式的分类 7. 碎片 碎片(又称为零头)是指内存中无法被利用的小空闲区,根据碎片出现的情况,可以将碎片分为内部碎片和外部碎片。 随着进程装入和移出内存,空闲内存空间被划分为小片段,当所有总的可用内存之和可以满足请求,但并不连续时,如果采用某种连续分配方式如动态分区分配时,就出现了问题,在最坏情况下,每两个进程之间都有不能使用的空闲块,这就是外部碎片,如图4.10所示。 当采用固定分区等分配方式时,将内存以固定大小的块为单元来分配,进程所分配的内存可能比所需要的要大,这两个数字之差称为内部碎片,如图4.11所示,这部分内存在分区中,但又不能使用。 解决外部碎片的主要方法有两种:一种是采用拼接技术;另一种是允许物理地址空间为非连续,如分页、分段和段页式管理方式等。 图4.10 外部碎片的情况 图4.11 内部碎片的情况
4.1.2 例题解析 1. 单项选择题
【例4-1-1】存储管理的目的是 。 A. 方便用户 B. 提高内存利用率 C. 方便用户和提高内存利用率 D. 增加内存实际容量 解:存储管理的目的有两个,一是方便用户,二是提高内存利用率。本题答案为C
【例4-1-2】对主存储器的访问,是 。 A. 以块(页)或段为单位 B. 以字节或字为单位 C. 随存储器的管理方案不同而异 D. 以用户的逻辑记录为单位 解:主存的分配是以块(即页)或段为单位的,而对主存的访问是以字节或字为单位的。本题答案为B。
【例4-1-3】目标程序所对应的地址空间是 。 A. 名空间 B. 虚拟地址空间 C. 存储空间 D. 物理地址空间 解:目标程序是编译后的结果,由机器指令组成,其地址为虚拟地址。本题答案为B。
【例4-1-4】把作业空间中使用的逻辑地址变为内存中物理地址称为 。 A. 加载 B. 重定位 C. 物理化 D. 逻辑化 解:在一般情况下,一个作业在装入时分配到的内存空间和它的地址空间是不一致的,因此,作业在CPU上运行时,其所要访问的指令、数据的物理地址和逻辑地址是不同的。显然,如果在作业装入或执行时,不对有关的地址部分加以相应的修改,将会导致错误的结果。这种将作业的逻辑地址变为物理地址的过程称为地址重定位。本题答案为B。
【例4-1-5】以下存储管理方式中, 方式可以采用静态重定位。 A. 固定分区 B. 分页 C. 分段 D. 都不是 解:固定分区存储管理方式因为作业装入后位置不再改变,可以采用静态重定位。本题答案为A。
【例4-1-6】为了保证一个程序在主存中改变了存放位置之后仍能正确执行,则对主存空间应采用 技术。 A. 静态重定位 B. 动态重定位 C. 动态分配 D. 静态分配 解:动态重定位采用动态运行装入方式,可以保证一个程序在主存中改变了存放位置后仍能正确执行。本题答案为B。
【例4-1-7】经过 ,可执行程序可以不经过任何改动而装入物理内存单元。 A. 静态重定位 B. 动态重定位 C. 编译或汇编 D. 存储扩充 解:解释同上例。本题答案为B。
【例4-1-8】在存储管理中采用交换与覆盖,目的是 。 A. 从物理上扩充内存 B. 实现主存共享 C. 节省存储空间 D. 提高内存利用率 解:采用交换与覆盖技术可以提高内存利用率。本题答案为D。
【例4-1-9】 是指将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。 A. 覆盖技术 B. 交换技术 C. 虚拟技术 D. 物理扩充 解:交换技术就是将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。本题答案为B。
【例4-1-10】系统采用分区存储管理时,可采用 让多用户进程轮流进入主存储器执行。 A. 存储技术 B. 交换技术 C. 覆盖技术 D. 虚拟存储技术 解:交换和覆盖的区别是,交换技术主要是在多个进程或作业之间进行,而覆盖主要在同一个进程或作业中进行。本题答案为B。
【例4-2-11】适合多道程序运行的存储管理中,存储保护是为了 。 A. 防止一个作业占用同一个分区 B. 防止非法访问磁盘文件 C. 防止非法访问磁带文件 D. 防止各道作业相互干扰 解:多道程序运行环境中存储保护的主要目的是防止各道作业相互干扰。本题答案为D。
【例4-2-12】碎片是指 。 A. 存储分配完后所剩的空闲区 B. 没有被使用的存储区 C. 不能被使用的存储区 D. 未被使用,而又暂时不能使用的存储区 解:碎片是指动态分配(包括动态分区分配、分页等内存分配方式)时出现未被使用、且又暂时不能使用的存储区。本题答案为D。
【例4-2-13】碎片现象的存在使得 。 A. 内存空间利用率降低 B. 内存空间利用率提高 C. 内存空间利用率得以改善 D. 内存空间利用率不影响 解:由于碎片暂时不能使用,从而降低了内存的利用率。本题答案为A。
【例4-2-14】当内存碎片容量大于某一作业所申请的内存容量时, 。 A. 可以为这一作业直接分配内存 B. 不可以为这一作业分配内存 C. 拼接后,可以为这一作业分配内存 D. 一定能够为这一作业分配内存 解:尽管碎片暂时不能使用,但可以通过拼接技术合并这些碎片形成大的空闲区,将其分配给作业。本题答案为C。
2. 填空题
【例4-1-15】 可被CPU直接访问,但CPU不能直接访问辅存。 解:本题答案为:主存。
【例4-1-16】存储管理是对主存空间的 进行管理。 解:本题答案为:用户区。
【例4-1-17】在进行存储管理时,操作系统建立一个 ,记录主存空间的分配情况。 解:本题答案为:主存空间分配表。
【例4-1-18】为了防止各个进程之间 ① 和保护各个区域内的信息不被破坏,必须实现 ② 。 解:本题答案为:①相互干扰 ②存储保护。
【例4-1-19】存储保护工作是由 ① 和 ② 配合实现的。 解:本题答案为:①硬件 ②软件。 【例4-1-20】把逻辑地址转换成绝对地址的工作称为 。 解:本题答案为:重定位或地址转换。 【例4-1-21】重定位方式有两种, ① 把作业的指令和数据地址在作业装入时全部转换成绝对地址, ② 则在每条指令执行时才做地址转换工作。 解:本题答案为:①静态重定位 ②动态重定位。
【例4-1-22】内存管理中引入对换技术获得好处是以牺牲 为代价的。 解:对换技术扩展了程序运行空间,但牺牲了CPU的运行速度。本题答案为:CPU的运行速度。
3. 判断题
【例4-1-23】判断以下叙述的正确性。
(1)CPU可以直接存取外存上的信息。
(2)存储管理的主要目的是扩大内存空间。
(3)在现代操作系统中,不允许用户干预内存的分配。
(4)在动态分区中内存中的碎片,可以直接通过拼凑合并成为一个连续区。
(5)把逻辑地址转换成物理地址的工作称为重定位。 (
6)动态重定位技术使得作业在内存中可以移动。
(7)存储保护的目的是限制内存的分配。
(8)存储保护是通过软件实现的。
(9)采用动态重定位技术的系统,可执行程序可以不经任何改动,而装入物理内存。
解:(1)错误。CPU可以直接存取内存中的信息。 (2)错误。存储管理的主要目的是提高内存空间的利用率。
(3)正确。 (4)正确。 (5)正确 (6)正确。 (7)错误。每个进程都有独立的内存空间,为此需要确定进程可访问的合法地址的范围,并确保进程只访问其合法地址。 (8)错误。存储保护是通过硬件和软件实现的。 (9)正确。
4. 问答题 【例4-1-24】为什么要引入动态重定位? 解:作业在运行过程中经常要在内存中移动位置(如对换、紧凑),引入动态重定位的目的就是为了满足程序的这种需要,动态重定位的实现需要一定的硬件支持,重定位的过程是由硬件地址变换机构在程序执行每条指令时自动完成的。
【例4-1-25】什么是交换技术,什么是覆盖技术? 解:交换技术让多个用户作业轮流进入主存(换入、换出)执行,也就是把主存中暂时不能运行的进程换出到外存,而把具备运行条件的进程换入主存,使其投入运行。 覆盖技术把用户作业分成若干段,使主段成为作业执行过程中经常使用的信息,其他段不同时工作。作业执行时,把主段常驻主存区,其他段轮流装入覆盖区来执行。
---恢复内容结束---
新编操作系统习题与解析4.1 知识点1:存储器管理的基本概念
第4章 存储器管理 基本知识点:存储器管理的基本概念和相关技术;连续内存分配管理方式(单一连续、固定分区和动态分区分配)和非连续内存分配管理方式(基本分页、分段和段页式管理方式);虚拟存储器基本概念、3种虚拟存储管理方式(请求分页、分段和段页式管理方式)的特点和过程。
重 点:各种类型的内存分配方式以及特点。
难 点:基本分页、分段和段页式管理方式的地址转换过程,以及请求分页存储管理的页面置换算法。
4.1 知识点1:存储器管理的基本概念
4.1.1 要点归纳 1. 存储器的层次结构 计算机存储系统如图4.1所示,分为三级,最高层为CPU寄存器,中间为主存,最底层为辅存。通常情况下,层次越高,存取速度越快,但价格越贵。其中,寄存器、高速缓存、主存和磁盘缓存均属于操作系统存储管理的管辖范围,断电后它们存储的信息将不再存在,是易失性存储器;磁盘和可移动存储介质属于设备管理的管辖范围,它们存储的信息将被长期保存,属非易失性存储器。
各类存储器的说明如下:
寄存器。寄存器的访问速度最快,完全能与CPU协调工作,其长度一般以字为单位。用于加速存储系统的访问速度,如用寄存器存放操作数和地址等。
高速缓存(Cache)。高速缓存的容量远大于寄存器而远小于主存,访问速度快于主存。是用于暂存从主存得到指令的副本(很可能在下一步为处理器所需要)的专用缓冲器,它和主存一起构成一级的存储器,以提高整个存储系统的速度。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。
主存(内存)。主存用于保存进程运行时的程序和数据,其访问速度远低于CPU执行指令的速度。
磁盘缓存。磁盘缓存用于暂存磁盘数据和信息,以减少访问磁盘的次数。它本身并不是一种实际存储的存储介质,通常是主存的一部分。
磁盘。磁盘是利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器,具有存储容量大、数据传输率高、存储数据可长期保存等特点。在计算机系统中,常用于存放操作系统、程序和数据,是主存储器的扩充。磁盘是一类最常用的非易失性存储器,如硬盘等。
可移动存储介质。包括U盘、移动硬盘、软盘、光盘、存储卡等,具有体积小、容量大的特点,作为信息交换的一种便捷介质,如今已经得到广泛应用。 本章的存储器管理主要讨论内存管理。 图4.1 计算机存储系统层次图 2. 内存管理的功能 内存是计算机存储系统的核心。内存由大量的字或字节队列构成,每个字或字节都有它自己的地址。存储管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器、提高存储器的利用率以及从逻辑上扩充存储器。
为此,
存储管理应具有以下功能:
内存的分配和回收。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。为此系统应能记住每个存储区的状态;实施存储器的分配;回收系统或用户释放的存储区。
地址变换。在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,将逻辑地址转换为物理地址
扩充内存容量。借助于虚拟存储技术或其他自动覆盖技术,为用户提供比内存空间大的地址空间,从逻辑上扩充内存容量。
存储保护。保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。既要防止一道作业由于发生错误而破坏其他作业,也要防止破坏系统程序。这种保护一般由硬件和软件配合完成。 3. 应用程序的处理过程 应用程序的处理过程是:用户先编辑好应用程序,通过相关语言的编译程序将其编译成若干个目标模块,再通过链接程序将编译后的目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块,最后通过装入程序将它们装入内存进行运行。
其过程如图4.2所示。 对程序员来说,数据的存放地址是由符号决定的,故称为符号名地址或简称名地址,源程序的地址空间称为符号名空间或简称名空间。源程序经汇编或编译后得到的是目标代码程序或目标程序,由于编译程序无法确定目标代码在执行时所驻留的实际内存地址,故一般总是从0号单元开始为其编址,并顺序分配所有的符号名所对应的地址单元。它们都不是真实的内存地址,故称其为相对地址、程序地址或虚拟地址等。 很多语言的程序可以由若干个模块组成,用户可以分别编写和编译这些模块,编译程序产生的所有目标模块都是从0地址开始编址。当用连接程序将各个模块连接成一个完整的可执行目标程序时,连接程序顺次按各个模块的相对地址构成统一的从0地址开始编址的相对地址。 图4.2 应用程序的处理过程 当装入程序将可执行代码装入内存时,程序的逻辑地址与程序在内存的物理地址一般是不相同的,必须通过地址转换将逻辑地址转换成内存地址,这个过程称为地址重定位。如图4.3所示,说明了从源程序的名地址到内存中的可执行代码的地址变换过程。 图4.3 地址变换过程 地址重定位就是将程序的逻辑地址转换成物理地址。
重定位的方式有静态重定位和动态重定位两种:
静态重定位:在装入一个作业时,把作业中的指令地址和数据地址全部转换成绝对地址。这种转换工作是在作业开始前集中完成的,在作业执行过程中无须再进行地址转换。如图4.4所示就是静态重定位的示例,其中作业被装入到从1000开始的内存区域中,则该作业的物理地址为逻辑地址值加上1000。
即执行:物理地址=基址寄存器内容+逻辑地址。
图4.4 静态重定位示例 图4.5 动态重定位示例 归纳起来,程序链接有如下几种方式:
静态链接:在程序运行之前,先把各个目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。
装入时动态链接:将应用程序编译后所得到的一组目标模块在装入内存时,采用边装入边链接的链接方式。
运行时动态链接:对一些目标模块的链接直到程序运行过程中需要时才去对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。 程序装入有如下几种方式: 绝对装入方式:在编译时就知道程序将要驻留在内存的地址,编译程序产生绝对地址目标代码,不适合多道程序设计。
可重定位装入方式与静态重定位:根据内存当前的使用情况,采用静态重定位方式将装入模块装入到内存的适当位置,地址变换通常是在装入时一次性完成的,之后都不再改变,如图4.4所示。
可重定位装入方式与动态重定位:允许程序运行时在内存中移动位置,采用动态重定位方式将装入模块装入到内存的适当位置,如图4.5所示。
其余装入方式:与分页系统和分段系统相结合。 4. 内存空间保护 每个进程都有独立的内存空间。为此需要确定进程可访问的合法地址的范围,并确保进程只访问其合法地址。可以用基地址和界限地址寄存器来定义地址空间,如图4.6所示,可以实现这种保护。其中,基地址寄存器含有最小的合法物理内存地址,界限地址寄存器决定了范围的大小,程序B可以合法访问从300040到420939的所有地址。 内存空间保护的实现是通过CPU硬件对程序产生的每一地址与寄存器的地址进行比较来完成的。由于特权指令只可在内核模式下执行,而只有操作系统在内核模式下执行,所以只有操作系统可以加载基地址和界限地址寄存器,对它们进行修改,而不允许用户程序修改它们。 图4.6 用基地址和界限地址寄存器定义地址空间 5. 交换与覆盖技术 交换与覆盖技术是在多道程序环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中仍具有较强的生命力。
(1)交换(Swapping)技术 交换(也称为对换)技术就是把暂时不用的某个程序及数据部分(或全部)从内存移到外存中去,以便空出必要的内存空间;或把指定的程序或数据从外存读到相应的内存中,并将控制权转给它,让其在系统上运行的一种内存扩充技术,如图4.7所示,第2章介绍的中级调度就是采用交换技术。 图4.7 交换示意图 与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构,而且交换主要是在进程或作业之间进行;而覆盖则主要在同一个作业或进程中进行。另外,覆盖只能覆盖与覆盖程序段无关的程序段。 交换进程由换出和换入两个过程组成,换出是把内存中的数据和程序换到外存的交换区,而换入则是把外存交换区中的数据和程序换到内存中。 交换的特点是打破了一个程序一旦进入主存便一直运行到结束的限制,但运行的进程大小仍受实际主存的限制。
(2)覆盖(Overlay)技术 所谓覆盖管理技术,就是把一个大的程序划分为一系列覆盖,每个覆盖就是一个相对独立的程序单位,把程序执行时并不要求同时装入内存的覆盖组成一组,称为覆盖段,将一个覆盖段分配到同一个存储区域,这个存储区域称为覆盖区,它与覆盖段一一对应。显然,为了使一个覆盖区能为相应覆盖段中的每个覆盖在不同时刻共享,其大小应由覆盖段中的最大覆盖来确定。 覆盖技术要求程序员必须把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序,操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。 例如,一个用户程序由6个模块组成,如图4.8(a)所示,给出了各个模块的调用关系。从中看到,Main模块是一个独立的段,它调用A和B模块,A和B模块是互斥被调用的两个模块。在A模块执行过程中,它调用C模块,而B模块执行过程中,它可能调用D或E模块,显然D和E模块也是互斥被调用的,因此可以为该程序建立如图4.8(b)所示的覆盖结构:Main模块是常驻段,而其余部分组成两个覆盖段。 根据以上分析,A和B模块组成覆盖段1,C、D和E模块组成覆盖段2。为了实现真正的覆盖,相应的覆盖区应为每个覆盖段中最大覆盖的大小。这样采用覆盖技术后运行这个程序总共只需要80KB内存。 覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行。 图4.8 用户程序的覆盖结构 6. 内存分配方式 程序只有调入到内存中才能执行,内存必须容纳操作系统和各种用户进程,操作系统应尽可能有效地分配内存的各个部分。主存空间分成系统区和用户区,存储管理是指对主存空间的用户区进行管理,所以内存分配指的是主存用户区的分配。 在进行存储管理时,操作系统建立一个主存空间分配表,记录主存空间的分配情况。 常用的内存分配方式如图4.9所示,每种分配方式各有优缺点,其中请求分配方式是采用虚拟存储器技术。 图4.9 内存分配方式的分类 7. 碎片 碎片(又称为零头)是指内存中无法被利用的小空闲区,根据碎片出现的情况,可以将碎片分为内部碎片和外部碎片。 随着进程装入和移出内存,空闲内存空间被划分为小片段,当所有总的可用内存之和可以满足请求,但并不连续时,如果采用某种连续分配方式如动态分区分配时,就出现了问题,在最坏情况下,每两个进程之间都有不能使用的空闲块,这就是外部碎片,如图4.10所示。 当采用固定分区等分配方式时,将内存以固定大小的块为单元来分配,进程所分配的内存可能比所需要的要大,这两个数字之差称为内部碎片,如图4.11所示,这部分内存在分区中,但又不能使用。 解决外部碎片的主要方法有两种:一种是采用拼接技术;另一种是允许物理地址空间为非连续,如分页、分段和段页式管理方式等。 图4.10 外部碎片的情况 图4.11 内部碎片的情况
4.1.2 例题解析 1. 单项选择题
【例4-1-1】存储管理的目的是 。 A. 方便用户 B. 提高内存利用率 C. 方便用户和提高内存利用率 D. 增加内存实际容量 解:存储管理的目的有两个,一是方便用户,二是提高内存利用率。本题答案为C
【例4-1-2】对主存储器的访问,是 。 A. 以块(页)或段为单位 B. 以字节或字为单位 C. 随存储器的管理方案不同而异 D. 以用户的逻辑记录为单位 解:主存的分配是以块(即页)或段为单位的,而对主存的访问是以字节或字为单位的。本题答案为B。
【例4-1-3】目标程序所对应的地址空间是 。 A. 名空间 B. 虚拟地址空间 C. 存储空间 D. 物理地址空间 解:目标程序是编译后的结果,由机器指令组成,其地址为虚拟地址。本题答案为B。
【例4-1-4】把作业空间中使用的逻辑地址变为内存中物理地址称为 。 A. 加载 B. 重定位 C. 物理化 D. 逻辑化 解:在一般情况下,一个作业在装入时分配到的内存空间和它的地址空间是不一致的,因此,作业在CPU上运行时,其所要访问的指令、数据的物理地址和逻辑地址是不同的。显然,如果在作业装入或执行时,不对有关的地址部分加以相应的修改,将会导致错误的结果。这种将作业的逻辑地址变为物理地址的过程称为地址重定位。本题答案为B。
【例4-1-5】以下存储管理方式中, 方式可以采用静态重定位。 A. 固定分区 B. 分页 C. 分段 D. 都不是 解:固定分区存储管理方式因为作业装入后位置不再改变,可以采用静态重定位。本题答案为A。
【例4-1-6】为了保证一个程序在主存中改变了存放位置之后仍能正确执行,则对主存空间应采用 技术。 A. 静态重定位 B. 动态重定位 C. 动态分配 D. 静态分配 解:动态重定位采用动态运行装入方式,可以保证一个程序在主存中改变了存放位置后仍能正确执行。本题答案为B。
【例4-1-7】经过? ,可执行程序可以不经过任何改动而装入物理内存单元。 A. 静态重定位 B. 动态重定位 C. 编译或汇编 D. 存储扩充 解:解释同上例。本题答案为B。
【例4-1-8】在存储管理中采用交换与覆盖,目的是 。 A. 从物理上扩充内存 B. 实现主存共享 C. 节省存储空间 D. 提高内存利用率 解:采用交换与覆盖技术可以提高内存利用率。本题答案为D。
【例4-1-9】 是指将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。 A. 覆盖技术 B. 交换技术 C. 虚拟技术 D. 物理扩充 解:交换技术就是将作业不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据。本题答案为B。
【例4-1-10】系统采用分区存储管理时,可采用 让多用户进程轮流进入主存储器执行。 A. 存储技术 B. 交换技术 C. 覆盖技术 D. 虚拟存储技术 解:交换和覆盖的区别是,交换技术主要是在多个进程或作业之间进行,而覆盖主要在同一个进程或作业中进行。本题答案为B。
【例4-2-11】适合多道程序运行的存储管理中,存储保护是为了 。 A. 防止一个作业占用同一个分区 B. 防止非法访问磁盘文件 C. 防止非法访问磁带文件 D. 防止各道作业相互干扰 解:多道程序运行环境中存储保护的主要目的是防止各道作业相互干扰。本题答案为D。
【例4-2-12】碎片是指 。 A. 存储分配完后所剩的空闲区 B. 没有被使用的存储区 C. 不能被使用的存储区 D. 未被使用,而又暂时不能使用的存储区 解:碎片是指动态分配(包括动态分区分配、分页等内存分配方式)时出现未被使用、且又暂时不能使用的存储区。本题答案为D。
【例4-2-13】碎片现象的存在使得 。 A. 内存空间利用率降低 B. 内存空间利用率提高 C. 内存空间利用率得以改善 D. 内存空间利用率不影响 解:由于碎片暂时不能使用,从而降低了内存的利用率。本题答案为A。
【例4-2-14】当内存碎片容量大于某一作业所申请的内存容量时, 。 A. 可以为这一作业直接分配内存 B. 不可以为这一作业分配内存 C. 拼接后,可以为这一作业分配内存 D. 一定能够为这一作业分配内存 解:尽管碎片暂时不能使用,但可以通过拼接技术合并这些碎片形成大的空闲区,将其分配给作业。本题答案为C。
2. 填空题
【例4-1-15】 可被CPU直接访问,但CPU不能直接访问辅存。 解:本题答案为:主存。
【例4-1-16】存储管理是对主存空间的 进行管理。 解:本题答案为:用户区。
【例4-1-17】在进行存储管理时,操作系统建立一个 ,记录主存空间的分配情况。 解:本题答案为:主存空间分配表。
【例4-1-18】为了防止各个进程之间 ① 和保护各个区域内的信息不被破坏,必须实现 ② 。 解:本题答案为:①相互干扰 ②存储保护。
【例4-1-19】存储保护工作是由 ① 和 ② 配合实现的。 解:本题答案为:①硬件 ②软件。 【例4-1-20】把逻辑地址转换成绝对地址的工作称为 。 解:本题答案为:重定位或地址转换。 【例4-1-21】重定位方式有两种, ① 把作业的指令和数据地址在作业装入时全部转换成绝对地址, ② 则在每条指令执行时才做地址转换工作。 解:本题答案为:①静态重定位 ②动态重定位。
【例4-1-22】内存管理中引入对换技术获得好处是以牺牲 为代价的。 解:对换技术扩展了程序运行空间,但牺牲了CPU的运行速度。本题答案为:CPU的运行速度。
3. 判断题
【例4-1-23】判断以下叙述的正确性。
(1)CPU可以直接存取外存上的信息。
(2)存储管理的主要目的是扩大内存空间。
(3)在现代操作系统中,不允许用户干预内存的分配。
(4)在动态分区中内存中的碎片,可以直接通过拼凑合并成为一个连续区。
(5)把逻辑地址转换成物理地址的工作称为重定位。 (
6)动态重定位技术使得作业在内存中可以移动。
(7)存储保护的目的是限制内存的分配。
(8)存储保护是通过软件实现的。
(9)采用动态重定位技术的系统,可执行程序可以不经任何改动,而装入物理内存。
解:(1)错误。CPU可以直接存取内存中的信息。 (2)错误。存储管理的主要目的是提高内存空间的利用率。
(3)正确。 (4)正确。 (5)正确 (6)正确。 (7)错误。每个进程都有独立的内存空间,为此需要确定进程可访问的合法地址的范围,并确保进程只访问其合法地址。 (8)错误。存储保护是通过硬件和软件实现的。 (9)正确。
4. 问答题 【例4-1-24】为什么要引入动态重定位? 解:作业在运行过程中经常要在内存中移动位置(如对换、紧凑),引入动态重定位的目的就是为了满足程序的这种需要,动态重定位的实现需要一定的硬件支持,重定位的过程是由硬件地址变换机构在程序执行每条指令时自动完成的。
【例4-1-25】什么是交换技术,什么是覆盖技术? 解:交换技术让多个用户作业轮流进入主存(换入、换出)执行,也就是把主存中暂时不能运行的进程换出到外存,而把具备运行条件的进程换入主存,使其投入运行。 覆盖技术把用户作业分成若干段,使主段成为作业执行过程中经常使用的信息,其他段不同时工作。作业执行时,把主段常驻主存区,其他段轮流装入覆盖区来执行。