存储器管理
分类:
文章
•
2025-03-15 08:21:39
- 多道程序并行带来的问题
共享
保护(不允许内存中的程序相互间非法访问)
- 基本概念
(1) 存储器的层次结构
多级存储结构

存储层次越往上,存储介质的访问速度越快,价格也越高,相对存储容量也越小;
寄存器、高速缓存、主存储器和磁盘缓存均属于操作系统存储管理的管辖范畴,掉电后它们存储的信息不再存在;
固定磁盘和可移动存储介质属于设备管理的管辖范畴,它们存储的信息将被长期保存。
①寄存器
cpu是计算机的大脑,数据的运算都在这里发生,既然需要计算数据,就需要提供计算的场所,也就是寄存器,CPU的寄存器不仅能存储数据,还具备对数据进行运算的能力。
②主储存器
主存储器(简称内存或主存)是计算机系统中一个主要部件,用于保存进程运行时的程序和数据,也称可执行存储器,其容量对于当前的微机系统和大中型机,可能一般为数十MB到数GB,而且容量还在不断增加,而嵌入式计算机系统一般仅几十KB到几MB。
③高速缓存
程序执行的局部性原理(即程序在执行时将呈现出局部性规律,在一较短的时间内,程序的执行仅局限于某个部分),将主存中在某个时间段一些经常访问的信息存放在高速缓存中,减少访问主存储器的次数,可大幅度提高程序执行速度。
④磁盘缓存
将频繁使用的一部分磁盘数据和信息,暂时存放在磁盘缓存中,以减少访问磁盘的次数。
(2) 基本原理
当内存太小不够用的时候,用辅存来支援内存;
暂时不运行的模块换出到辅存上,必要时在换入内存。
(3) 程序的装入和链接

为什么要编译和装入模块?我这里理解时操作系统向用户程序提供了一个接口,所以需要根据这个接口规范包装成目标模块再装入内存?(有待商榷)
-
存储管理的功能
1)地址映射
①定义
把程序中的地址(虚拟地址/虚地址/逻辑地址)变换成内存的真实地址(实地址/物理地址/cpu通过地址总线能真实访问到的地址)的过程。也叫地址重定位或者地址重映射。
eg:我们在程序中定义一个整形变量int a,这个a会在内存中被分配一个8字节的存储空间,a便是这块内存的标识,也就是虚地址,通过编译器,会把a转化为虚拟地址,然后通过地址映射找到该变量的真实地址。
②方式
1 固定地址映射
定义:编译或编译时确定逻辑地址和物理映射地址映射关系(在源代码中直接指明对应的物理地址,或者在编译时绑定物理地址)
特点:程序加载的时候必须放在指定内存;容易产生地址冲突导致运行失败。
2 静态地址映射
定义:
程序装入时由操作系统完成逻辑地址到物理地址的映射。
逻辑地址VA(Virtual Addr.)
装入地址BA(Base Addr.)即程序被装入内存的起始地址
物理地址MA(Memory Addr.)
MA = BA + VA
特点:
程序再运行之前确定映射关系,程序装入后不能移动,如果移动必须放回原来位置,程序占用连续的内存空间。
3 动态地址映射
定义:
在程序执行过程中把逻辑地址转化为物理地址
eg:MOV AX, [500]; 访问500单元时执行地址转化
映射过程也是MA = BA + VA,如果程序有移动,BA可能会有改变,自动计算新的MA。
特点:
程序占用的内存空间可连续变化,要求及时更新BA;
程序不要求占用连续的内存空间,每段放置基址BA系统应该知道;
便于多个进程共享代码,共享代码作为独立的一段存放。
需要硬件支持(MMU:内存管理单元)
2)虚拟存储
①解决的问题
程序过大或过多时,内存不够,不能运行;
多个程序并发时地址冲突,不能运行。
②虚拟内存的概念
虚拟内存是面向用户的虚拟封闭存储空间。
线性地址空间;
容量4G=232Byte;
封闭空间(进程空间,每个线程独有一个);
和物理地址分离(地址无冲突);
程序员编程时使用线性虚拟地址;
③虚拟内存管理的目标
使得大的程序能在较小的内存中运行;
使得多个程序能在较小的内存中运行;
使得多个程序并发运行并没有地址冲突
使得内存利用率较高:无碎片,共享方便。
3)内存分配
为程序运行分配足够的内存空间。
①需要解决的问题:
放置策略:程序调入内存时将其放置在哪个/哪些内存区?
调入策略:何时要把运行的代码和要访问的数据调入内存?
淘汰策略:内存不够时,淘汰哪些代码或数据以腾出空间?
4)存储保护
保证在内存中的多道程序只能在给定的存储区域活动并互不干扰。
防止访问越界,防止访问越权。
方法:界址寄存器:在cpu中设置一对下限寄存器和上限寄存器存放程序在内存中的下限地址和上限地址,程序访问内存时硬件自动将目的地址与这两对寄存器中存放的地址界限比较,判断是否越界。