buddy系统 初级问题,大家指教

unbutun 2010-05-10 08:21:52
buddy 算法分为2^0 * 4k ~ 2^10 * 4k 11种页框链表,每个块的第一个页框的物理地址是该大小的整数倍。


以上是我从一个地方看到的,关于这个物理地址还有疑问,既然是大小的整数倍,如2^0*4k的地址是多少,而且2^0*4k的整数倍和2^1*4k的整数倍之间的内存还能用吗,要是用了不就把页框给我给覆盖了吗?要是不能用那么2^10*4k的整数倍那也太大了,内存里都是这个页框了,不用干别的了?



这个是他说错了,还是我理解错了,哪位高人来谈谈,谢谢了
...全文
100 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linconglc 2010-05-22
  • 打赏
  • 举报
回复
在2.6.11版本及之前版本,有伙伴状态位图,可以通过1,0来判断这对伙伴是否都可用,可用则进行分配,所以每个物理页框的结构体要么在11个队列的其中一队列上,要么不在队列上,2^0*4k指的是块为1页框的队列,对应于free_area结构体,里面的list_head结构体用来串联页框指针区里空闲页框。
帅得不敢出门 2010-05-16
  • 打赏
  • 举报
回复
内存管理是这样的
节点pg_data_t 分成 几个管理区zone
管理区分成页框page

zone结构中成员 struct free_area free_area[MAX_ORDER]; 存放的是
好像是 各空闲页链表头(链表某结点为NULL 就结束了) 当从buddy申请时,就从这里查找符合的页框,然后从链表上删除,并反回首个申请的页框地址 这样就可以使用这个页框了,回收时按反着来,重新放上链表中就是了。
unbutun 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]
2^10*4K 可被分成2^n*4K(n<10)使用 而小的又空闲的也可以合并成一个大的
这些都是动态的 list可以随时变化,来满足不同的page需求
[/Quote]

如果把2^10*4K 可被分成2^n*4K(n<10)使用 或 小的又空闲的也可以合并成一个大的

是不是页框链表的位置不动,只是把那部分内存标记成2^n的分配,挂在链表上,这个标记是不是在页表的那个数据结构里有定义的。

以上我理解的对吗?


还有页框的链表是在2^10*4K 位置,那到哪结束呢,我如何知道这块内存不是页框了,我可以用了?
帅得不敢出门 2010-05-12
  • 打赏
  • 举报
回复
2^10*4K 可被分成2^n*4K(n<10)使用 而小的又空闲的也可以合并成一个大的
这些都是动态的 list可以随时变化,来满足不同的page需求
unbutun 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zmlovelx 的回复:]
buddy
这是为了尽量让申请的N个page是连续的
效率更高 管理起来也方便

不同2的次方分在不同的list中,就是说一个list中挂的都是相同大小的page组
2^0*4k(4k)的地址是 n*4K 这是算法决定的
2^0*4k的整数倍和2^1*4k的整数倍之间的内存还能用吗 可以用2^1*4k不就是8k么
那么前面2个4k分给2^0*4k,这样后面就可以分给2^0*4k,……
[/Quote]


要是不能用那么2^10*4k的整数倍那也太大了,内存里都是这个页框了,不用干别的了?
帅得不敢出门 2010-05-11
  • 打赏
  • 举报
回复
buddy
这是为了尽量让申请的N个page是连续的
效率更高 管理起来也方便

不同2的次方分在不同的list中,就是说一个list中挂的都是相同大小的page组
2^0*4k(4k)的地址是 n*4K 这是算法决定的
2^0*4k的整数倍和2^1*4k的整数倍之间的内存还能用吗 可以用2^1*4k不就是8k么
那么前面2个4k分给2^0*4k,这样后面就可以分给2^0*4k,而它的起始地址为8k,就是说2^m与2^n之间(m>n)可以分配给2^x(x<=n) 这样地址就满足了

unbutun 2010-05-11
  • 打赏
  • 举报
回复
自己顶
steptodream 2010-05-10
  • 打赏
  • 举报
回复
楼主问的问题都是高难度的
内容概要:本文详细介绍了Anaconda的下载、安装与配置方法(2025最新版)。Anaconda是一个开源的Python/R数据科学集成开发平台,预装了1500多个科学计算库,并提供conda包管理和环境管理功能。文章首先列出了系统要求,接着分别讲述了适用于不同操作系统的下载方式,包括官方下载和国内镜像下载。然后,具体讲解了Windows、macOS和Linux三种操作系统的安装步骤,以及环境变量的手动配置方法。此外,还提供了验证安装是否成功的命令和配置国内镜像源的方法,以提高下载速度。最后,列出了一些常用conda命令和常见问题的解决方案。 适合人群:从事数据科学、机器学习领域的研究人员和开发者,特别是需要频繁使用Python科学计算库的用户。 使用场景及目标:①帮助用户快速搭建Python开发环境,尤其是需要多个Python版本共存或隔离环境的情况下;②解决因网络原因导致的下载速度慢的问题;③提供详细的安装指南,确保安装过程顺利进行;④指导用户正确配置环境变量,避免常见的安装后无法使用的错误。 阅读建议:由于Anaconda涉及多平台安装和配置,建议读者根据自己的操作系统选择相应的章节重点阅读,并严格按照步骤操作。对于初次使用者,建议先从简单的安装入手,再逐步学习环境管理和包管理的相关命令。

4,465

社区成员

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

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