一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++
[第五章]存储器管理
- 磁盘属于设备管理,功能属于文件管理
背景知识对换类型覆盖存储器的层次结构内存管理目的程序的编译和链接装入方式程序的链接连续分配存储管理方式单一连续分配固定分区分配可变(动态)分区分配数据结构分配算法索引式搜索算法回收非连续(离散)分配分页存储管理内存分配页表页大小页内地址映射存储器管理中的信息保护快表慢表两级页表和多级页表反置页表小结分段存储管理段表段地址映射越界快表分段系统中对程序和数据的共享小结段页存储管理存储管理方式
背景知识
对换
- 把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间;
- 再把已具备运行条件的进程或进程所需的程序或数据,调入内存。
类型
- 整体对换
- 页面(分段)对换
- 为了支持虚拟存储系统
覆盖
为了解决程序大小超过内存大小的问题
- 只在内存中保留那些在任何时间都需要的指令和数据
- 程序的不同部分在内存中相互替换。
- 程序员声明覆盖结构,操作系统无需特别支持
- 应用于早期的操作系统
存储器的层次结构
- 存储区
- 高速缓存
- 主存
- 磁盘缓存(硬件来说属于外存,如果作为虚拟内存,功能上属于内存)
- 磁盘
- 可移动存储介质
内存管理目的
- 方便性
- 合理性
- 有效性
程序的编译和链接
- 编译 编译程序→目标模块
- 链接 目标模块和库函数一起装入模块
- 装入 程序将模块装入内存
装入方式
- 绝对装入
- 装入模块中的绝对地址装入内存
- 仅适用单道环境
- 可重定位装入方式
- 把逻辑地址(程序地址)变换成物理地址(内存地址),让多程序得以执行
- 地址映射,将装入模块装入到内存的适当地方
- 动态运行时装入
- 基地址寄存器BR、程序地址寄存器VR、内存地址寄存器MR
程序的链接
- 静态链接
- 程序运行前
- 地址映射,修改相对地址
- 动态链接
- 边装入边链接
- 运行时链接
- 执行时需要
连续分配存储管理方式
一个用户程序分配一个连续的内存空间
单一连续分配
- 内存中只有一个程序
- 操作系统和用户共享RAM
- 嵌入式操作系统使用
固定分区分配
- 划分为若干个固定大小的分区,每个分区一个作业
- 分区方法:大小相等,不等
- 内存分配管理:分区使用表
- 作业大小和频率若不知道,分区和作业相差可能很大,影响系统效率
可变(动态)分区分配
数据结构
分区表
分区链
分配算法
- 首次适应法
- 划分:空闲首址递增 次序组织空闲区表(队列)
- 回收:按释放区首地址查询表,若有相邻空闲,合并空闲区
- 特点
- 找第一个满足的分区
- 地址内存使用频繁
- 缺点:有外零头
- 优点:高地址端可能保留大的分区
- 循环首次适应
- 从一个查找指针开始(上次查找的空闲区下一个)
- 效率比首次适应高
- 最佳适应
- 按照从小到大排序
- 满足要求最小的空闲区
- 缺点:产生大量碎片
- 优点:保留大空间
- 最坏适应法
- 从大到小分配
- 缺点:后面没有大的空闲区了
- 优点:碎片少
索引式搜索算法
- 快速适应
- 从小到大排序,建立索引
- 伙伴算法
- 分区大小为2的k次幂,不同区大小形成k个链
- 分配长度为n的空间,就找2刚好比n大
- 如果找不到就分割比n大的2空间,然后分割成2.的大小并补充到伙伴表中
- 回收:合并
- 哈希算法
- 空闲区大小为关键字的哈希表
回收
- 相邻空闲区合并,合并后插入相应位置,没有相邻new一个表目
- 紧凑;重定位,移动相邻不远的空闲区
非连续(离散)分配
分页存储管理
离散分配的单位是页,分页存储。内存空间也划分成若干个大小相同的块
- 划分大小相等的部分,称页
- 大小为页长
- 页内地址是相对于首地址
- 访问两次内存
- 逻辑地址(页面):(高位页号,低位页内偏移量)
- 根据页的大小划分为物理地址为大小相等的块(内存块、物理页面、页框)
- 页表存放了页和物理块之间的转化关系
内存分配
地址映射:根据页表,找到逻辑地址对应的物理块起始地址+页面偏移量
- 逻辑相邻,物理不一定相邻
- 逻辑地址长度一定,页号范围影响页内地址大小
页表
页号、块号、其他信息保护信息
- 下标为页号
- 为每个进程建立一个页表
- 长度和首地址放在PUB中
- 运行进程的页表驻留内存,其首地址和长度由页表长度寄存器、页表始址寄存器指示
页大小
- 2
- 太大浪费
- 太小页表过长
页内地址映射

- 2K+452bit
- 放到第2K中意味着前两页已经放满
- 页号0 - 1k
- 页号1- 1k
- 页号2页内地址为452bit →块号7 →7K+452bit
- 给出的地址字为10进制,则用公式:
程序地址字/页长,商为页号,余数为页内地址。
- 例如程序地址为8457, 页长为4KB,则8457/4096可得:商为2,余数为256。
存储器管理中的信息保护
- 越界
- 0≤页号<程序地址空间的页数
- 越权
- 存取控制字段:读/写、只读和只执行
快表
把部分页表放在一组具有并行查寻能力的特殊高速缓冲寄存器中,加快访问内存速度
- 相联(联想)存储器
- 页号;内存块号;标识位;淘汰位

引入快表前EAT= t + t = 2t
引入快表后:
- 快表查询时间
- 命中率a
- 查询页表所需时间t
慢表
存放在内存中的页表称为慢表
两级页表和多级页表
反置页表
小结
- 优点
- 解决外部碎片问题
- 便于管理
- 缺点
- 存在内部碎片
- 不容易实现共享
分段存储管理
离散分配的单位是段,分段存储。内存空间若干长度不等的区域
- 根据逻辑管理划分为若干个程序段
- 逻辑地址:(高位段号,低位段内地址)
- 访问两次内存
- 内存分配:以段为单位分配,每个段在内存中占连续空间,但之间可以不连续存放
- 内存划分:内存空间被动态划分为若干个长度不同的区域,称为物理段

段表
段号、段的长度、段的首址(基址)、存取状态
- 段号是下标
- 每一进程有个段表
- 存放在进程自己的PCB
段地址映射

越界
- 段号越界
- 段内偏移量越界
快表

分段系统中对程序和数据的共享
便于共享,因为每个段是完整的一个内容
小结
- 优点
- 段为信息逻辑单位,便于动态申请
- 管理和使用统一化
- 便于信息共享
- 便于动态链接
- 缺点
- 产生外部碎片
- 分段与分页技术的比较

段页存储管理
用户程序用先分段再分页,内存分页,按页号放入内存
- 访问三次内存
- 逻辑地址

存储管理方式

Prev
[第四章]进程同步
Next
[第六章]虚拟存储器
Loading...