第三章-内存管理
第三章-内存管理
内存管理
内存空间的分配与回收
内存空间的扩充
- 实现虚拟性
地址转换
-
-
操作系统负责实现逻辑地址到物理地址的转换
存储保护
-
保证各进程在自己的内存空间运行,不会越界访问
-
两种方式
- 设置上下限寄存器
- 利用重定位寄存器(存放起始物理地址),界地址寄存器(存放最大逻辑地址)进行判断
总结:

覆盖与交换
覆盖技术
-
早期计算机内存很小;后来引入覆盖技术,解决程序大小超过物理内存总和的问题
-
覆盖技术思想:
**将程序分为多个段(多个模块)**
-
缺点: 对用户不透明,增加了用户的编程负担,现在已经很少使用;
交换技术
-
设计思想:内存空间紧张时,系统将内存中某些进程展示换出外存,
把外存中某些已具备运行条件的进程换入内存暂时换出外存等待进程状态为挂起状态
- 细分为
就绪挂起、阻塞挂起
两种
- 细分为
-
交换三问
-
1 应该在外存的什么位置保存被换出的进程?
**放入对换区**
-
2 什么时候应该交换?
- 缺页、内存吃紧、系统负荷
-
3 应该换出哪些进程?
优先把阻塞进程换出、优先级低的进程 、考虑驻留时间
-
-
总结:
连续分配管理
单一连续分配
内存中只能有一道用户程序、用户程序独占整个用户空间
- 优点:实现简单;无外部碎片;可采用覆盖技术扩充内存;不一定需要采取内存保护
- 缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。
固定分区分配
动态分区分配
- 首次适应算法
算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区
- 实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区 表),找到大小能满足要求的第一个空闲分区
- 最坏适应算法(又称最大适应算法)
算法思想:
- 实现:
空闲分区按容量递减次序链接
- 缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。
- 最佳适应算法
- 算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区 域。因此
为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区, 即,优先使用更小的空闲区
- 实现:
空闲分区按容量递增次序链接。
每次分配内存时顺序查找空闲分区链(或空闲分区 表),找到大小能满足要求的第一个空闲分区- 缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片
- 邻近适应算法
- 算法思想:每次都从上次结束位置开始查找的。
分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查
找结束的位置开始检索,就能解决上述问题。
- 实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查
找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
- 总结:
基本分页存储管理
什么是分页存储
-
将空间分为大小相等的分区;每个分区就是一个“页框”(=
页帧=内存块=物理块=物理页面
);
每个页框有一个页框号(=页帧号=内存块号=物理块号=物理页面号)
从0 开始 -
页表
- 页号不占存储空间(类比数组)
-
如何实现地址转换
-
步骤:
-
-
Eg:在某计算机系统中,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址 110 对应的页号、页内偏移量是多少?
-
逻辑地址结构
-
总结:
-
基本地址变换机构
-
-
例题:若页面大小L 为 1K 字节,页号2对应的内存块号 b = 8,将逻辑地址 A=2500 转换为物理地址E。
等价描述:某系统按字节寻址,逻辑地址结构中,页内偏移量占10位,页号2对应的内存块号 b = 8,
将逻辑地址 A=2500 转换为物理地址E。
-
-
总结:
具有快表的地址变换机构
查看 第三章-存储系统-Cache和页式存储
总结:
两级页表
单级页表存在的问题:
问题一:页表必须连续存放,因此当页表很大时,需要占用多个连续的页框。
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
两级页表的原理、地址结构
-
-
- 若分为两级页表后,页表依然很长,则可以采用更多级页表,
一般来说各级页表的大小不能超过一个页面
例:某系统按字节编址,采用 40 位逻辑地址,页面大小为 4KB,页表项大小为 4B,假设采用纯页式存储,则要采用()级页表,页内偏移量为()位
- 若分为两级页表后,页表依然很长,则可以采用更多级页表,
-
总结:
基本分段存储管理
虚拟内存技术
虚拟内存三个特征
如何实现虚拟内存技术?
-
虚拟内存技术,允许一个作业多次调入内存。故而不能采用连续分配方式;
虚拟内存的实现需要建立在离散分配的内存管理方式基础上
-
-
小节:
请求分页管理方式
页面置换算法
-
最佳置换算法(OPT)
每次选择淘汰的页面将是以后永不使用
,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
-
先进先出置换算法(FIFO)
每次选择淘汰的页面是最早进入内存的页面
-
最近最久未使用置换算法
-
淘汰的页面是最近最久未使用的页面
-
性能最接近最佳置换算法,但需要硬件支持,实现困难
;
-
-
时钟置换算法(COLCK)
或称为最近未使用算法(NRU)
- 为每个页面设置一个访问为,再将内存的页面通过链接指针链接成一个循环队列。
-
改进型的时钟置换算法
-
-
小节:
页面分配策略
-
总览
-
驻留集:值请求分页存储管理给进程分配的物理块的集合
-
-
从何处调入页面
-
- -
-
页面抖动颠簸
-
工作集(了解)
-
总结:
内存映射文件
传统文件访问方式
内存映射
可以实现文件的共享
小节:
本文来自博客园,作者:taotooler,转载请注明原文链接:https://www.cnblogs.com/taolo/p/17225859.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构