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