存储管理:

1)  所谓虚拟存储技术,即在内存中保留一部分程序或数据,在外存(硬盘)中放置整个地址空间的副本。程序运行过程中可以随机访问内存中的数据或程序,但需要的程序或数据不在内存中时,就将内存中的部分内容根据情况写回外存,然后从外存调入所需程序或数据,实现作业内部的局部对换,从而允许程序的地址空间大于实际分配的存储区域。

虚拟存储器允许用户用比主存容量大得多的地址空间来编程,以运行比主存实际容量大得多的程序。用户编程所用的地址称为逻辑地址(虚地址),而实际的主存地址称为物理地址(实地址)。

2)虚拟存储器可以分为单一连续分区、固定分区、可变分区、可重定位分区、非请求页式、请求页式、段页式7种。

现在,最常见的虚存组织有分段技术、分页技术、段页式技术3种,如下表:

 

段内偏移也称为段内地址,页内偏移也称为页内地址。

例如,某页式存储系统的地址变换过程如下图所示:

 


假定页面的大小为8KB,上图所示的十进制逻辑地址9612经过地址变换后,形成的物理地址a应该是十进制多少呢?(腾讯2010暑期实习的笔试题)

首先贴下图吧:(页式存储管理的地址映射)


 


因为8KB=2的13次方,所以页内地址有13位。逻辑地址9612转换成二进制得到10 0101 1000 1100,这里的低13位是页内偏移量,最高一位是页号;所以逻辑地址9612的页号为1,如图的对照表可知,对应的物理块号是3(二进制11)。把物理块号和页内偏移地址拼合得到110 0101 1000 1100(前两位是物理块号,后13位是页内偏移量),再转换成十进制,得到25996


3)虚拟存储管理的理论基础是程序的局部性原理。程序的局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,程序的执行仅限于程序的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性又表现为时间局部性和空间局部性。

根据程序的局部性理论,Denning提出了工作集理论。工作集是指进程运行时被频繁访问的页面集合。


在虚存的管理中涉及载入(调入)、放置(放入分区)和交换等问题:

1)  调入策略:即何时将一页或一段从外存中调入主存,通常有两种策略,一是请求调入法,即需要使用时才调入;另一种是现行调入法,即将预计要使用的页/段现行调入主存。

2) 放置策略:即调入后,放在主存的什么位置,这与实存管理基本一致。

3) 置换策略:当发生缺页中断时,需要进行置换。常见的置换算法有:

最优算法(OPT:淘汰不用的或最远的将来才用的页。这是一种理想算法,不可能实现,只能用来作为衡量算法效率的参照物;

随机算法(RAND):随机淘汰,这种算法开销小,但性能不稳定;

先进先出算法(FIFO):选择最早调入也是驻留时间最长的页;

最近最少使用算法(LRU):选择离当前时刻最近的一段时间内使用得最少的页。

例如,某虚拟存储系统采用LRU页面淘汰算法,假定系统为每个作业分配3个页面的主存空间,其中一个页面用来存放程序。现有某作业的部分语句如下:

Var A : Array[1...150, 1...100] OF integer;

            i, j : integer;

FOR i:=1 to 150 DO

            FOR j:=1 to 100 DO

                     A[i, j] := 0;

设每个页面可存放150个整数变量,变量i,j放在程序页中。初始时,程序及变量ij已在内存,其余两页为空,矩阵A按行序存放。

在上述程序片段中,共产生100次缺页中断。这是因为采用了3个页面来存储,由于第一个页面用来存放程序及ij。所以只有两个页面用来存放数组。整个数组有150*100 = 15000个整数,而每一页可存放150个整数变量,所以整个程序执行完,共产生15000/150=100次缺页。因为矩阵A按行序存放,每一行100个整数,最后保留在两个内存页面的内容是矩阵A的最后3行的数值。