计算机操作系统 - 内存管理
内存管理
分页系统地址映射
内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的**页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)**的映射表。
一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。
下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2,读取表项内容为(110 1),页表项最后一位表示是否存在于内存中,1 表示存在。后 12 位存储偏移量。这个页对应的页框的地址为 (110 000000000100)。
2.1、虚拟内存管理
虚拟内存管理包括:虚拟内存概念、请求分页管理方式、页面置换算法、页面分配策略、工作集和抖动。
2.1.1、虚拟内存概念
虚拟内存是一种存储模式,通过这种模式能让我们有种感觉,即:我们的内存本身能够处理远比内存大的多的数据或者文件。
虚拟内存能够处理比本身更大的数据的原理其实非常简单,你可以简单理解为按需加载,在操作系统里面这种方式有个专有的称呼:Demand Paging,这是虚拟内存管理的一种最常见的策略。
能这么做的原因是存储在磁盘上的文件,在底层都会按照固定大小的page进行划分,我们在使用cpu处理磁盘上的文件的时候,并不是一下会把整个文件都载入内存,而是当用到这部分数据的时候才会去加载,也就是说一个page被拷贝进主内存的触发机制是:
这块数据需要被加载
当发生操作系统发起缺页信号时
也就是说在虚拟内存里面,我们可以开辟一个固定大小的区域用来处理相关的数据,在加载数据时,如果这个区域没有满,就直接读满,如果满了之后,系统要读取新的page时,会发现这个page不在虚拟内存里面,就会发起一个缺页信号,为了读取新的数据进入内存,我们可以释放掉前面已经处理过的数据,然后加载新的page替代被淘汰数据的page占的位置,被淘汰page的处理,我们可以直接丢弃,也可以将其再次保存在磁盘上存储,防止将来还需要读取。
2.1.2、页面置换算法
前面提到,如果在内存里面申请的固定空间满了,会淘汰一部分page然后替换为新的page,这里面的这个算法非常关键,算法的好坏决定了内存要和磁盘发生swap的次数,这个次数直接直接影响了程序的性能。
缓存驱逐(过期)算法常用的策略有三种,分别是:
2.1.2.1、先进先出策略
FIFO:First In First Out
2.1.2.2、最不经常使用策略
LFU:Least Frequently Used
2.1.2.3、最近最少使用策略
LRU:Least Recently Used
2.2、物理内存管理
包括程序装入等概念、交换技术、连续分配管理方式和非连续分配管理方式(分页、分段、段页式)。