3.1 存储管理基本概念
- 计算机中的存储体系
- 存储管理目标及任务
- 连续存储区管理方案
- 分区存储的管理方案
- 存储覆盖与交换技术
一、计算机中的存储体系
(1)金字塔体系
越往上的存储越快,价格越高;
越往下的存储越慢,价格越低;
(2)主存储器(内存)
内存空间是由存储单元组成的一维连续的地址空间;
内存中存放代码及数据等信息;
一般来说,主存储器被分为两个区域:1、系统区 2、用户区
系统区存储操作系统本身的核心代码和数据;
用户区存储用用户进程、相关代码和数据;
二、存储管理目标及任务
(1)目标:
充分的利用内存空间,为进程的并发执行提供存储支持;
方便用户使用,让用户不用考虑硬件细节;
(2)功能任务
实现内存空间的管理、分配和回收
实现逻辑地址到物理地址的自动转换
实现多个进程间的信息共享与通信
实现多个进程隔离和信息保护
实现内存和辅存的协同使用
(3)地址重定位
在功能任务中,有一条是逻辑地址到物理地址的转换,这就是地址重定位(地址映射);
例如:
假设有一个程序,程序员使用高级语言编写,经过编译器编译之后,编译系统会为程序赋予一个逻辑地址空间(逻辑地址空间一般是从0开始的);
目标程序要被执行的话,必须被装载到内存空间中的某一特定区域去,此时就需要将逻辑地址转换成为物理地址;
(LOAD是汇编中的一个指令,用于读写数据)
地址的转换主要依赖基址寄存器(BR),基址寄存器中存放着逻辑地址在物理地址中的起点(类似于偏移量),用基址寄存器的值加逻辑地址就是物理地址, CPU必须要依赖物理地址才能找到数据和代码;
三、连续存储区管理方案
在早期单道环境中,系统使用单一连续存储管理;
内存中任然被分为系统区和用户区,但是用户区中一个时刻里只能装一个作业,一个作业结束了新的作业才能装入;
系统会有一个装入程序将作业队列中的作业放入用户区;
系统中有一个栅栏寄存器,存放界限地址,用以区别用户区和系统区,用户作业的物理地址就是界限地址 + 逻辑地址;
然而单道环境并不能支持并发操作;
四、分区存储的管理方案
(1)存储分区:
系统把内存用户区划分为若干分区,而不再是一整个连续区域
分区大小可以相等,也可以不相等;
一个进程只占据一个分区,一个分区中只能容纳一个进程;
存储分区有两种方案:
1、固定分区存储
2、可变分区存储
(2)固定分区存储
系统预先将内存分割成若干个连续的区域(每个物理分区在逻辑上和物理上都是连续的);
如果有一个进程要被创建使用内存,系统要先判断内存中是否有足够大的能容纳下该进程的空闲分区,然后才能分配给该进程;如果没有合适的空闲分区,则该进程不能被创建,会被阻塞掉,直到有合适的空闲分区;
每一个用户进程在使用分区的时候都会受到空间大小限制,每一个分区都有一个下限寄存器和上限寄存器(可以理解为分区空间的上下界),用来限制进程使用的物理地址空间;
一旦进程要访问不属于该分区的物理地址时,系统会出现越界中断;
分区的管理:
为了管理相应的分区,系统会有一个分区表格包含分区的各类信息;当有进程要创建时,系统首先查询的就是分区表中的分区信息来判断有无合适空闲空间;
如图:
优缺点:
固定分区管理简单容易实现,但是内存利用率低,不够灵活
利用率低表现在:某分区被分配之后,空间不一定会变为完全利用,系统中会有很多大大小小的没被使用的空间;
不够灵活体现在:固定的分区可能不足以满足进程后续的对内存的动态申请;
(3)可变分区
-
内存不预先划分好
-
根据需求和内存空间来分配(按需分配)
如图:
为了管理好可变分区,系统有两张表: 1.空闲分区表 2.已分配分区表
(已分配分区表的状态是使用该空间的进程名)
通过这两张表的协作,就可以管理好内存空间,如果有一个新进程要使用内存空间,只需要修改两张表即可;
优缺点:
相较固定分区灵活了不少;
但是内存回收的时候要进行空间的合并,还要修改相关的管理表格(空间的合并修改比较复杂)
内存碎片:反复分配回收后,会产生很多不连续的小空闲块;
因此就希望有一个技术能够将内存碎片紧凑化;(紧凑技术)
五、存储覆盖与交换技术
(1)覆盖技术
引入原因:
在多道环境下常常需要扩充内存,解决在较小的存储空间中运行较大、较多进程时的矛盾;(内存不够用)
进程的程序和数据主要放在外存,需要执行的部分放在内存,内外存之间进行信息交换;
覆盖技术:
进程的若干程序段、数据段等共享同一存储空间;(同一个空间在不同时间被不同进程使用,分时的共享同一个存储空间)
要实现进程间的彼此覆盖,就要求各个模块之间明确的调用结构,并向系统指明;
例如:
有一个模块A的调用关系如图示树形结构:
由于模块的调用有时序性(即一个模块在同一时间内只能调用一个子模块,若干个子模块不能同时被调用),因此B和C模块所占用的内存空间是可以相互覆盖的,D、E和F模块占用的内存空间是是可以相互覆盖的;
如图所示:
通过分时覆盖技术,可以大大减少进程所需的内存空间
(2)交换技术
覆盖技术是单个进程内部各模块之间的分时内存覆盖,而交换技术是多个进程分时共享内存储空间;
以进程为单位,在内外存之间动态的调度
需要在外存中设置一个盘交换区(swap分区)
牛
谢谢,我还要努力QAQ