3.内存管理
3.1概述
(1)什么是内存管理?存储管理有哪些功能?
操作系统对内存的划分与动态分配
内存分配与回收:由操作系统完成主存储空间的分配和管理
地址映射:把逻辑地址转换为相应的物理地址
内存共享:允许多个进程访问内存的同一部分
存储保护:保证各道作业在各自的存储空间内运行,互不干扰
内存扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存
(2)物理地址和逻辑地址的概念?
物理地址(绝对地址):主存储器中每个存储单元的地址,信息在存储器中的实际存放地址
逻辑地址(相对地址):允许在程序中编排的地址
(3)程序的编译、链接和装入
编译:由编译程序将用户源代码编译成若按目标模块
链接:由链接程序将编译后形成的一组目标模块及他们所需的库函数链接在一起,形成一个完整的装入模块
静态链接:在程序运行之前,先将各目标模块及他们所需要的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开
装入时动态链接:将各目标模块装入内存时,边装入边链接
运行时动态链接:在程序执行过程中需要该目标模块时,才对他进行链接
装入(重定位):由装入程序将装入模块装入内存中运行,一个经过编译链接的程序存在于自己的虚拟地址空间中,当要运行时才把他装入自己的内存空间中,这时需要将程序中的逻辑地址转换成主存中侧物理地址,这个转换过程即为重定位技术
绝对装入:程序中的逻辑地址和实际内存地址完全相同,不需对程序和数据的地址进行修改,只适用于单道程序运行环境
可重定位装入:地址变换通常在进程装入时一次完成,一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存就不能装入该作业,作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间
动态运行时重定位:在程序装入时保留逻辑地址不变,在程序执行过程中,CPU执行到具体的指令时,才将要访问指令的逻辑地址转换为物理地址
3.2分区分页分段管理技术
什么是连续分配方式和非连续分配方式
连续分配:为用户进程分配的必须是一个连续的内存空间
非连续分配::为用户进程分配的可以是一些分散的内存空间
分区存储管理
(1)什么是外碎片和内碎片?
外碎片:指还没有被分配出去,但是由于太小了无法分配给申请内存空间的新进程的内存空闲区域
内碎片:指已经分配出去,但是没有被利用的内存空间
(2)固定分区分配的特点
分区大小相等:缺乏灵活性,但很适合用于一台计算机控制多个相同对象的场合
分区大小不等
优点:实现简单,无外部碎片
缺点:当用户程序太大时,可能所有的分区都不能满足要求,需要采用覆盖技术解决,会降低性能
(3)动态分区分配的特点及其中的算法
动态分区分配:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小
动态分区的分配算法
首次适应算法(First fit)
循环首次适应算法(Next Fit)
最佳适应算法(Best Fit)
最坏适应算法(Worst Fit)
(4)覆盖与对换的概念
覆盖:把一个程序划分为一系列功能相对独立的程序段,让执行时不要求同时装入内存的程序段组成一组(称覆盖段),共享主存的同一个区域。
对换:把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够内存空间,再把已具备运行条件的进程和进程所需要的程序和数据调入内存
(5)进程的换入和换出规则
外存分为文件区和对换区
文件区用于存放文件,采用离散分配方式
对换区用于存放从内存换出的进程,进程在对换区中驻留的时间是短暂的,采用连续分配方式
换出:选择处于阻塞状态且优先级最低的进程作为换出进程,然后启动盘块,将该进程的程序和数据传送到磁盘对换区上
换入:系统检查所有进程的状态,从中找出就绪状态但已换出的进程,将其换出时间最久的进程作为换入进程
(6)分页的概念
把进程的逻辑地址空间分为若干个大小相等的片,称为页面或页,相应的也把内存空间划分为大小相等的存储块,称为块或页框,在为进程分配内存时,以块为单位将进程中的若干页分别装入到多个可以不相邻的物理块中
分页存储器的逻辑地址:(页号,页内地址)
(7)什么是页内碎片?页面太大太小有什么特点?
页内碎片:进程的最后一页装不满而形成的不可利用的碎片
页面太大,可减少页表长度,提高页面换进换出速度,却会使页内碎片增大
页面太小,可使页内碎片减小。但会使每个进程占用更多页面,从而导致页表过长,占用大量内存,还会降低页面换进换出的效率
(8)页表的概念和组成
给定逻辑地址A,页面大小为L,页号P = INT[A/L],偏移量A % L
(9)分页存储地址变换机构
地址变换机构任务:将逻辑地址转换为内存中的物理地址
在系统中通常设置一个页表寄存器(PTR),存放页表在内存中的起始地址及页表长度
若页表全部放在内存中,则存取一条数据或指令至少要访问两次内存,第一次是访问页表,确定所存取数据或指令的物理地址,第二次是根据得到的物理地址存取指令或数据
存在的问题
(1)每次访存操作都需要进行逻辑地址导物理地址的转换,影响计算机处理速度
(2)每个进程引入页表用于存储映射机制,页表不能太大,否则内存利用率低
(10)引入快表的地址变换机构
快表:访问速度比内存块很多的高速缓冲存储器
单级页表存在的问题
(1)页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
(2)没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面
(11)两级页表的概念和地址变换机构
将页表在内存中离散存储,为离散分配的页表再建立一张页表,称为页目录表(外层页表,顶层页表)
(12)基本分段存储管理的概念
分段系统中逻辑地址结构是二维的(段号S,段内偏移W)
(13)段页式管理
在段页式系统中,作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后将每段分成若干大小固定的页
注意!:在一个进程中,段表只能有一个,而页表可以有多个
(14)分页和分段的区别和联系
相同点
- 都采用离散分配方式
- 都要通过地址映射机构来实现地址变换
区别
- 分页是出于系统管理的需要,分段是出于用户应用的需要
- 页大小是系统固定的,段大小通常不固定
- 分页逻辑地址表示是一维的,分段是二维的
- 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度
- 分段比分页更容易实现信息的共享和保护
3.3虚拟内存技术
(1)什么是虚拟存储器?
具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
(2)虚拟内存容量问题
虚拟内存的最大容量是由CPU寻址范围确定的
虚拟内存实际容量 = min(内存外存容量之和,CPU寻址范围)
例:某计算机地址结构为32位,内存大小512MB,外存大小2GB
虚拟内存最大容量为
2
32
=
4
G
B
2^{32} = 4GB
232=4GB
虚拟内存实际容量=min(4GB,512MB+2GB) = 512MB+2GB
(3)虚拟存储器的特征
- 多次性
- 对换性
- 虚拟性
- 离散分配,部分安装
(4)虚拟内存的实现
页表机制:
请求页表数据结构
页号 | 内存块号 | 状态位 | 访问字段 | 修改位 | 外存地址 |
---|---|---|---|---|---|
缺页中断:因为当前执行的指令想要访问的目标页面未调入内存而产生的,属于内中断
(5)调入策略
(6)什么是局部性原理?
局部性原理:程序在执行过程中的一个较短时期,所执行的指令的地址和指令操作数的地址分别局限于一定区域
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行,如果某个数据被访问过,不久之后该数据可能被再次访问
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元很有可能被再次访问
(7)什么是抖动?产生抖动的原因是什么?
抖动(颠簸):刚刚换出的界面马上就要换入内存,刚刚换入的页面马上就要换出内存,这种频繁的页面调度行为
主要原因:进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)
为进程分配的物理块太少,会使进程发生抖动现象
为进程分配的物理块太多,会降低系统整体的并发度,降低某些资源的利用率
(8)驻留集和工作集
驻留集:请求分页存储管理中给进程分配的内存块的集合
工作集:指在某段时间间隔里,进程实际访问页面的集合
驻留集的大小不能小于工作集的大小,否则进程运行过程中将频繁缺页
(9)页面分配、置换和清除策略
(10)页面置换算法
(11)Belady异常
当为进程分配的物理块数增大时,缺页次数不减反增的异常现象
只有FIFO算法会产生Belady异常