当前位置: 技术问答>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)很是搞不懂,哪位大侠解释一下。
其中有一句语句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位,我是这么理解的,不知道对不?
马甲说:
因为是两个快用一个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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。