操作系统之内存管理

内存管理部分

内存管理

逻辑地址:CPU所生成的地址

物理地址:内存单元看到的地址,用户程序绝不会看到的

逻辑地址–>MMU(内存管理单元)–>物理地址

连续内存分配:位每个进程分配一个连续的内存区域

首次适应、最佳适应、最差适应。

外部碎片:总的可用的内存之和可以满足请求,但是不连续

内部碎片:分配但未使用

分页

将物理内存分为固定大小的块,称为帧,逻辑内存也划分同样大小的块,称为页

1561364082754

分页是有内部碎片的,因为最后一帧可能用不完

TLB:

1561364454926

有效访问时间:EAT = (1 + e) a + (2 + e)(1 – a) = 2 + e – a

分段

程序相关的数据被划分为一个段,有段号+段偏移

1561365336756

1561365427153

以上是分段和分页结合

虚拟内存

感觉好多我都在ucore的实验报告中写过还很详细,不想写了,求求你摇了我吧。

两个特点:进程中所有存储器访问都是逻辑地址,这些逻辑地址在运行时被转换为物理地址。 一个进程可以划分为许多块,在执行过程中,这些块不需要连续地位于主存中

两个效果:主存中保留多个进程,进程可以比主存的全部空间还大

按需调页:只有程序需要时才载入页,那些从未访问的页不会调入到物理内存中

一种极端的情况就是所有的页都不在内存中,就开始执行进程,进程会立即出现页错误,并不断地出现页错误直到所有所需的页均在内存中

性能评价:

有效访问时间:参照页

copy on right:ucore做过

页面置换算法:具体在另一篇博客介绍了

FIFO:

算法:总是淘汰最先调入主存的那一页,或者说在主存中驻留时间最长的那一页(常驻的除外)。

理由:最早调入内存的页面,其不再被访问的可能性最大。

最佳替换算法(OPT):

算法:调入一页而必须淘汰一个旧页时,所淘汰的页应该是以后不再访问的页或距现在最长时间后再访问的页

特点:不是实际可行的算法,可用来作为衡量各种具体算法的标准,具有理论意义。

最近最少使用算法(LRU):

算法:淘汰的页面是在最近一段时间里较久未被访问的那页。

原理:根据程序局部性原理,那些刚被使用过的页面,可能马上还要被使用,而在较长时间里未被使用的页面,可能不会马上使用到。

颠簸

新进程–全局置换算法–页错误–调页–大家都出现页错误–设备不多–就绪队列变空–cpu利用率下降–增加多道程序———系统颠簸

频繁的也调度行为称为颠簸,若一个进程在换页上所用的时间多于执行时间,那么这个进程就在颠簸。

1561366840612

通过局部置换算法(或优先置换算法)能够限制系统颠簸。

Global replacement – process selects a replacement frame from the set of all frames; one process can take a frame from another

Local replacement – each process selects from only its own set of allocated frames

全局置换算法—不能控制其页错误率,有着更好的吞吐率;

局部置换算法—不能利用其它进程的空闲内存;

局部模型:研究进程实际正在使用多少帧

-------------本文结束有空来玩-------------
坚持原创技术分享,您的支持将鼓励我继续创作!