6. 系统内存堆
本篇翻译:songsong <http://www.songsong.org>
源码位置:KmdKit\examples\basic\MemoryWorks\SystemModules
首先是罗云彬的废话:感谢刘松一起参与这个翻译项目,这样本教程的中文翻译才能这么快和大家见面,刘松是温哥华的帅哥作家,著有《GRE Yellow Bible》(《GRE词汇黄宝书》),文风幽默,看他的翻译,使大家看枯燥的驱动教程如同看泡妞教程,于轻松间掌握繁琐的东西。原本这也是本人梦想中的写作风格,可惜本人多年努力,除了外貌长得还是一如既往的幽默外,文字中还是幽默不起来,没办法哟~~~,好了,废话少说,下面请刘松出场。
(稀稀落落的掌声)……
……
我是温哥华的松松,被罗大哥抓来翻译文章,几个MM还等着我去酒吧,只好不去了……
如果各位帅哥美女已经看完了前面的基础知识,那就跟小弟来看看”一些”必要的底层技术。
为什么”一些”要加引号(一女同学提问)?那是因为驱动程序可以做许许多多的事情啊!
如果你不懂MM,你就别混了!(一男同学问:驱动程序和泡妞还有关系?)哦,我这里的MM不是指”美眉”,是指”内存管理(Memory Management)”。
好的,我们现在就开始学习MM……
内存管理器给用户进程提供了大量的用于MM的API。这些API可以分为三类:虚拟内存函数、内存映射文件函数和堆函数。内核的成员(包括驱动程序)有很多高级的工具。例如:驱动程序能够在物理地址空间里分配一个连续的内存。这类函数呢,前缀是”Mm”。另外呢,还有一种以”Ex”为前缀的函数,用于从系统内存池里(分页和不分页的)分配和释放内存,还可以操作后备列表(lookaside lists)。
后备列表是啥东东?我们下一节会讲,它可以提供更快的内存分配,却要使用预定义的固定的块大小。