第四章 存储器管理

创建进程的第一件事便是:将程序和数据装入内存。

将一个用户源程序变为一个可在内存中执行的程序:首先要编译,由编译程序将用户源代码编译成若干目标模块;其次是链接,由链接程序将目标模块和需要的库函数链接在一起形成一个完整的装入模块;最后是装入,由装入程序将装入模块装入内存。
   
将装入模块装入内存的方式有:绝对装入方式,可重定位装入方式和动态运行时装入方式。
   
采用
可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同。在装入时对目标程序中的指令和数据的修改过程成为重定位。
  
 动态运行时装入,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行,该方式需要一个重定位寄存器的支持。
    链接的方式有:静态链接,装入时动态链接和运行时动态链接。
   
连续分配方式是指为:一个用户程序分配一个连续的内存空间,进一步可分为单一连续分配,固定分区分配,动态分区分配以及动态重定位分区分配四种方式。
  
 单一连续分配是:把内存分为系统区和用户区两部分。
   
固定分区分配是:将内存用户空间划分为若干固定大小(分区大小可等可不等)的区域,每个分区只装一道作业。
  
 通常按分区大小排队:建立一张分区使用表,给程序一个能满足要求又尚未分配的分区。
    动态分区分配中的数据结构可采用:空闲分区表和空闲分区链两种。
    分区分配算法有:首次适应算法,循环首次适应算法和最佳适应算法。
    最佳适应算法是:将空闲分区大小从小到大形成一个链,最先适应的必然是最佳的。但是这种分配算法通常会导致切割下来的剩余空间最小,而产生许多难以利用的小空闲区。
    分配内存时看:是否剩下的空间大于事先规定的不再切割的剩余分区的大小,而回收内存时根据前后是否是空闲分区决定是否需要合并。
    动态重定位分区分配是:指将空闲分区紧凑成连续空闲区分配给需要的程序,同时修改有关数据结构使已经被分配空间的程序能继续正常运行。
    对换,是指:把内存中暂时不能运行的进程或暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程需要的程序和数据调入内存。
    以整个进程为单位的对换称为:整体对换进程对换。以为单位的对换分别称为页面对换分段对换
    为实现进程对换,系统必须具有以下功能:对换空间的管理,进程的换出,进程的换入。
   
将一个进程直接分散装入到许多不相邻接的分区中,则无须再进行紧凑
此谓离散分配方式,离散分配的基本单位是,对应于分页/段存储管理方式。
    分页存储管理是:将一个进程的逻辑地址空间分为若干大小相等的片,称为页面或页。
    分页大小应适中,太小会使进程的页表过长,占用大量内存;太大会使页内碎片增大。
    分页地址中的地址分为两部分:前一部分为页号P,后一部分为位移量W(页内地址)。
   
系统为每个进程建立了一张页面映象表,简称
页表其作用是实现页号到物理块号的映射。即使在最简单的页表系统中,也设置一存取控制字段,用于保护该存储块中的内容。
   
地址变换机构的任务:只是将逻辑地址中的页号,转换为内存中的物理块号。地址变换的任务就可以借助于页表来完成。
   
页表通常驻留在内存中,而系统中只设置一个页表寄存器PTR来实现页表功能。
    快表又称:“联想寄存器,是为了:提高地址变换速度而增设的一个具有并行查寻能力的特殊高速缓冲寄存器。此时,在CPU给出有效地址后,首先将页号与联想寄存器中的页号对比,如果有,就直接读出对应物理块号送物理地址寄存器,若无再访问内存中的页表。
    两级页表和多级页表是为了:防止页表占有太大内存空间而对页表结构再进行分级。
    分段存储管理方式的引入主要是为了满足以下需要:方便编程,信息共享,信息保护,动态增长,动态链接。
    分段存储管理方式中,作业的地址空间被划分为:若干个段,每个段定义了一组逻辑信息。例如,有主程序段MAIN,子程序段X,数据段D及栈段S等。
 
  段的长度由:相应的逻辑信息组的长度决定,因而各段长度不等。
   
段的数据结构可分为两部分:段号和段内地址。一般情况下,段比页大。
   
