第四章 存储器管理
程序的装入和链接
程序的装入
1. 绝对装入方式(Absolute Loading Mode)
2. 可重定位装入方式(Relocation Loading Mode)
3. 动态运行时装入方式(Denamle Run-time Loading)
在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。
程序的链接
1. 静态链接方式(Static Linking)
2. 装入时动态链接(Loadtime Dynamic Linking)
3. 运行时动态链接(Run-time Dynamic Linking)
将对某些模块的链接推迟到执行时才执行,亦即,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存, 把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上.
连续分配方式
单一连续分配:最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中。
固定分区分配
动态分区分配
1. 分区分配中的数据结构
(1)空闲分区表。
(2) 空闲分区链。
2. 分区分配算法
(1)首次适应算法FF。
(2) 循环首次适应算法,该算法是由首次适应算法演变而成的。
(3) 最佳适应算法。
3. 分区分配操作
4.可重定位分区分配
(1)动态重定位的引入(紧凑的示意)
(2)动态重定位的实现
(3)动态重定位分区分配算法
对换(Swapping):把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。对换是提高内存利用率的有效措施。
基本分页存储管理方式
页面与页表
1. 页面
分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。
在分页系统中的页面其大小应适中。页面若太小,一方面虽然可使内存碎片减小,从而减少了内存碎片的总空间,有利于提高内存利用率,但另一方面也会使每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存; 此外,还会降低页面换进换出的效率。然而,如果选择的页面较大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择得适中,且页面大小应是2的幂,通常为512 B~8 KB。
2. 地址结构
3. 页表
地址变换机构
1. 基本的地址变换机构
2. 具有快表的地址变换机构
两级和多级页表
1. 两级页表(Two-Level Page Table)
逻辑地址结构可描述如下:
两级页表结构
具有两级页表的地址变换机构
基本分段存储管理方式
分段存储管理方式的引入
引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:方便编程、信息共享、信息保护、动态增长、动态链接;
分段系统的基本原理
1. 分段
分段地址中的地址具有如下结构:
2. 段表
利用段表实现地址映射
分段系统的地址变换过程
分页和分段的主要区别
(1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2)页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3)分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
段页式存储管理方式
1. 基本原理
作业地址空间和地址结构
利用段表和页表实现地址映射
2. 地址变换过程
虚拟存储器的基本概念
局部性原理
(1)时间局限性。如果程序中的某条指令一旦执行, 则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问。产生时间局限性的典型原因,是由于在程序中存在着大量的循环操作。
(2)空间局限性。一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
请求分页存储管理方式
请求分页中的硬件支持
1. 页表机制
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址 |
2. 缺页中断机构
涉及6次缺页中断的指令
3. 地址变换机构
页面置换算法
最佳置换算法和先进先出置换算法
1. 最佳(Optimal)置换算法
最佳置换算法是由Belady于1966年提出的一种理论上的算法。 其所选择的被淘汰页面,将是以后永不使用的, 或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。
2. 先进先出(FIFO)页面置换算法
最近最久未使用(LRU)置换算法
1. LRU(Least Recently Used)置换算法的描述
Clock置换算法
简单的Clock置换算法
请求分段存储管理方式
请求分段中的硬件支持
1. 段表机制
段名 | 段长 | 段的基址 | 存取方式 | 访问字段A | 修改位M | 存在位P | 增补位 | 外存始址 |
2. 缺段中断机构
3. 地址变换机构