存储器的基础知识
首先,一般的存储器我们就会认为它包含着三部分:
- 寄存器
- 速度最快,但是造价高
- 主存储器
- 速度次之,被通俗称为内存
- 外存
- 速度最慢,用于存储文件数据,因为上边两种一旦断电,数据就会丢失。这个用来做持久化存储的。
因此,我们的存储器往往是使用三层结构的。
程序的装入和链接
在操作系统的角度而言,我们面对存储器就是面对程序的装入和连接
一般地,用户程序向要在系统上运行,就要经历下面几个步骤:
- 编译:对用户源程序进行遍历,形成若干个目标模块
- 链接:将目标模块以及他们所需要的库函数链接在一起,形成完整的模块。
- 装入:将模块装入内存
绝对装入(麻烦)
用户程序中使用的地址称为相对地址或逻辑地址或虚拟地址。
在早期,当程序装入内存时,指令存储在内存中的物理地址与其逻辑地址完全相同.
这种程序的装入方式称为绝对装入方式(Absolute Loading Mode)。
可重定位装入方式(避免地址叠加)
采用可重定位的装入方式(Relocation loading Mode)时,如果能够将不同的的程序装入到地址范围不同的物理内存空间,避免分配给各个程序的内存空间叠加(相交或“撞车”),就能实现将多个程序安全装入内存,使它们共享内存空间,从而支持多任务系统
如果使用可重定位装入方式,就必须要解决:逻辑地址对物理地址之间的转换
静态装入
静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。
链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。
在程序运行前一次性装入
动态装入
随着内存技术的发展,为了让更多的程序投入有限的内存并发运行,操作系统只将运行程序所必须的模块装入内存,其他诸如帮助系统等不常用的程序模块不装入内存,进而只装入能够使程序运行起来的那部分模块,更加节省了空间。
在程序运行时,分批装入到内存中
静态链接
静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。
链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。
和静态装入是一样的。
动态链接
载入时动态链接是在将功能模块读入内存时把动态库中调用到的相关模块的内容载入内存。
载入时动态链接是分别载入,当把一个模块载入内存时检查有调用关系的模块并将其载入内存,比静态链接节省了许多开销。
运行时动态链接则是把当前模块调用的模块推迟到调用的时候再载入。
在运行时和运行前进行链接。
连续分配存储管理方式
操作系统将内存分为系统区和用户区两部分
- 系统区仅提供给OS使用,通常是放在内存的低址部分,用户区指系统区以外的全部内存空间,提供给用户使用,通常在高地址部分。
- 内存会被分成为系统区和用户区,比例为1:3。
- 内存分配方式指的是对用户区的分配方式。原因是用户提交的任务只能在用户区运行。
固定分区方式
为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。
分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。
1 划分内存分区的方法
- 1)分区大小相等
- 内存分区大小一致,可能浪费空间;也可能空间不够。
- 2)分区大小不等
- 含较多的较小分区、适量的中等分区和少量的大分区。
系统对内存的管理和控制通过数据结构—分区说明表进行。
分区说明表说明各分区号、分区大小、起始地址和是否是空闲区(分区状态)。
内存的分配释放、存储保护以及地址变换等都通过分区说明表进行。
内存分区的分配:
- 1)为了便于内存分配,通常将分区按大小进行排队,并为之建立一张分区表。
- 2)分配
- 3)回收
动态分区
- 固定分区的重大意义在于操作系统开始支持多任务。
- 但是仍然存在内存浪费的问题。
- 原因是内存分区在先,而运行程序在后,对于每个待运行的程序而言内存分区的大小并非量身定做。
- 于是就出现了当运行某个任务时只能将该任务装载到内存空间中更大的分区。
- 尽管浪费没有单一连续分区严重,但是内存的使用率仍然很低。
如果内存分区的划分不是预先划定,而是根据所要运行的程序的大小分配内存,在内存分配阶段就不会出现内存碎片。
于是,动态分区技术应运而生。
1 基本问题:
1)动态分区的基本思想:在作业执行前不直接建立分区,分区的建立是在作业的处理过程中进行的。且其大小可随作业或进程对内存的要求而改变。
2)动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小,按需分配。
3)采用的数据结构:内存分配表,由两个表格组成。一个是已分配区表,另一张是空闲区表.
动态分区就有两张表来进行说明了。
动态分区分配内存时从可用表或自由链中寻找空闲区的常用方法
- 1)首次适应算法(First Ft Algorithm, FFA)
- 首次适应法要求可用表或自由链按起始地址递增的次序排列。
- 2)最佳适应算法(Best Fit Algorithm, BFA)
- 要求按空闲区大小从小到大的次序组成空闲区可用表或自由链。
- 3)最坏适应算法(Worst Fit Algorithm, WFA):
- 要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。
碎片问题
4)碎片问题
- 经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不足以满足分配要求; 但其总和满足分配要求。这些空闲块被称为碎片。
5)碎片问题的解决
- 通过在内存移动程序的技术将所有小的空闲区域合并为大的空闲区域,这种技术称为紧凑技术,也称为紧缩技术、紧致技术、浮动技术、搬家技术。


