linux内核物理内存分配
2016-10-01 17:38:02 5 举报
Linux内核物理分配
作者其他创作
大纲/内容
分配失败
for循环针对每个管理区,/把脏页洗干净(页面的定期换出),再把干净页面等待队列的页面回收,通过__free_page 释放页面的同时,把空闲页面拼接成大的页面块,试图再次请求成功
再次把毎个管理区的干净队列页面回收.把pages_min水位降低到1/4看能否满足 分配-依旧不能,系统出了问題
此时位于alloc_pages_limit
一旦某个管理区不满足此标准,把进程(内核线程kreclaimd)在等待队列睡眠,把它唤醒,用于回收一些页面.
如果依旧失败,而且必须要求分配到页面,那就等待,进程睡眠,唤醒kswaped,要求分配页面进程睡眠,等待kswapd完成一轮运行再 唤醒要页面的进程,另外一种方案...直接调用此函数获取页面 (本来就是kswaped函数调用的)
开始遍历该节点的每个管理区,从第一个管理区开始,如果遍历完,某个管理区空闲页面大于最低标准,那就直接调用rmqueue(涉及伙伴算法)分配,分配成功直接返回
节是否短缺判断条件:inactive_shortage() inactive_target / 2 && free_shortage() 发现该节点的空闲页面短缺,调用2个wakeup_kswapd(0): wakeup_bdflush(0)试图腾出一些页面

收藏
0 条评论
下一页