操作系统之内存管理

来源:互联网 发布:ug8 0数控编程视频教程 编辑:程序博客网 时间:2024/06/07 06:49

内存管理的功能有
1)空间分配与回收
2)地址转换
3)空间扩充
4)存储保护

将数据与程序装入内存分以下步骤
1)编译成模块
2)链接模块 分静态、装入时动态、运行时动态链接
3)将模块装入内存 分绝对装入、可重定位装入、运行时动态装入

逻辑地址与物理地址
存取数据时是使用物理地址获取数据,多个进程可以享用同一个逻辑地址,因为同一个逻辑地址可以映射到不空的物理地址

操作系统通过重定位寄存器与界寄存器实现内存保护
if(逻辑地址 < V(界寄存器)){
物理地址=逻辑地址+V(重定位寄存器)
}

扩充内存来提高程序的执行效率、内存利用率、系统吞吐量,主要有覆盖内存与交换内存两种方式,覆盖主要用户单程序,现代计算机主要使用的交换技术主要用于多进程的并发,换入换出也就是进程的中级调度(作业调度,中级调度,进程调度)

内存连续分配方式
1)单一连续分配 单道程序简单分配 但利用率低
2)固定分配 多道程序的简单分配 但浪费多
3)根据一定算法动态分配 浪费少且适用多进程 但碎片多
动态分配的算法有:
首次适应:查找开销大
最佳适应:需要遍历 且容易产生外部碎片
最坏适应:需要遍历且容易导致大内存块缺失
邻近适应:会导致之前片段无法分配而闲置

内存连续分配方式(碎片少)
1)分页分配 分为固定分页与请求分页(半页碎片)
2)分段分配

分页分配通过页表映射物理地址,也太小导致页表大,页太大导致半页碎片增大,通过使用快表解决每次获取数据的两次内存查询带来的效率问题,快表类似于mysql的查询缓冲,采用二级页表(将页表在分页存储)来解决页表过大导致的内存使用率降低的问题。

分段分配中,按照程序自然段划分逻辑空间,每个段内的地址是连续的,段与段之间是非连续的。分段同分页类似,通过段表映射物理地址,而每个分段中又可以用分页的方式进行存储。分段能反映程序逻辑结构,利于共享,分页提高内存利用率

分段与分页的保护方式都是存取保护+越界保护

局部性原理
局部性原理表现在两个方面
时间局部性:针对常常访问的数据
空间局部性;针对常常访问数据的邻近数据(依据簇聚存储)
局部性原理是重要的指导思想,不管在程序效率上还是数据存取上,高速缓存器就是基于局部性原理设计

虚拟内存的特性
1)多次性
2)对换性
3)虚拟性
注:程序进程在请求外纯的时会发生中断

请求分页的方式实现虚拟内存
请求分页原理类似于内存的分页分配,其页表项增加了状态位、修改位、访问字段位,外存地址位,其需要计算机拥有的硬件条件有内外存,中断机制,地址转换,分页机制。

请求分页的地址转换过程大概如下
请求->保护->查找内存->快表->分页表
如果不在内存中则:
请求外存->中断->保留现场->获取外存->内外存交换->内存页表修改
如果请求外存后,没有足够内存的情况下才会根据一定的算法来进行内外存的数据交换
内存置换算法有以下几种
1)最佳置换算法(OPT) 无法实现
2)先进先出算法(FIFO) Belady异常
3)最近最久未使用算法(LRU) LRU性能较好,但需要寄存器和栈的硬件支持
4) 时钟算法(CLOCK) 类似LRU,性能优良,就是在数据上增加访问以及修改的信息得出最少被使用的数据

页面分配策略
1)固定分配局部置换
2)可变分配全局置换
3)可变分配局部置换

调入页面的时机有预调入(命中率是问题)与请求调入(增大了I/O)

1 0
原创粉丝点击