内存管理
bss段、data段、text段
不在可执行文件中:
栈:1、存放局部变量 2、保存和恢复现场
堆:动态内存分配
存储管理的基石:地址独立、地址保护
存储分配:直接指定、动态分配、静态分配
单道程序的内存管理:
静态地址翻译
多道程序的存储管理
分区式分配
1、固定(静态)式分区分配
分区大小相等/不等
单一队列分配/多队列
采用:分区表
id/size/addr/status
2、可变(动态)式分区分配
闲置空间管理:
(1)位图表示法(分区表)
每个分配单元一个位
(2)链表表示法(分区链表)
P/ADDR/SIZE/NEXT
分区分配算法
基于顺序搜索的分配算法
1、First Fit
2、Next Fit
3、Best Fit
4、Worst Fit
基于索引搜索的分配算法
快速适应算法(分类搜索法)
按容量大小分类、经常用到+管理索引表
内部碎片:
外部碎片:内存系统性能下降的主要原因
紧凑技术
通过移动作业把多个分散小分区拼接成一个大分区
实现支撑:动态重定位(重定位寄存器)
多重分区分配
一个作业多个片段不同区域
存储保护
界限寄存器法:上下界寄存器方法/基址、限长(BR,LR)寄存器方法
存储保护键方法:保护键(锁)-->每个存储块 保护键(钥匙)-->作业
覆盖和交换技术(小内存运行大程序)
覆盖:把一个程序分成一系列功能相对独立的程序段,执行时不要求同时装入内存的程序段,共享主存
减少一个程序运行空间
交换:暂时不用的程序/数据交换出去
操作整个程序,让出内存空间
进程:程序+数据
分页式存储管理
逻辑地址连续的程序分散存放到不连续的内存区域
纯分页系统:无页面对换 无虚存
所有页一次性装入。
页面大小:
小:碎片少,页表占用内存大,换进换出速度降低
大:碎片大,占用内存小,换进换出速度快
数据结构
进程页表
物理页面表:整个系统
请求表:整个系统,进程页表的位置和大小,可以结合到PCB
页表:
页表寄存器:页表始址+长度
地址变换机构
(1)逻辑地址=页号+页内地址
(2)页表长度>页号
(3)页表始址+页号-->块号
(4)块号+页内地址-->物理地址寄存器
一级页表:
解决存储空间大:
动态调入页表
多级页表
快表
ASID--为进程提供地址空间保护
哈希页表
反置页表
pid/p(逻辑地址)
页共享与保护
保护:
1、地址越界保护
2、设置保护位
共享
段式存储管理
方便编程、信息共享(段式信息的逻辑单位)、信息保护(一个也能有两个不同子程序段代码)、动态增长、动态链接
段表
段表寄存器(段表始址+段表长度)
地址变换机构
段号+段内地址
信息共享:可重入代码(纯代码)
段页式存储管理
断号+段内页号+页内地址
每个进程一张段表
每个段一张页表
段表寄存器(段表始址+段表长度)
地址变换机构
(1)从PCB取出段表始址和段表长度,装入reg
(2)段越界判断
(3)段表项=页表始址+页表长度
(4)页越界判断
(5)页表项
(6)物理块号+业内地址
虚拟存储管理
基本原理:程序装入时。不必全部读入内存,只需经当前需要执行的部分页或段读入
请求调入和置换功能
特征:离散性/多次性/对换性
请求式分页系统:
交换分区:按页划分的一段连续的磁盘空间。物理内存不够时,把内存中暂时不用的数据,存到交换空间。
进程空间到虚拟空间的映射(进程的虚存分配)
分配以段为单位
创建虚拟内存布局,建立好虚拟内存和磁盘文件的映射
虚拟存储器的管理
调入问题:
预调页
按需调页
缺页中断:
现场保护、页面定位、权限检查、新页面调入、旧页面写回、更新页表、恢复现场、继续执行
页面置换策略
OPT、FIFO、LRU
Second Chance:
Clock算法
LRU算法
硬件实现:所在行1,所在列0
AGING算法
工作集与驻留集管理
进程工作集:
当前正在使用的页面的集合
进程驻留集:
每个进程驻留在内存的页面集合/进程分到的物理页框的集合
工作集的定义:W(t,▲)
工作集大小变化:随着访问新页面-->工作集稳定-->局部性区域变化-->快速扩张/收缩-->再次趋于稳定
驻留集的管理
页面分配策略:
固定分配策略:
可变分配策略