概要
- (1)分区式存储管理
- (2)分页式存储管理
- (3)分段式存储管理
- (4)段页式存储管理
- (5)覆盖与交换
- (6)虚拟存储技术
如何把这些知识点串起来呢?很简单:要存储数据得要有分配方式吧,首先想到的就是连续分配,简单呀。但是连续分配的灵活性不好,如果一个进程要在之前的基础上增加存储空间,但是按照连续型存储方式的特点,之后的存储空间可能已经被其他进程的数据占了。所以,我们想到了不连续型分配(分页、分段、段页)。但是存储空间总是有限的,如何利用有限的空间运行更多的进程。OK,覆盖和 交换技术就排上了用场。运行完了的程序对后面的程序没有影响了,我可以把它覆盖呀,不覆盖的话,我与你进行交换也行呀。每次人类都是不断优化,所以就有想到虚拟存储技术,借助大容量的外存来扩展内存,这不比覆盖与交换还好用?
1.存储管理的任务
1.1保护——防止地址越界
一般由硬件提供一对寄存器:
基址寄存器:存放起始地址
限长寄存器:存放长度
或上界寄存器和下界寄存器
1.2内存扩充
通过虚拟存储技术实现,具体实现是在硬件支持下,软硬件相互协作,将内存和外存结合起来使用
1.3地址转换
又称地址映射,即逻辑地址到物理地址的转换。有动态和静态的地址转换机制。
2.分区存储管理方案
分区管理是能满足多道程序运行的最简单的存储管理方案。其基本思想是把内存划分成若干个连续区域,称为分区,每个分区的大小可以相等,也可以不等,每个分区装入一个运行程序。
2.1固定分区
系统先把内存划分成若干个大小固定的分区,一旦划分好,在系统运行期间不再重新划分。
2.2可变分区存储管理方案
可变分区是指系统不预先划分固定分区,而是在装入程序时划分,使为程序分配的分区的大小正好等于该程序的需求量,且分区的数量是可变的。
2.3分区存储管理的实现
三种分配算法:
- 首次适应(first fit):在空闲区表中找到第一个满足进程要求的空闲区
- 最佳适应(best fit):查找整个空闲表,找到能够满足进程要求的最小空闲区
- 最坏适应(worst fit):总是分配满足进程要求的最大空闲区
适用的数据结构:空闲区表、空闲区队列
大小(KB) | 首地址 |
12 | 156 |
28 | 200 |
2.4分区管理方案的优缺点
优点:内存利用率比固定分区的内存利用率高;简单易行,内存成为共享资源;存储保护机制简单
缺点:碎片问题(外碎片);内存利用率不高,受实际内存容量限制,不能为用户提供“虚存”,即不能实现对内存的“扩充”;要求运行程序一次性全部装入内存,才能开始运行
2.5“碎片”问题解决
紧凑技术
通过在内存移动程序,将所有小的空闲区域合并为大的空闲区域
问题:系统开销大,需要移动大量信息浪费了许多处理机时间
3.页式存储管理方案
3.1基本思想
- 内存分块:把内存划分成若干个大小相等的内存块,即物理页面,页框,从0开始编号,第0块,第一块
- 用户程序分页:把用户进程的逻辑地址空间按照物理页面大小划分为若干页面,称逻辑页面,简称页,从0开始编号,第0页,第1页
- 内存分配原则:用户程序的任一页装入内存的任一块,那么一个程序分的内存块不一定是连续的
- 进程的最后一页往往装不满一块,形成碎片,称“内碎片”,内存的大小不会操过一块,程序运行完毕后,系统自动回收
- 逻辑地址
3.2管理
3.2.1页表
系统为每个进程建立一个页表,页表给出逻辑页号和具体内存块号对应关系。页表放在内存系统区内,页表所在内存的起始地址和长度作为现场信息放在进程控制块中。
3.2.2地址映射过程
物理地址=内存块号×块长+页内地址
例题:
3.2.3 快表的引入
相联存储器——快表
引入快表的目的:提高地址映射速度
3.2.4分页存储管理的优缺点
优点:不要求用户程序连续存放,有效解决了碎片问题,提高了内存的利用率;有利于组织多道程序执行。
缺点:不利于程序和数据的共享。因为分页的过程对用户是透明的,用户不知道能共享的部分存在哪;虽然消除了碎片,但每个程序的最后一页总有一页有一部分空间得不到利用;页的长度由内存的大小决定,用户程序去适应存储器的需要,使得一些程序划分在逻辑上不完整。
4.段式存储管理方案
紧接上文,用户希望根据自己的需要划分程序为若干段,所以提出了段式管理方案。
4.1基本思想
4.2段表
4.3段地址映射过程
5.分段存储管理与分页管理比较
同:
- 实现地址非连续分配
- 都要通过地址映射机构来实现地址映射
异:
- 谁适应谁
6.段页式存储方案
6.1产生背景
- 分页解决了存储器的空闲区碎片问题,有效提高地提高了存储器的利用率
- 分段面向用户,实现动态链接,方便用户共享程序和数据
- 结合两者的优点
6.2基本思想
7.覆盖技术和交换技术
7.1背景
内存不够用
覆盖技术:早期的操作系统中
交换技术: 被广泛用于小型分时系统中,导致了虚拟内存的出现
覆盖技术:把程序划分成若干个功能上相对独立的程序段,按照其自身的逻辑结构将那些不会同时执行的程序块共享同一块内存区域
7.2两者的区别
8.虚拟存储技术
8.1虚拟存储器的基本思想
利用大容量的外存来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间,以便能有效地支持多道程序系统的实现和大型程序运行的需要,从而增强系统的处理能力。
8.2虚存
把内存与外存有机的结合起来使用,从而得到一个容量很大的“内存”,就是虚存。
8.3与交换技术的区别
交换技术交换的对象一般是进程;而虚拟存储一般是页或段,是对一个进程占用系统内存空间的进一步划分
8.4页面置换算法
最佳页面置换算法OPT:淘汰以后不再需要的或最远的将来才会用到的页面
先进先出页面置换算法FIFO
最近最少使用页面置换算法 LRU
【例图】某个页面采用页式虚拟存储管理方式的系统,接受了一个共7页的作业,作业执行时依次访问的页号为1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6.采用FIFO算法,LRU算法,作业在得到两块内存空间和4块内存空间时各产生多少次缺页中断?
【题解】
【FIFO 内存块2】
1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 | |
块1 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 1 | 3 | 7 | 6 | 3 | 2 | 1 | 1 | 3 | 6 |
块2 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 2 | 1 | 3 | 7 | 6 | 3 | 2 | 2 | 1 | 3 | |
是否缺页 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 |
【LRU 内存块2】
1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 | |
块1 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
块2 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 1 | 3 | 7 | 6 | 3 | 2 | 1 | 1 | 3 | |
是否缺页 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 是 | 是 |
【总结】FIFO和LRU在存在缺页的情况下淘汰策略是一样的,但是在不是缺页的情况下,FIFO是保持内存块中存储的页面不变,但是LRU要把当前找到的页面调到队尾,(队头的内存块中的页面最先被淘汰,因为队头存的是最早到来的)这样才能保证在之后不会最早被淘汰。
【FIFO 内存块4】
1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 | |
块1 | 1 | 2 | 3 | 4 | 4 | 4 | 5 | 6 | 2 | 1 | 1 | 3 | 7 | 6 | 6 | 2 | 1 | 1 | 3 | 3 |
块2 | 1 | 2 | 3 | 3 | 3 | 4 | 5 | 6 | 2 | 2 | 1 | 3 | 7 | 7 | 6 | 2 | 2 | 1 | 1 | |
块3 | 1 | 2 | 2 | 2 | 3 | 4 | 5 | 6 | 6 | 2 | 1 | 3 | 3 | 7 | 6 | 6 | 2 | 2 | ||
块4 | 1 | 1 | 1 | 2 | 3 | 4 | 5 | 5 | 6 | 2 | 1 | 1 | 3 | 7 | 7 | 6 | 6 | |||
是否缺页 | 是 | 是 | 是 | 是 | 否 | 否 | 是 | 是 | 是 | 是 | 否 | 是 | 是 | 是 | 否 | 是 | 是 | 否 | 是 | 否 |
【LRU 内存块4】
1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 | |
块1 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | 6 |
块2 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 2 | 1 | 2 | 3 | 7 | 6 | 3 | 2 | 1 | 2 | 3 | |
块3 | 1 | 2 | 3 | 4 | 2 | 1 | 5 | 6 | 6 | 1 | 2 | 3 | 7 | 6 | 3 | 3 | 1 | 2 | ||
块4 | 1 | 1 | 3 | 4 | 2 | 1 | 5 | 5 | 6 | 1 | 2 | 2 | 7 | 6 | 6 | 6 | 1 | |||
是否缺页 | 是 | 是 | 是 | 是 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 是 | 是 | 是 | 否 | 是 | 是 | 否 | 否 | 否 |
8.5颠簸(抖动)
在虚存中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。