我是靠谱客的博主 潇洒大神,最近开发中收集的这篇文章主要介绍Linux2.6内核--内存管理(2)--区,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      由于硬件的限制,内核不能对所有的页一视同仁。有些页位于内存中的特定物理地址上,所以,不能将其用于一些特别的任务。(关于内存分页机制可以查看:http://blog.csdn.net/dlutbrucezhang/article/details/10181535)由于存在这种限制,所以内核会把页划分为不同的区。内核使用区对具有相似特性的页进行分组。Linux必须处理如下两种由于硬件存在缺陷而引起的内存寻址问题:

   1.一些硬件只能用某些特定的内存地址来执行 DMA

   2.一些体系结构的内存的物理寻址范围比虚拟寻址范围大得多。这样,就有一些内存不能永久的映射到内核空间中

   因为存在这些制约条件,Linux主要使用了四种区,下面,就来分析下这四种区。


   ZONE_DMA:这个区包含的页能用来执行 DMA 操作。

   ZONE_DMA32:和ZONE_DMA类似,该区包含的页面可用来执行DMA操作;而和ZONE_DMA不同之处在于,这些页面只能被32位设备访问。在某些体系结构中,该区会比ZONE_DMA更大。

   ZONE_NORMAL:这个区包含的都是能正常映射的页。

   ZONE_HIGHMEM:这个区包含“高端内存”,其中的页并不能永久的映射到内核地址空间。

    内核看到内存的情况就好像下面这个样子:



    Linux把系统的页划分为区,形成不同的内存池,这个样子就可以根据用途进行分配了。例如,ZONE_DMA 内存池让内核有能力为 DMA 分配所需的内存。如果需要这样的内存,那么,内核就可以从 ZONE_DMA 中按照请求的数目取出页。注意,区的划分没有任何的物理意义,这只不过是内核为了管理页而采取的一种逻辑上的分组。

最后

以上就是潇洒大神为你收集整理的Linux2.6内核--内存管理(2)--区的全部内容,希望文章能够帮你解决Linux2.6内核--内存管理(2)--区所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部