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

linux伙伴buddy算法的一个疑问?

    来源: 互联网  发布时间:2016-05-01

    本文导语:  假如内存中只按照了1页面和2页面划分, 按照2页面划分时,是按照页面的顺序,0-1和2-3是一个Buddy、4-5和6-7是一个Buddy,还是是有可能是打乱的, 比如说  (1和2)与(5和7)组成了一个Buddy 如果是按照页面的顺序...

假如内存中只按照了1页面和2页面划分,
按照2页面划分时,是按照页面的顺序,0-1和2-3是一个Buddy、4-5和6-7是一个Buddy,还是是有可能是打乱的,
比如说  (1和2)与(5和7)组成了一个Buddy


如果是按照页面的顺序来组成Buddy,过了一段时间后0-1,6-7都分配了。2-3和4-5都只分配了2和5
3和4没分配。那如果系统现在请求分配两个页面大小的空间。但是现在没有两个页面是按照buddy连在一起(假设最大的buddy是两个页面),那系统会怎样去分配内存??  请大家指教,先谢过了。

|
有一点是没有疑问的,即Buddy是按照页面顺序来组织的。
Buddy系统有两个很重要的作用:
(1) 分配连续页,这也决定了谁和谁是Buddy只能按顺序来组织;
(2) 碎片问题:Buddy能很好的处理碎片问题,但并不能完全解决,你举的例子如果不考虑PFRA的话,内核分配器只能报OOM,不过即便有PFRA进行页面的回收,OOM也不可能完全解决,庆幸的是,实际系统一般不会出现OOM这么糟糕的情况。

|
看不是很懂你的问题,

你可以参看
Understanding the Linux Kernel的 “8.1.7. The Buddy System Algorithm”

|
系统在设计buddy算法的时候,采用了1/2/4/8/16这种递进关系的页面管理,也就是说有若干个4K的页面分成一组,有若干个16*4K页内存大小的页面入在一组,以此类推,假定你需要申请8K的连续物理内存,那么系统就在所有以8K页面连续的那个组当中找一个没有使用的页面给你,但有可能所有8K的页面全部被使用了,那怎么办呢?就直接在16K所在的组内找一个,若还没有,就等到找到最后的最大的那一个为止,当然也有可能找遍了所有的组,依然没有找到,这个时候就采用两种策略,一种是等待系统有空闲的为止,另一种就直接返回失败(kmalloc不是有很多参数吗?有一种参数就是不等待直接返回失败,主要由于中断上下文当中)

那么系统如何保证内存回收的呢?也就是当某个时候系统只留有4K连续内存的页的时候,怎么办?你要相信,只要你系统对内存的使用量不超过物理内存加上swap空间的总和,总会有内存释放的时候,一旦内存释放,系统就会把释放的那个页与它相领的页连接起来,假定你的内存全是页1,页3,页5.....,被使用,而页2,页4,页6......是空闲的,当你释放页3时,那么页3与页2就形成了一个2K的页,就把这个合并后的页放入8K内存管理的队列中,以此类推,LZ所说的那种情况是很难出现的,就算出现了也会被自动解决的(要么返回失败,要么等待)

最后再说一说内存切割的问题,也即是分配的问题,假定系统中在某个时候只留有32K连续的物理空闲页,现在系统需要一个连续8K的页,那么系统就会进行切割,从32K的页中切割一个8K出来,然后把余下的24K页再分成8K与16K,从而归入两个页面管理队列中...........

    
 
 

您可能感兴趣的文章:

  • linux c 怎样实现 md5 ,des 加密算法
  • 看LINUX的内核要不要硬件、数据结构、算法、汇编
  • 高分求:LINUX下视频压缩编解码算法实现
  • 请问linux中,有没有现成的md5算法可以使用?
  • 请大家提供一些资料和指点迷津:关于linux ns网络仿真系统下的web缓存替换算法的资料,,谢谢!
  • 有人知道Linux内核流控中HFSC算法吗?在网上查资料几乎没有!
  • Linux系统下,不同的进程通信算法的优缺点
  • 回声抵消算法在LINUX ARM上跑的调度问题求助
  • 求意见如何在linux的应用软件中实现一个cpu调度框架,使得多个cpu调度算法可以在同一个系统中实现无缝整合?(分数不够还能再加)
  • 听说在linux下面不用磁盘整理,是真的吗?那它用的是什么算法啊?请教
  • Linux用C写多线程的递归算法问题
  • 如何在Linux内核中调用MD5算法计算文件的MD5值?
  • 如何调用linux内核自带的加密算法函数库??
  • linux kernel 0.11 中文件系统电梯算法有问题?(高手请进)
  • 200分求教有关linux核心的dos攻击算法分析以及源代码的情景分析,研究用,急!!!
  • 在Linux网络连接中connect服务器时,下面哪种算法更好些,为什么?
  • 菜鸟的Linux练习疑问……
  • Linux文件系统结构的疑问
  • Linux 初学者的疑问 (各位老鸟进来看看)
  • linux C编程中使用make时对 内部规则的疑问
  • 关于Linux内核的疑问
  • 关于linux runlevel的疑问
  • 由Turbo C 转入 Linux C的疑问
  • 寻求linux开发高手,本人想用linux开发一个视频服务器。本人已将编码和解码部分写完,但对LINUX不熟。特有意寻求合作伙伴。 iis7站长之家
  • 关于LINUX下图形界面显示字符的疑问
  • linux不做嵌入式的,好找工作吗,疑问中!
  • 关于linux内核链表的疑问
  • 初次装linux前的疑问
  • 新装的Red Hat Linux,想编写C++程序,但有些疑问
  • 阅读linux代码时候的一个小疑问,菜鸟问题,各位多提点,谢谢
  • 关于linux的文件系统的疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux项目外包,寻求合作伙伴
  • 寻求linux开发高手,本人想用linux开发一个视频服务器。本人已将编码和解码部分写完,但对LINUX不熟。特有意寻求合作伙伴。
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


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

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

    浙ICP备11055608号-3