# kernelpwn 的进一步学习后,

# 虽然很多东西原理与用户态相似,但是终究还是区别很大,尤其是在内存的管理,在用户态的 glibc 使用 pmalloc 进行堆块的管理。但是在内核态,我们申请的空间不在仅仅是局限在几十字节的数据,而且进程对于空间的申请更加频繁,我们需要一个高效简单的管理机制。

目前在内核的空间 主要使用的内存管理机制有 slab,slub,slob,其中 slab 是最早的管理机制,但是在 2.6 的 kernel 后被 slub 所代替。目前 slub 也是默认的管理器。而 slob 主要应用在轻量级和移动端的设备中。

虽然 slab 被 slub 取代,但是二者是升级迭代的关系,slub 一定程度继承了 slab 的机制。上述三者统称为内存分配器。

几个基本概念:

1,对比于用户态的程序,与内核态的程序,关于内存的使用。以往我们写的简单程序并没有对物理内存进行主动更改,以堆题为例,我们我们使用的不过是程序分配给我们的虚拟空间,但这个空间真的不存在嘛?不,实际上很多时候我们分配的虚拟空间也好,知识系统的一块提供给我们的内存空间,这个空间是重复使用的,区别于储存空间,比如磁盘。我们使用的空间一般是操作系统的虚拟内存分配的

32 位下的虚拟内存空间布局如下:

image.png

64 位下的虚拟内存空间布局如下:

img

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

dreamcat WeChat Pay

WeChat Pay

dreamcat Alipay

Alipay

dreamcat PayPal

PayPal