rmqueue()函数的疑惑

yrj 2004-10-10 12:42:03
这个函数用于分配某一确定的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)很是搞不懂,哪位大侠解释一下。
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yrj 2004-10-17
  • 打赏
  • 举报
回复
谢谢大家,那怎么表示呢,如果为1,则2块中有一块是可分配的,如果为0则2块都不可分配,如果2块都可分配的话,是不是也为0呢,因为分配一次或者释放一次,就要调用一次MARK_USER
xiaoxiing 2004-10-16
  • 打赏
  • 举报
回复
居然,不能连续发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位,我是这么理解的,不知道对不?
thrillers 2004-10-16
  • 打赏
  • 举报
回复
我也是刚刚看,不知道对不
thrillers 2004-10-16
  • 打赏
  • 举报
回复
index是分配的块的第一个page在zone->zone_mem_map中的序号
thrillers 2004-10-16
  • 打赏
  • 举报
回复
map是一个数组,每一个元素代表两个快
的使用情况
dqwjack 2004-10-15
  • 打赏
  • 举报
回复
hehe,爱莫能助啊

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