存储器管理概述
存储器可分为内存和外存,CPU不能直接访问外存,但是可以直接访问内存。CPU要访问外存内容的话,只能将访问的数据内容转移至内存,才可以进行访问。
在内存其中,有两个划分的区域,一是系统区,二是用户区,而存储器管理实质上就是管理用户的用户区。
存储体系
寄存器->高速缓存->主存储器->辅助存储器
访问速度依次减缓,容量依次增大。
存储管理功能
固定分区存储管理
基本原理
系统预先把内存中的用户区划分成若干个固定大小的连续区域,每个区域称为一个分区。每个分区可以装入一道程序,每道程序也只能装入一个分区
分区分配表
分区分配表由分区号、分区大小、起始地址以及使用状态组成
分区号 | 分区大小 | 起始地址 | 状态 |
---|---|---|---|
1 | 16KB | 32KB | Job1 |
2 | 32KB | 48KB | 0 |
3 | 60KB | 80KB | Job3 |
分区分配过程
操作系统寻找一个适合程序的分区大小,找到后将该分区的状态改为程序名,不用或者空间时,状态为0
地址转换过程
\(物理地址 = 逻辑地址 + 起始地址\)
可变分区分配管理
基本原理
系统不预先划分固定区域,而是程序装入内存时,根据程序的世纪需要动态地划分内存空间。
分区分配表
空闲分区表:分区序号、起始地址、分区大小以及状态
起始地址 | 大小 | 状态 |
---|---|---|
32KB | 6KB | 0 |
65KB | 18KB | 0 |
100KB | 25KB | 0 |
已分配分区表:分区序号、起始地址、分区大小以及状态
起始地址 | 大小 | 状态 |
---|---|---|
40KB | 24KB | Job1 |
84KB | 15KB | Job2 |
126KB | 21KB | Job1 |
分区分配过程
操作系统寻找一个适合程序的分区大小,找到后将该分区的状态改为程序名,不用或者空间时,状态为0
地址转换过程
\(物理地址 = 逻辑地址 + 起始地址\)
分区分配算法
首次适应算法
要求空闲分区按照首地址递增的顺序排列。每次内存分配时,总是顺序查找空间分区表,找到第一个能够满足要求的空闲分区,按照程序的大小,分割该空闲分区,一部分分配给程序,剩余的仍然留在空闲分区表中。
优点:有利于大作业
缺点:会产生内存碎片,查找的开销大
循环首次适应算法
要求空闲分区按照首地址递增的顺序排列。每次内存分配时,不再从表头开始查找,而是从上次分配的空闲分区的下一个空闲分区开始顺序查找,直到找到第一个满足要求的空闲分区,分割这个空闲分区,并分配给程序。
优点:空闲分区分布较为均匀,查找开销小
缺点:缺少较大的空闲分区
最佳适应算法
要求将空闲分区按从小到大的顺序排列。每次内存分配时,从表头 开始查找 第一个能满足程序或作业要求的最小空闲分区,分割该空闲分区给该程序,剩余的空闲分区仍保留再表格中,并更新空闲分区表。
优点:有利于大程序
缺点:产生内存碎片,查找开销大
最坏适应算法
与最佳适应算法刚好相反,要求空闲分区按从大到小的顺序排列的。每次内存分配时,总是查找空闲表表头的最大空闲分区进行分割,分配后的剩余空闲分区不至于太小而成为内存碎片,从而容易满足以后程序的要求
优点:不易产生碎片,有利于中、小程序,查找效率高
缺点:影响大程序的分配
可重定位的分区存储管理
引入原因:处理内存碎片
紧凑(拼接) :将多个分散的小空闲分区拼接成大空闲分区
特点:紧凑技术,提高内存的利用率
内存分配: 若内存中存在满足程序或作业所要求的空闲分区,则按照可变分区分配方式分配内存; 若内存中找不到满足程序或作业要求的空闲分区,但剩余空闲分区大小总合超过作业的 要求,则实施紧凑技术,拼接出空闲区域,再进行分配。
地址转换:用户程序再装入内存时,程序中所引用的地址仍然是逻辑地址。因为当内存拼接时用 户程序中的位置会发送变化,所以当程序执行时,才将逻辑地址转换为物理地址。
基本分页存储管理
基本概念
页面和页框:在进程实体中,将进程的逻辑地址空间分成等大小的区域,每个区域称为“页面”。在内存中,将物理地址空间分成等大小的区域,每个区域称为“页框”。
相应的,各个页面还是页框加以编号,从0开始,以这种区域块为单位,将进程分割,放入内存中。要进行类比的话,要把五升水,倒入五个一升的瓶子。五升水是进程,逻辑上将其分成五份,每一份是一升,每一份视为一个“页面”。这样同理,每一个瓶子都可以视为“页框”。
页面:
页框:
逻辑地址结构:(页号page,页内偏移量offset)
通过逻辑地址获取页号:page=逻辑地址/页的大小
通过逻辑地址获取逻辑地址在页内的偏移量:offset=逻辑地址mod页的大小
页表
用于记录程序页面在内存中存放情况,即该程序的页面与物理块之间的对应关系
页表结构:(页号,块号)
页号 | 块号 |
---|---|
0 | 2 |
1 | 4 |
地址转换
\(物理地址=页号*页大小+页内偏移量\)
内存分配过程
改进措施
CPU访问内存两次:
第一次是访问内存中的页表
第二次是获取内存中对应的数据或指令
快表:指存放在告诉缓冲寄存器中的页表。
二级页表:将页表再次进行分页。
基本分段存储管理
段页式存储管理
引入原因
分页存储管理解决了碎片问题,单位考虑用户需求
分段存储管理方便了用户使用,但可能产生内存碎片
内存分配和回收
把将要回收的分区成为回收区,则要在回收区的上邻和下邻进行关注,如有空间区,则将其和会收区合并为大的空闲区。
地址变换:逻辑地址->物理地址
内存共享
内存保护
内存扩充:虚拟存储技术
地址变换
物理地址(绝对地址):是内存中存储单元的编号
逻辑地址(相对地址):用户程序中指令的编号
地址转换(地址重定位):指将用户使用的逻辑地址转换为内存空间中物理地址的过程。
物理地址=(内存中随机给定位置)起始地址 + 逻辑地址
地址重定位的两种方式
静态重定位
程序执行前,将指令和数据的逻辑地址一次性全部转换为物理地址
动态重定位
程序执行过程中需要访问数据时再进行地址变换