1、多级存储器
1)存储层次可以分为三层:寄存器、主存(内存)、辅存(磁盘);
2)不同层次之间还有相应的缓存以减小不同层次间读写速度不匹配程度;简单来说,主存也即寄存器和辅存之间的高速缓存;
3)不同层次的存储器读写效率不一样,读写速度越快,成本越高。
4)寄存器、主存、高速缓存等属于操作系统管理的范畴,断电后数据会丢失;而磁盘属于设备管理的范畴,断电后数据不会丢失。
2、程序装入
1)绝对装入方式:程序编译时即已经知道装入内存后的地址,程序的逻辑地址和实际内存地址完全一致,不需要重定位,这种方式只适合单道批处理系统;
2)可重定位装入方式:将程序装入内存后,立即重新计算其绝对地址,即逻辑地址加上地址偏移量。
3)动态运行时装入方式:将程序装入内存后,不立即计算其绝对地址,而是等真正需要该模块时才重新计算其绝对地址。
3、程序链接方式
1)静态链接:直接把目标模块及所需要的库链接成为一个整体,链接完成后不再拆开;
2)装入时动态链接:在程序装入内存时,边装入边链接,便于各个目标文件的共享;
3)运行时动态链接:当一个模块需要时才去链接;
4、内存分配方式
连续分配:程序装入到一块连续的内存区域当中
1)单一连续分配:只适用于单用户单任务操作系统
2)固定分区分配:把内存区域划分为多个分区,每个分区装入一道作业;固定分区大小的划分有两种方式:相等、不相等,相等时可能引起内存浪费或部分大型程序无法装入。
3)动态分区分配:建立空闲分区链或空闲分区表,当需要内存时,去链中寻找大小匹配的内存区域;
分区匹配算法:首次适应算法(第一个块大小能满足的区域)、循环首次适应算法(从上次一次查找的地方开始向后查找,相较于前一种方法,可以使空闲分区更均匀)、最佳适应算法(能满足要求,且是当前最小的空闲分区,导致很多小的碎片无法再利用)、最坏适应算法(总是挑选当前最大分区分割给作业使用,优点是使空闲分区不会太小以致无法使用,但会使内存中缺少最大存储空间)、快速适应算法(建立多个链表,大小相等的空闲分区放置到同一链表当中,需要使用时,直接取出相应链表的第一块分区给程序使用,不进行切割;但会导致分区回收复杂)。
4)伙伴系统:无论已分配分区还是未分配分区,其大小均是2的k次幂,这种方法分配和回收时都可能会引起多次切割,每次切割都是除以2。
5)哈希算法:以分区大小作为关键字,使用时取出对应分区的地址;
为应对没有足够空间装入作业问题,有以下两种解决方案:
1)可重定位分区分配:当零碎分区大小总和大于程序所需要内存时,可以通过“紧凑”的方法将内存进行整理,将分散的区域拼接在一起,其他程序需要重定位。
2)对换:将内存中暂时不能运行的进程或暂时不用的程序和数据调出到外存上,以腾出足够的内存空间。对换的单位可以是:进程、页、段;
离散分配方式
1)分页式存储:将进程的逻辑地址空间划分成若干大小相等的页面,将内存空间也划分成大小相等的存储块,将进程的页装入到内存空间的存储块当中(存储块不一定连续),并建立页表即页至物理块的映射。页表结构:页号 块号
页大小确定:页面太小,会导致页表过大;页面太大,会导致页内碎片过多(每个作业最后一页往往是装不满的);
页表:页表中保存的是页号和物理块号的映射;页表一般驻留在内存当中,页表寄存器中存放有页表的始址和页表长度;
当CPU需要读取某一数据时,首先访问内存中的页表,得到对应的物理地址,然后再次访问内存得到所需数据,所以需要两次访问内存。为提高访问效率,可在高速缓存中存放一快表,快表中存放有部分页号,CPU需要读取数据时,可先在快表中查找相应的页号,如果找不到再到内存了查找。
逻辑地址空间非常大时,页表也会非常大,解决方法:二级页表或只将部分页表调入内存当中。
2)分段式存储:将程序按功能划分为若干大小不同的段,段的存储位置可以不连续。段表结构:段号 段起始地址 段长
分页和分段的区别:页是信息的物理单位,页本身没有实际含义,主要是为了提高内存的使用效率,而段是信息的逻辑单位,段有其完整的的信息,主要是为了满足用户需要;页的大小固定且相等,其大小由系统决定,而段的大小并不固定,其大小由用户所编写的程序决定;页的地址空间是一维的,只有物理块号,而段的地址空间是二维的,不仅有物理段号,还有段内偏移地址;指向同一段数据区,段表的数量一般比页表少,当该数据区需要被多个作业共享时,所需段表的数量会比页表少很多,段更适合信息共享。
3)段页式存储:将每个段分成若干页,地址结构:段号、段内页号、页内地址;CPU读取数据时,首先访问内存上的段表,读取其段起始地址和段长,第二次访问内存上的页表,读取对应的物理块号,最后才会读取到数据,所以需要经过三次访问内存。
5、虚拟存储器
当作业很大或都有大量作业需要运行时,引起内存不足;解决方案:扩展逻辑内存。
1)基础:
局部性原理:即在一较短时间内,程序的执行只局限于某个部分;相应地,它所访问的存储空间也局限于某个区域;
2)虚拟存储:
程序运行之前,没有必要将所有模块装入内存,仅将需要的页或段装入内存,其余部分暂留在盘上;当内存不足时,将暂时不需要的段或页对换到磁盘上;相当于扩展内存。
3)虚拟存储器特征:多次性,一个作业被分成多次调入内存运行;对换性,允许作业在运行时被换出;虚拟性,用户看到的内存容量远大于实际容量;
4)虚拟存储器实现方法:
(I)分页存储管理方式
a、三要素:页表机制、缺页中断机构、地址变换机构
b、页面置换算法:最佳置换算法(所被淘汰的页面将是以后永不使用的,或许是在最长时间内不再被访问的页面,该方法无法实现,只能用于评价其他方法)、先进先出页面置换算法(总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰)、最近最久未使用置换算法(选择最近最久未使用的页面进行置换,需要硬件支持)、最少使用置换算法(选择最近时期他用最少的页面作为淘汰页,需要硬件支持)、页面缓冲算法(将要被淘汰的页暂时不移出内存,而是放移动到一个链表后部,当达到一定数量后再移出)
c、调页策略
调页时间:预调页策略(基于预测)、请求调页策略
从何处调页:外存可以分为两部分,用于存放文件的文件区和用于存放对换页面的对换区。对换区通常是连续存储,而文件区则是离散存储。所以对换区的I/O速度较高。
当对换区空间充足时,程序运行前应将所有页面都拷贝到对换区,需要时,再从对换区换入所需页面。
系统缺少对换区空间时,凡是不会被修改的文件直接从文件区换入,且不必换出,因为不会被修改,再次需要时直接从文件区换入。对于可能被修改的部分,则需要换出到对换区,需要时从对换区换入。
Unix方式,对于未出现过的统一从文件区换入,对于出现过的则从对换区换入。
(II)分段存储管理方式
a、三要素:段表机制、缺段中断机构、地址变换机构
6、分段共享:设置一共享段表,维护每个段共享的进程数count,当count==0时,该段可以被回收。