虚拟内存

虚拟内存是linux内核采用的内存管理技术

 

采用虚拟内存管理技术的目的是什么?

更加高效地利用cpu和RAM资源;

 

虚拟内存管理技术的实现利用了大多数程序的两种类型的局部性

空间局部性(Spatial locality): 是指程序倾向于访问在最近访问过的内存地址附近的内存(由于指令是顺序执行的,且有时会按顺序处理数据结构)。

时间局部性(Temporal locality): 是指程序倾向于在不久的将来再次访问最近刚访问过的内存地址(由于循环)。

 

虚拟内存技术将每个程序使用的内存(虚拟内存)切割成小型的、固定大小的“页" (page)单元

相应地,将RAM (物理内存)划分为一系列同虚拟“页”大小相等的“页帧”(page frame);

任一时刻,每个程序仅有部分页需要驻留在物理内存页帧中

程序驻留在物理内存页帧中的构成了所谓驻留集(resident set)

程序未使用的页拷贝保存在交换区(swap area) 内一一这是磁盘空间中的保留区域,作为计算机RAM 的补充一仅在需要时才会载入物理内存。

进程欲访问的页面目前并未驻留在物理内存中,将会发生页面错误(page fault), 内核即刻挂起进程的执行,同时从磁盘中将该页面载入内存。(为什么会有page fault的产生?

 

 

为支持虚拟内存技术,内核需要为每一个进程维护一张页表(page table);

该页表描述了每页在进程虚拟地址空间(virtual address space) 中的位置(可为进程所用的所有虚拟内存页面的集合);

页表中的每个条目要么指出一个虚拟页面在RAM 中的所在位置,要么表明其当前驻留在磁盘上;

在进程虚拟地址空间中,并非所有的地址范围都需要页表条目。

通常情况下,由于可能存在大段的虚拟地址空间并未投入使用,故而也无必要为其维护相应的页表条目。

 

由于内核能够为进程分配和释放页(和页表条目),所以进程的有效虚拟地址范围在其生命周期中可以发生变化。

 

虚拟内存的实现需要硬件中分页内存管理单元(PMMU) 的支持
PMMU 的功能;把要访问的每个虚拟内存地址转换成相应的物理内存地址

当访问虚拟内存“页”在RAM中没有对应的“页帧”时,PMMU会以“page fault"形式通知内核

 

 

虚拟内存技术带来的优点:

虚拟内存管理技术将进程的虚拟地址空间与RAM物理地址空间隔离开来;

进程与进程、进程与内核相互隔离,所以一个进程不能读取或修改另一进程或内核的内存;

这是因为每个进程的页表条目指向RAM (或交换区)中截然不同的物理页面集合;

适当情况下,两个或者更多进程能够共享内存---内核使不同进程的页表条目指向相同的RAM 页;


一个进程所占用的内存(即虚拟内存大小)能够超出RAM 容量;

一个进程只需有部分”页“加载到对应的”页帧“中;

 

每个进程使用的RAM 减少了, RAM 中同时可以容纳的进程数量就增多了。

这增大了如下事件的概率:在任一时刻, CPU 都可执行至少一个进程,因而往往也会提高CPU 的利用率

 

 

 

参考书籍:linux/unix系统编程手册

 

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页