操作系统内存管理
来源:互联网 发布: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):跟踪进程的工作集,以确保在让进程运行以前,它的工作集就已经在内存中了。
根据工作集模型推导出一个合理的页面置换算法
工作集时钟页面置换算法
对工作集页面置换算法的改进
小结
- 操作系统内存管理
- 操作系统内存管理
- 操作系统内存管理
- 操作系统内存管理
- 操作系统实验-内存管理
- 操作系统八内存管理
- 操作系统内存管理浅见
- 操作系统--内存管理
- 操作系统原理内存管理
- 操作系统内存管理
- 操作系统概念-内存管理
- 操作系统概念-内存管理
- 操作系统内存管理
- 操作系统-------内存管理(1)
- 操作系统 内存管理
- 操作系统 内存管理-虚拟内存
- 操作系统内存管理
- 操作系统内存管理
- Android App耗电量统计
- windows上安装tensorflow
- PCIe设备漫游记----BIOS篇
- 算法3:动态规划(二)——背包问题
- css垂直居中
- 操作系统内存管理
- 高精度加法
- 基于直方图均衡化的激光水下图像处理
- leetcode -- Binary search (5)
- Node.js+express的接口适配get和post并输出json
- js 实现循环里延迟加载或者延迟方法
- 对json数组进行排序和filter过滤
- caffe安装记录
- PowerDesigner打印错误