操作系统内存管理

来源:互联网 发布:java编程工具 知乎 编辑:程序博客网 时间:2024/05/17 21:51

计算机分层存储体系(memory hierarchy)

  • 高速缓存(cache):昂贵、易失
  • 内存:易失,速度和价格适中
  • 磁盘存储:低速、廉价
  • 可移动存储装置:DVD、USB

操作系统中管理分层存储体系的部分称为存储管理器(memory manager)

地址空间

概念

地址空间是一个进程可用于寻址内存的一套地址集合

每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间

交换技术

把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘。
Ex:
这里写图片描述

内存紧缩(memory compaction):交换在内存中产生了多个空闲区(hole),通过把所有的进程尽可能向下移动,有可能将这些小的空闲区合成一大块。(耗费大量时间)

虚拟内存(virtual memory)

概念

每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或页面(page),每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。

虚拟内存很适合多道程序设计系统中使用,许多程序的片段同时保存在内存中。当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。

分页(paging)

程序中引用了一组内存地址,称为虚拟地址(virtual memory),它们构成了一个虚拟地址空间(virtual address space)。在使用虚拟内存的情况下,虚拟地址被送到内存管理单元(Memory Management Unit,MMU),MMU把虚拟地址映射为物理内存地址,如下图:
这里写图片描述

虚拟地址范围与计算机位宽有关,例如某台计算机可以产生16位地址的计算机,地址范围为0~2^16,即0~64K,且这些地址是虚拟地址。然而计算机内存只有32K物理内存,因此,虽然可以编写64KB的程序,但它们却不能被完全调入内存运行。在磁盘上必须有一个可以大到64KB的程序核心映像的完整副本,以保证程序片段在需要时能被调入内存。

虚拟地址空间按照固定大小划分成称为页面(page)的若干单元。在物理内存中对应的单元称为页框(page frame)。页面和页框的大小通常是一样的。

这里写图片描述

程序通过虚拟地址和物理内存的映射关系,把物理内存中的地址送到总线上。通过恰当地设置MMU,可以把虚拟页面映射到页框中的任何一个。如果程序访问了一个未映射的的页面,会发生缺页中断(page fault)。操作系统找到一个很少使用的页框且把它的内容写入磁盘。随后把需要访问的页面读到刚刚回收的页框中,修改映射关系,然后重新启动引起陷阱的指令。

可用页号作为页表(page table)的索引,以得出对应于该虚拟页面的页框号。

页表

虚拟地址到物理地址的映射可以概括如下:虚拟地址被分为虚拟页号(高位部分)和偏移量(低位部分)两部分。

页面置换算法

当发生缺页中断时,操作系统必须在内存中选择一个页面将其换出内存,以便为即将调入的页面腾出空间。

最优页面置换算法(OPT)

标记:该页面首次被访问前所要执行的指令数作为标记

置换标记最大的页面,这个算法是无法实现的,因为当缺页中断时,操作系统无法知道各个页面下一次将在什么时候访问。这个算法可以用在评估其他可实现算法。

最近未使用页面置换算法(Not Recently Used,NRU)

当发生缺页中断时,操作系统检查所有的页面并根据它们当前状态,分为4类

  • 第0类:没有被访问,没有被修改
  • 第1类:没有被访问,已被修改
  • 第2类:已被访问,没有被修改
  • 第3类:已被访问,已被修改

NRU算法从类编号最小的非空类中挑选一个页面淘汰

NRU的主要优点是易于实现和能够有效地被实现,虽然它的性能不是最好的,但是已经够用了

先进先出页面置换算法

FIFO算法:由操作系统维护一个所有当前在内存中的页面的链表,最新进入的页面放在表尾,最久进入的页面放在表头。当发生缺页中断,淘汰表头的页面并把新调入的页面加到表尾。

很少使用

第二次机会页面置换算法

该算法是对FIFO的改进,如果最老页面没有被使用过则立刻置换掉,如果使用过就将使用或未使用的标志位清0,并把该页面放到链表的尾端,然后继续搜索。

时钟页面置换算法

对第二次机会页面置换算法的改进,把所有页面都保存在一个类似钟面的环形链表,一个表针指向最老的页面。

最近最少使用页面置换算法(Least Recently Used,LRU)

该算法是置换未使用时间最长的页面。

可以实现,但代价很高

工作集页面置换算法

工作集(working set):一个进程当前正在使用的页面的集合

工作集模型(working set model):跟踪进程的工作集,以确保在让进程运行以前,它的工作集就已经在内存中了。

根据工作集模型推导出一个合理的页面置换算法

工作集时钟页面置换算法

对工作集页面置换算法的改进

小结

Tables Are 最优算法算法(OPT) 不可实现,但可用作基准 最近未使用算法(NRU) LRU的很粗糙的近似 先进先出算法(FIFO) 可能抛弃重要页面 第二次机会算法 比FIFO有大的改善 时钟算法 现实的 最近最少使用算法(LRU) 很优秀,但很难实现 最不经常使用算法(NFU) LRU的相对粗略的近似 老化算法 非常近似LRU的有效算法 工作集算法 实现起来开销很大 工作集时钟算法 好的有效算法
0 0
原创粉丝点击