操作系统 operating system 3
存储管理
该篇博客绝大多数内容基于计算机与操作系统-03-存储管理 | EagleBear2002 的博客,欢迎支持原作者
- 存储管理是操作系统的重要组成部分,负责管理计算机系统的重要资源——内存储器
- 内存空间一般分为两部分:
- 系统区:存放操作系统内核程序和数据结构等。
- 用户区:存放应用程序和数据。
- 存储管理包括以下功能:
- 存储分配:位进程分配内存空间以便运行,完成内存区的分配和去配工作。
- 地址映射:内存被抽象为一维或二维地址空间;逻辑空间到物理空间映射。
- 存储保护:系统隔离分配给进程的内存区,防止地址越界或操作越权。
- 存储共享:系统允许多个进程共享内存区。
- 存储扩充:形成虚拟存储器。
存储管理的基础
逻辑地址
- 逻辑地址:又称相对地址,即用户编程所使用的地址空间
- 逻辑地址从零开始编号,有两种形式:
- 一维逻辑地址(地址)
- 二维逻辑地址(段号:段内地址)
段式程序设计
- 把一个程序设计成多个段:代码段、数据段、堆栈段等等
- 用户可以自己应用段覆盖技术扩充内存空间使用量,这一技术是程序设计技术,不是 OS 存储管理的功能:只是用一些段构成一个比较小的程序,然后动态来调整。
- 结合虚存完成内存部分的扩充
物理地址
从物理地址看到的物理内存单元
- 物理地址:又称绝对地址,即程序执行所使用的地址空间
- 处理器执行指令时按照物理地址进行
主存储器的复用
- 多道程序设计需要复用主存
- 按照分区复用:
- 主存划分为多个固定/可变尺寸的分区
- 一个程序/程序段占用一个分区
- 按照页架复用:
- 主存划分成多个固定大小的页架
- 一个程序/程序段占用多个页架
存储管理的基本模式
- 单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区
- 段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区
- 页式存储管理:一维逻辑地址空间的程序占用多个主存页架区
- 段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区
- 注意是否可以虚拟化
存储管理模式示意图
- 应用级程序员直接面对的是逻辑地址,而最后运行需要使用的是物理地址(从处理器角度看到的物理内存单元)
- 一般目前常用的是动态重定位,将逻辑地址转换为对应的物理地址。
- 分页:形成页框加载程序,页框和页框之间可以是不连续的。
- 分段:每一个段有相应分区,使用段表完成逻辑段向物理段的映射
- 段页式:在分段基础上,还实现了页框部分。
存储管理的功能
地址转换
地址转换:又称重定位,即把逻辑地址转换成绝对地址。
- 静态重定位:在程序装入内存时进行地址转换,将逻辑地址转换为物理地址,再装入内存;由装入程序执行,早期小型 OS 使用,基于地址固定值进行偏移。
- 动态重定位(主流):在 CPU 执行程序时进行地址转换,将逻辑地址转换为物理地址;从效率出发,依赖硬件地址转换机构,运行时正确的将其逻辑地址转换为物理地址。
解释执行指令的时候才进行地址的转换,必须要借助硬件电路完成,而不能用软件完成(效率考量)
主存储器空间的分配与去配
- 分配:进程装入主存时,存储管理软件进行具体的主存分配操作,并设置一个表格记录主存空间的分配情况
- 去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占用的全部或者部分存储空间,调整主存分配表信息
主存储器空间的共享
- 多个进程共享主存储器资源:多道程序设计技术使若干个程序同时进入主存储器,各自占用一定数量的存储空间,共同使用一个主存储器
- 多个进程共享主存储器的某些区域:若干个协作进程有共同的主存程序块或者主存数据块
存储保护
为避主存汇总的多个进程相互干扰,必须对主存中的程序和数据进行保护:
- 私有主存区中的信息:可读可写
- 公共区中的基本信息:根据授权
- 非本进程信息:不可读写
这一功能需要软硬件协同完成:CPU 检查是否允许访问,不允许则产生地址保护异常,由 OS 进行相应处理:
- 地址越界保护依赖于硬件设施、常用的有界地址和存储键。
- 进程在访问分配给自己的内存区时,要对访问权限进行检查。
主存储器空间的扩充
存储扩充:把磁盘作为主存扩充,只把部分进程或进程的部分内容装入内存:扩大多道程序设计的道数
- 对换技术:把部分不运行的进程调出
- 虚拟技术:只调入进程的部分内容,对单一进程不使用对换技术完成,特点是自动化、透明。
这一工作需要硬件协助完成
- 对换进程决定对换,硬件结构完成调入
- CPU 处理到不在主存的地址,发出虚拟地址异常,OS 将其调入,重执指令
进程的内存为 4MB,一个页框 4KB,有 1024 个页框,页框表一共 16 个页框,页的压缩比是$\frac{1024}{16} = 64$。
虚拟存储器的概念
之前所介绍的存储管理,我们称为实存管理,必须为进程分配足够内存空间,装入其全部信息,否则无法运行。
虚拟存储器思想的提出
主存容量限制带来诸多不便:
- 用户编写程序必须考虑主存容量限制
- 多道程序设计的道数受到限制
用户编程行为分析:
- 全面考虑各种情况,执行时有互斥性
- 顺序性和循环性等空间局部性行为
- 某一阶段执行的时间局部性行为
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 软件工程专业技术分享!
评论