操做系统以内存管理

操做系统内存管理

1、内存管理策略

1.背景

基本硬件(基地址与界限地址)算法

地址绑定(编译时、加载时、 运行时)数组

逻辑地址空间与物理地址空间spa

memory1.jpg

动态加载操作系统

动态连接与共享库(与静态库对比)线程

2.交换(内存与磁盘间)

维护着一个可运行进程就绪队列,进行内存与磁盘间线程的载入与存出。3d

3.连续内存分配

内存分区之可变分区的思想,将内存分红一个个孔(hole),使用一张表维护hole的使用状况。blog

存在碎片问题(分为外碎片与内碎片)队列

  • 首次适应--首个足够大的孔(50%规则,描述碎片多)
  • 最优适应--最小合适的孔
  • 最差适应--最大孔

外部碎片大,解决思路有 紧缩分页、分段(运行物理地址不连续的策略)进程

4.分段

将内存分为不一样长度的段,维护分段硬件支持段表内存

<段名称s,段偏移d>

memory5.jpg

5.分页

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

<页码p,页偏移> 与对应的页表

memory3.jpg
memory4.jpg

TLB 带Hash页表--转换表缓冲区

保护机制与共享页

memory7.jpg

memory8.jpg

6.页表结构补充

分层页表

哈希页表(数组+链表)

倒置页表

2、虚拟内存管理

1.背景

使用虚拟内存来逻辑内存容量--分配出去但未使用的内存空间,经过伪分配实现扩容。

2.请求调页

概念:仅在须要时,才加载页面。

调页程序--惰性变换器实现

memory9.jpg

通常缺页错误的处理很简单:

  1. 检查这个进程的内部表,以确认该引用是有效的仍是无效的内存访问。
  2. 若是引用无效,那么终止进程。若是引用有效可是没有调入内存,那么如今就调入。
  3. 找到一个空闲帧。
  4. 调度一个磁盘操做,以将所需页面读到刚分配的帧。
  5. 磁盘读取完成,修改进程内部表和页表。以指示该页如今处于内存中。
  6. 从新启动被陷入中断的指令。该进程能访问所须要的页面,就好像原来他就在内存中同样。

memory10.jpg

缺页处理的时间花费主要体如今:处理缺页中断、读入页面、从新启动进程

3.写时复制(父子进程间)

4.页面置换

​ 当用户进程在执行时,可能发生缺页错误。操做系统肯定所须要页面的磁盘位置,可是却发现内存上没有空闲的帧。全部内存都在使用。此时,它会选择交换出一个进程,以释放它在全部帧并下降多道程序。

​ 在没有空闲帧的状况下,那么就要查找当前不在使用的一个帧,并释放它,牺牲帧,他被换出到交换空间,并修改它的页表。能够看到当没有空闲帧的状况下,须要两个页面传输(一个传入,一个传出)。这种状况世界加倍了缺页错误处理时间,并增长了有效的访问时间。 为了减小置换的时间,系统提供了一个修改位,二者的关联采用硬件。每当一个页面内的任何字节被写入时,它的页面修改位会由硬件来设置,以表示该页面被修改过。当要选择一个页面置换时,它会先看这个页面或者帧有没有被修改过,若是没有修改过就不用将它换出,直接进行换入,将它的空间覆盖。

页面置换算法

  • FIFO 先进先出
  • OPT/MIN 最优置换
  • LRU 最近最少使用
  • 近似LRU

    1. 额外引用位算法 (多位标志位)
    2. 第二次机会算法(1位标志位)
    3. 加强型第二次机会算法-分类(元组分类出最近使用与须要写回)
  • 基于计数

    1. LFU 最不常常使用
    2. MFU 最常常使用

      搭配上页面缓冲算法--最近被淘汰的页面被放置在高速磁盘区,减小淘汰错误页面下次换回的代价

5.帧分配

分配算法--平均与比例

全局分配与局部分配(区别,是否面向全部进程的内存暑假页)

6.系统抖动

频繁发生页面置换

7.内存映射文件与IO

相关文章
相关标签/搜索