系统为每个进程建立了一张段表,用于实现从逻辑段到物理内存区的映射。
   
分段系统和分页系统有很多相似之处,但在概念上完全不同,主要表现在以下三个方面:1页是信息的物理单位,是为了满足系统管理的需要,而段是信息的逻辑单位,是为了满足用户的需要;2页的大小固定且由系统决定,而段的长度不确定,取决于用户编写的程序;3分页的作业地址空间是一维的,程序员只需利用一个记忆符即可表示一个地址;而分段的作业地址则是二维的,程序在标识一个地址时,既需给出段名,又需给出段内地址。
    分段系统的一个突出优点是:易于实现段的共享,对段的保护也十分简单易行。
   
可重入代码又称纯代码,是:一种允许多个进程同时访问的代码,是一种不允许任何进行对它进行修改的代码。
 
   段页式存储管理方式,是:将用户程序分为段,段再分为页,并为每个段赋予一个段名。
    段页式系统中,地址结构由:段号,段内页号及页内地址三部分组成。
   
虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
    虚拟存储器系统可分为:分页请求系统和分段请求系统。
    虚拟存储器有几大特征:多次性(最重要和特别的特征),对换性,虚拟性。其中,虚拟性是以多次性和对换性为基础的,而多次性和对换性又必须建立在离散分配的基础上。
   
请求分页系统需要:页表机制,缺页中断机构以及地址变换机构。
    页表的基本作用仍是:将用户地址空间中的逻辑地址变换为内存空间中的物理地址,页表项中包括:页号,物理块号,状态位P,访问字段A,修改位M,外存地址。
  
 缺页中断与一般中断的区别:在指令执行期间产生和处理中断信号;一条指令在执行期间,可能产生多次缺页中断。
    请求分页系统中的地址变换机构及其运行流程。(P130
    内存中的物理块分配策略包括:固定分配局部置换,可变分配全局置换,可变分配局部置换。固定分配指固定为某进程分配n个物理块,缺页就要对换;可变分配指可以动态地增加分配给某进程的物理块数。局部置换指只能换出本进程的其他物理块,全局置换指可以先将需要的信息换到系统的空闲物理块中,仅当空闲物理块快用完时换出系统中任一物理块。
  
 物理块分配算法包括:平均分配算法,按比例分配算法,考虑优先权的分配算法。
    页面调入时机的确定可分为:预调页策略和请求调页策略。
    从何处调入页面的确定可分为:1全部从对换区调入所需页面;2凡是不会修改的文件,都直接从文件区调入,可能修改的部分,便须调到对换区;3Unix方式,未运行过的页面,从文件区调入,运行过但又被换出的页面,由于放在对换区,因此下次从对换区调入。
    页面置换算法包括:最佳置换算法(理想化算法Optimal),先进先出置换算法(FIFO),最近最久未使用置换算法(LRU),Clock置换算法(简单型NRU和改进型),最少使用置换算法(LFU),页面缓冲算法(PBA)。(P137
    请求分段管理所需的硬件支持:有段表机制,缺段中断机构,以及地址变换机构。
    请求分段段表项有:存取方式,访问字段A,修改位M,存在位P,增补位,外存始址。
  
 增补位是:请求分段管理中特有的字段,用于表示本段在运行过程中是否做过动态增长。
    请求分段系统中的缺段中断处理流程和地址变换过程。(P139
   
共享段表中的共享进程计数count记录有多少个进程需要共享该分段。
    共享段表中的存取控制字段定义了不同进程的不同的存取权限。
   
共享段表中的段号让不同的进程可以以不同的段号去共享该段。
    共享段的分配与回收:对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求过程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把count置为1,之后又有其他进程需要调用该共享段时,只需在调用进程的段表中,增加一表项,填写该共享段的物理地址,在共享段的段表中,填上调用进程的进程名、存取控制等,再将count1。回收共享段时,将count1,若结果为0,则由系统回收该共享段的物理内存,取消在共享段表中该段所对应的表项。
  
 分段保护的措施:越界检查,存取控制检查,环保护机构。
 
  环保护机构的规则:1一个程序可以访问驻留在相同环或较低特权环中的数据;2一个程序可以调用驻留在相同环或较高特权环中的服务。