内存管理基础
概念
操作系统对内存的划分和动态分配
功能:
- 内存空间的分配和回收
- 地址转换
- 内存空间的扩充,虚拟存储技术或自动覆盖技术
- 内存共享
程序的链接和装入
源程序变为可执行程序
- 编译,编译程序将用户源代码编译成若干目标模块
- 链接,将编译后形成的一组目标模块和需要的库函数连接在一起,形成完整的装入模块
- 装入,装入程序将装入模块装入内存
链接方式:
- 静态链接
- 装入时动态链接
- 运行时动态链接
装入方式:
- 绝对装入
- 可重定位装入,装入时对目标程序中的指令和数据地址修改的过程称为重定位
- 动态运行装入
逻辑地址和物理地址
逻辑(相对)地址:编译后,每个目标模块都从0号单元开始编址
逻辑地址空间:链接程序将多个模块链接成一个完整的可执行的目标程序,链接程序顺序依次按各模块的相对地址构成统一的0号单元开始的逻辑地址空间
物理地址空间:内存中的物理单元的集合,地址转换的最终地址
地址重定位:逻辑地址转换为物理地址
进程的内存映像
进程的要素在能存中怎么放
- 代码段,只读
- 数据段
- PCB
- 堆
- 栈
内存保护
- CPU中设置上、下限寄存器
- 重定位寄存器(基址寄存器,含最小物理地址)和界地址寄存器(限长寄存器,含最大逻辑地址)
内存共享
只读才能共享
内存的分配和回收
覆盖与交换
多道程序环境下扩充内存的方法
- 覆盖,将用户空间分为固定区和若干覆盖区,经常活跃的放在固定区,剩余按逻辑分段,即将访问放在覆盖区,其他放外存,用到再调入
- 对换,把处于等待状态的程序从内存移到外存
连续分配管理方式
为一个用户分配一个连续的内存空间
单一连续分配
内存分为系统区和用户区,系统区仅共操作系统使用,低地址;用户区内只有一道程序
固定分区分配
将用户内存空间分为固定大小,每个分区装一个,大小可以相等可以不等
动态分区分配,可变分区分配
根据进程需要分配正好适合进程大小的内存
- 首次适应算法
- 邻近适应算法,循环首次适应算法
- 最佳适应算法
- 最坏适应算法
基本分页存储管理
不会外部碎片
基本概念
- 页面和页面大小,进程中的块称为页、页面,内存中的块称为页框、页帧、内存块、物理块、物理页面,外存也同样大小划分,称为块、盘块
- 地址结构,页号,页内偏移地址
- 页表,每个进程一张,存放内存中,通过该表找到物理块号
基本地址变换机构
书上图片
具有快表的地址变换机构
书上图片
两级页表
页表的页表
基本分段存储管理
分段
按自然段分逻辑空间
段表
逻辑空间向内存空间的映射
段号(不用显示记录),段长,段始址
地址变换机构
书上图片
段的共享和保护
段共享由两个作业中的段表项指向被共享的一个物理副本实现。
段页式管理
先分段(保护逻辑特点),再在段内分页
段号,页号,偏移量
段表包含,段号、段长、页表起始地址
页表包含,页号、块号
虚拟内存管理
基本概念
传统存储管理方式特点
- 一次性
- 驻留性
局部性原理
虚拟内存定义和特征
访问信息不在内存,从外存调入,将暂时不适用的内存,调出到外存。好像提供了比一个实际内存容量大得多的存储器,叫虚拟存储器
- 多次性
- 对换性
- 虚拟性
请求分页存储管理
- 页表
- 页号
- 物理块号
- 状态位P,是否已调入内存
- 访问字段A,访问次数,用于调度算法
- 修改为M,写回?
- 外存地址
- 缺页中断机构,与一般中断不同,为内部异常,一条指令可能多次缺页中断
- 地址变换机构
请求分段存储管理
请求段页式存储管理
页框分配
- 驻留集,给一个进程分配的物理页框集合
- 内存分配策略,局部置换,自己进程内换一页,固定分配,进程总空间不变;全局置换,系统从空闲物理块队列拿一块,可变分配,进程总空间可变;
- 固定分配局部置换
- 可变分配局部置换
- 可变分配全局置换
- 物理块调入算法,固定分配局部置换,系统怎么分配物理块
- 平均分配算法
- 按比例分配算法
- 优先权分配算法
- 调入页面时机
- 预调页策略
- 请求调页策略
- 从何处调入,外存由文件区(离散分配)和对换区(连续分配)
- 足够对换区空间,全部
- 缺少对换区空间,修改?
- UNIX方式,未运行文件区,曾经运行换出,对换区
- 如何调入页面
页面置换算法
- OPT
- FIFO
- LRU
- CLOCK,简单的CLOCK,改进的CLOCK
抖动与工作集
- 抖动
换出又换入,根本原因,同时运行进程太多,每个进程分配到的物理块太少。
- 工作集
某个时间间隔内,进程要访问的页面集合,由时间和工作集窗口大小确定,站在往前看
内存映射文件
Memory-Mapped Files,将磁盘的全部或者部分内容与进程虚拟地址空间的某个区域建立映射关系,用访问内存的方式访问外存