本文共 3258 字,大约阅读时间需要 10 分钟。
由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
链接
:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
静态链接
:在程序运行之前, 先将各目标模块及它们所需 的库函数连接成一个完整的 可执行文件(装入模块), 之后不再拆开。
装入时动态链接
:将各目标 模块装入内存时,边装入边 链接的链接方式。
运行时动态链接
:在程序执行中需要该目标模块时,才 对它进行链接。其优点是便 于修改和更新,便于实现对 目标模块的共享。
绝对装入
:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。 装入程序按照装入模块中的地址,将程序和数据装入内存。
缺点
:绝对装入只适用于单道程序环境。
静态重定位
:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地 址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入 到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入 时一次完成的)。
缺点
:静态重定位的特点是在一个作业装入内存时,1必须分配其要求 的全部内存空间1,如果没有足够的内存,就不能装入该作业。 作业一旦进入内存后,在运行期间就不能再移动
,也不能再申 请内存空间。 动态重定位
:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装 入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行 时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持
。
操作系统负责内存空间的分配与回收
操作系统需要提供某种技术从逻辑上对内存空间进行扩充
操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换.
为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位,三种装入方式
)应该由操作系统负责,这样就保证了程序员写程序时不需要关注 物理内存的实际情况。 操作系统需要提供内存保护功能。保证各进程在各自存储空间内 运行,互不干扰
方法一:在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址 时,CPU检查是否越界。
方法二:采用重定位寄存器
(又称基址寄存器
)和界地址寄存器
(又称限长寄存器
)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄 存器中存放的是进程的最大逻辑地址。
覆盖技术的思想:将程序分为多个段(多个模块)。 常用的段常驻内存,不常用的段在需要时调入内存
。 内存中分为一个“固定区”
和若干个“覆盖区
”。 需要常驻内存的段放在“固定区”中,调入后就不再 调出(除非运行结束)
, 不常用的段放在“覆盖区”,需要用到时调入内存, 用不到时调出内存
缺点
:必须由程序员声明覆盖结构,对用户不透明,增加了用户编程负担。 交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中 某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
在单一连续分配方式中,内存被分为系统区
和用户区
。 系统区通常位于内存的低地址部分,用于存放操作系统 相关数据;用户区用于存放用户进程相关数据。 内存中只能有一道用户程序,用户程序独占整个用户区 空间。
优点
:实现简单;无外部碎片
;可以采用覆盖技术扩充内存
;不一定需要采取内存保护(eg:早期的 PC 操作系统 MS-DOS)。
缺点
:只能用于单用户、单任务的操作系统中;有内部碎片
;存储器利用率极低。 20世纪60年代出现了支持多道程序的系统,为了能在内 存中装入多道程序,且这些程序之间又不会相互干扰, 于是将整个用户空间划分为若干个固定大小的分区,在 每个分区中只装入一道作业,这样就形成了最早的、最 简单的一种可运行多道程序的内存管理方式。可以采用覆盖技术扩充内存.
优点
:实现简单,无外部碎片
。 缺点
:a. 当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采 用覆盖技术来解决,但这又会降低性能;b. 会产生内部碎片
,内存利用率低。 操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回 收。每个表项对应一个分区,通常按分区大小排列。每个表项包括对应分区的 大小、起始地址、状态(是否已分配)。
动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时, 根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数 目是可变的。
动态分区分配没有内部碎片,但是有外部碎片
如果内存中空闲空间的总和本来可以满足某进程的要求, 但由于进程需要的是一整块连续的内存空间,因此这些 “碎片”不能满足进程的需求。 可以通过紧凑
(拼凑,Compaction)技术来解决外部碎片。 每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区 表),找到大小能满足要求的第一个空闲分区。
缺点
:每次都选最小的分区进行分配,会留下越来越多的、很小 的、难以利用的内存块。因此这种方法会产生很多的外部碎片
。
空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
缺点
:每次都选最大的分区进行分配,虽然可以让分配后留下的 空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被 迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。
空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查 找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
缺点
:邻近适应算法的规则可能会导致无论低地址、高地址部分的空闲分区 都有相同的概率被使用,也就导致了高地址部分的大分区更可能被使 用,划分为小分区,最后导致无大分区可用
编址空间的大小取决于硬件的访存能力,一般由地址总线宽度决定。
虚拟内存的管理需要由相关的硬件和软件支持,有请求分页页表机制、缺页中断机构、地址变换机构等。
覆盖和交换的提出就是为了解决主存空间不足的问题
,但不是在物理上扩充主存,只是将暂时不用的部分换出主存,以节省空间,从而在逻辑上扩充主存。
在整个系统中设置一个重定位寄存器
对主存的访问是以字节或字为单位的。
每个进程拥有一张页表,且进程的页表驻留在内存中
在分段存储管理方式中,以段为单位进行分配,每段是一个连续存储区,每段不一定等长,段与段之间可连续,也可不连续。
多级页表优点的是减少页表所占的连续内存空间,,即当页表太大时,将页表再分级,把每张页表控制在一页之内,减少页表所占的连续内存空间
,转载地址:http://ukmzi.baihongyu.com/