一 存储器的功能:
内存分配和回收,内存保护,内存扩充,内存共享
二 用户程序要在系统下运行,必须先将它装入内存,然后再将转变为一个可以执行的程序
1 编译 :由编译程序对用户源程序进行编译,形成若干个目标模块。
2 链接 :由链接程序将编译后形成的一组目标模块以及它们所需的库函数链接在一起,形成一个完整的装入模块。
3 装入:由装入程序将装入模块装入内存。
三 程序装入
1 绝对装入方式:
优点:绝对装入程序按照装入模块中的地址,将程序和数据装入内存。由于程序中的逻辑地址与实际地址完全相同,不需要对程序和数据地址进行修改。
缺点:仅能运行单道程序时而且要求程序员必须熟悉内存的使用情况,一旦程序或数据被修改,就要改变程序中所有地址。
2 可冲定位装入方式:
绝对装入方式只能将目标模块装入到内存中事先指定的位置,只适用于单道程序环境,起始地址通常开始从零开始。
3 动态运行时的装入方式:
可重定位装入方式可将装入模块装入到内存中任何允许的位置,可以用于多道程序环境。
四 程序的链接
静态链接,装入时动态链接,运行时动态链接。
五 基于顺序搜索的动态分区分配算法
1 首次适应(first fit,NF)算法
空闲分区链为例
第一步 从链首开始顺序查找一个可以大小能满足要求的空闲分区。
第二步 按照作业的大小,从该分区划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。
内存分配失败:从链首直到链尾都不能找到一个能满足要求的分区,表明系统中已没有足够大的内存分配给该进程,内存分配失败,返回。
优点 : 算法倾向于优先利用内存中低址部分的空闲区,保留了高址部分的大空闲区,为以后到达的大作业分区分配内存空间创立条件。
缺点: 低地址部分不断被划分留下许多难以利用的小的空闲分区,增加可用空闲分区的开销。
2 循环首次适应算法(next fit,NF)
大部分过程跟首次适应算法一致,不再每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找。
优点:避免低址部分留下许多很小的空闲分区,减少查找可用空闲分区的开销。
缺点:缺乏大的空闲分区。
3 最佳适应算法(best fit ,BF)
将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。
优点:加速寻找第一次找到的能满足要求的空闲区为最佳。
缺点:存储器中会留下许多难以利用的碎片。
4 最坏适应算法(worst fit, WF)
扫描整个空闲分区表或者链表,总是挑选一个最大的空闲区,从中分割一部分存储空间给作业使用。
优点:可剩的空闲区不至于太小,查找效率很高。
缺点:存储器缺乏最大的空闲分区。
5 快速适应算法(quick fit)***典型的以空间换时间的做法***
第一步 根据进程的长度,从索引表中去寻找能容纳它的容纳它的最小空闲区链表。
第二步 从链表中取下第一块进行分配
优点:进行空闲分区分配时不会对任何分区产生分割,能保留最大的分区,不会产生内存碎片,查找效率高
缺点:进程分配的时候或多或少地存在一定浪费。