内存空间的分配与回收: 操作系统完成主存储器空间的分配和管理 地址管理 逻辑地址转换为物理地址 内存空间的扩充 利用虚拟存储技术或者自动覆盖技术在逻辑上扩充内存 存储保护 保护各道作业在各自的存储空间运行,互不干扰
创建步骤 编译: 编译程序将用户源代码编译成若干目标模块。 链接:由链接程序将编译后的形成的一组目标模块及各所需要的库函数链接在一起,形成一个完整的装入模块 装入:由装入程序将装入模块装入内存运行 链接 1.静态链接:程序运行钱,将库函数链接成一个完整的可执行程序 2.装入时动态链接:将用户源程序编译后得到目标模块,装入内存时,采用表装入边链接的方式 3.运行时动态链接:对某些目标模块的链接,程序需要时才会对其链接 优点:便于修改和更新,便于实现对目标模块的共享 装入 1.绝对装入:装入时按照实际的内存地址,将程序和数据装入内存。 优点:不需要对程序和数据地址进行修改 缺点:只适用于单道程序环境 2.可重定位装入(静态重定位) 所有的装入模块的地址都是从零开始的,若装入的起始物理地址为100,则所有地址相关的参数都+100 特点:作业装入必须要一次性全部装入,并且运行中作业不能在内存中移动,也不能申请内存空间。 运行时装入(动态重定位) 装入程序吧装入模块装入内存后,并不把装入模块的相对地址改为绝对地址,只有当程序真正执行时此案进行装换。 特点:需要重定位寄存器 可以将程序分配到不连续的存储区中,便于程序段的共享,可以向用户提供更大的地址空间
逻辑地址: 即相对地址,连接程序一次按照各模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间 物理地址: 内存中物理单元的集合,是地址转化的最终地址,进程在运行是执行指令和访问数据,最后都要通过物理地址从主存中存取 地址重定位: 逻辑地址转换为物理地址的过程 内存保护 1.CPU中设置上、下限寄存器,存放用户作业在贮存中的上限、下限地址,每当CPU访问一个地址时,分别和两个寄存器的数据比较判断是否越界。 2.重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器):重定位寄存器包含最小物理地址值(起始物理地址),界地址寄存器包含逻辑地址的最大值
思想: 内存空间紧张时,系统将内存中的某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存 结构 把磁盘分为文件区和对换区两个部分 文件区:主要用来存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式 对换区:对换区只占用磁盘空间的小部分,被患处的进程数据就存放在对换区,主要追求换入换出速度,因此通常对换区此采用连续分配方式
交换存在的问题 1.备份存储,采用快速硬盘,要求存储空间足够大,并且能够对内存映像直接进行访问。 2.转移时间和所交换的内存空间成正比 3.交换空间通常作为磁盘的一整块,且独立于文件系统,因此使用起来会很快 4.交换通常在又很多进程运行且内存吃紧时开始启动,系统负荷降低就暂停。 5.只有在晋城空闲状态才能将进程换出 6.普通的交换使用不多,单交换策略的某些变体在许多系统中仍能发挥作用
单一连续分配: 内存分为系统区和用户区,系统区仅供操作系统使用,通常在低地址部分,用户区为用户提供(只能运行一个作业) 优点:无需进行内存保护,不会出现越界异常实现简单、无外部碎片,采用覆盖技术,不需要额外的技术支持 缺点:只适用于单用户,单任务的操作系统,存在内部碎片,存储器利用率低。 固定分区分配 种类: 分区大小相等:用一台计算机去控制多个相同对象的场合,缺乏灵活性。 分区大小不等:划分为多个较小的分区,适量的中分区和少量大分区。 优点:使用与多道程序的存储,无外部碎片。 缺点:1.程序太大无法放入任何一个分区 2.主存利用率低,存在内部碎片 3.不能实现多进程共享一个主存区 动态分区分配 在程序装入内存时,根据内存的大小建立分区 优点:分区大小可以根据进程实际情况进行分配 缺点:存在外部碎片,最后导致主存利用率下降 (采用紧凑级数可以缓解这种缺陷) 动态分配算法 1.首次适应算法 优点:综合性能最好,算法开销小,回收分区后一般不需要对空闲分区队列进行重新排序 2.最佳适应算法 优点:可以尽可能多地留下大片的空闲区 缺点:性能较差,产生最多的外部碎片,回收分区时需要对空闲分区进行重新排列 3.最坏适应算法(最大适应算法) 优点:可以减少难以利用的小碎片 缺点:导致很快没有较大的内存块,性能很差,不利于大进程,算法开销大 4.临近适应算法(首次适应算法) 分配内存时从上一次查找结束的位置开始查找 优点:算法开销小 缺点:会使高地址的大分区也被用完