x86 CPU中逻辑地址到物理地址映射过程

Tags: Memory   Linux  

(1)从CR3寄存器中获取页面目录表(Page Directory)的基地址;

(2)以线性地址的Directory位段为下标,在目录(Page Directory)中取得相应页面表(Page Table)的基地址;

(3)以线性地址中的Table位段为下标,在所得到的页面表中获得相应的页面描述项;

(4)将页面描述项中给出的页面基地址与线性地址中的offset位段相加得到物理地址。

leon Published by 2014-03-09 16:17

Detail »

Linux SLAB 分配器介绍和SLUB的出现原因

Tags: Memory   Linux  

多年以来,Linux 内核使用一种称为 SLAB 的内核对象缓冲区分配器。SLAB 分配器源于 Solaris 2.4 的分配算法,工作于物理内存页框分配器之上,管理特定大小对象的缓存,进行快速而高效的内存分配。

SLAB 分配器为每种使用的内核对象建立单独的缓冲区。Linux 内核已经采用了伙伴系统(Buddy System)管理物理内存页框,因此 SLAB 分配器直接工作于伙伴系统之上。每种缓冲区由多个 slab 组成,每个 slab就是一组连续的物理内存页框,被划分成了固定数目的对象。根据对象大小的不同,缺省情况下一个 slab 最多可以由 1024 个物理内存页框构成。出于对齐等其它方面的要求,slab 中分配给对象的内存可能大于用户要求的对象实际大小,这会造成一定的内存浪费。

Src:http://www.cnblogs.com/leaven/archive/2010/11/12/1875505.html

leon Published by 2014-03-09 04:18

Detail »

完全内存虚拟化处理缺页异常的流程

Tags: Memory   Virtualization   Linux  

请问在完全内存虚拟化(Full Memory Virtualization,包括使用影子页表Shadow Page Table)中,处理缺页异常的流程是什么?
例如,KVM, VMWare都是使用完全内存虚拟化技术来虚拟化物理内存的。请问它们处理缺页异常的流程是什么样的呢?

Src:http://linux.chinaunix.net/bbs/viewthread.php?tid=978835

leon Published by 2014-03-03 04:40

Detail »

内存管理单元 MMU

Tags: Memory   CPU  

现代操作系统及CPU硬件中,都会提供内存管理单元(memory management unit,MMU)来进行内存的有效管理。内存管理算法有许多,从简单的裸机方法到分页和分段策略。各种算法都有其优缺点,为特定系统选择内存管理算法依赖于很多因素,特别是系统的硬件设计。

1 内存管理的目的

内存管理的目的是为了更好的使用内存(似乎是废话-,-)。 内存是现代操作系统运行的中心。操作系统中任何一个进程的运行都需要内存,但是,操作系统中的内存是有限的;另一方面,从安全的角度出发,进程都需要有自 己的内存空间,其他的进程都不能访问这个私有的空间;同时,内存的分配会导致内存碎片问题,严重影响计算机的性能。以上这三个问题就是一般内存管理算法所 需要处理的目标。

leon Published by 2014-02-05 04:15

Detail »