当前位置:  技术问答>linux和unix

rmqueue()函数的疑惑

    来源: 互联网  发布时间:2015-08-05

    本文导语:  这个函数用于分配某一确定的zone中的空闲的物理页面。 其中有一句语句MARK_USED(index, curr_order, area); 这个宏定义如下: #define MARK_USED(index, order, area)  __change_bit((index) >> (1+(order)), (area)->map) 请问free_area_t中的map...

这个函数用于分配某一确定的zone中的空闲的物理页面。
其中有一句语句MARK_USED(index, curr_order, area);

这个宏定义如下:
#define MARK_USED(index, order, area) 
__change_bit((index) >> (1+(order)), (area)->map)

请问free_area_t中的map成员到底是干什么用的,里面是什么内容,看样子是某一个area的free pages组的使用情况的映射。那就是说一个zone.free_area中最多只能有32个free pages组了?
主要是__change_bit((index) >> (1+(order)), (area)->map) 中
对(area)->map的内容的其中一位做反,这一位计算((index) >> (1+(order)很是搞不懂,哪位大侠解释一下。

|
居然,不能连续发4个帖子,ft,
马甲说:


因为是两个快用一个map中的元素(1位),而,块的大小是不一样的,所以呢,这里的index>>(1+order)就是根据order的大小算出这个块所对应的map元素的序号,比如要分配一个页面,order=0,那么index这个时候处以2,得到的结果是这个页面所对应的map中的一个元素,因为这里是除(余数抛弃),所以呢,一定还有(仅有)另一个页面(刚才页面的前或者后)对应的index处以2和刚才的结果是一样的,因为这个时候index一次增减1(个页面),这样2个快(2个页面)就对应了一个map位,如果order=2,也就是找4个页面为一块的那个链表,这个时候index=index/8,可以算出一个结果,同上,此时也一定还有(仅有)另一个页面和index算出的结果是一样的,因为这个时候index一次增减4(个页面),这个时候,就有2个块(8个)页面对用一个map位,我是这么理解的,不知道对不?

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3