Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216645
  • 博文数量: 44
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1354
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 15:38
个人简介

人生像是在跑马拉松,能够完赛的都是不断地坚持向前迈进;人生就是像在跑马拉松,不断调整步伐,把握好分分秒秒;人生还是像在跑马拉松,能力决定了能跑短程、半程还是全程。人生其实就是一场马拉松,坚持不懈,珍惜时间。

文章分类

发布时间:2015-03-16 00:33:48

前面已经分析了伙伴管理算法的释放实现,接着分析一下伙伴管理算法的内存申请实现。    伙伴管理算法内存申请和释放的入口一样,其实并没有很清楚的界限表示这个函数是入口,而那个不是,所以例行从稍微偏上一点的地方作为入口分析。于是选择了alloc_pages()宏定义作为分析切入口:.........【阅读全文】

阅读(2224) | 评论(0) | 转发(1)

发布时间:2015-03-11 01:33:37

此处承接前面未深入分析的页面释放部分,主要详细分析伙伴管理算法中页面释放的实现。页面释放的函数入口是__free_page(),其实则是一个宏定义。具体实现:【file:/include/linux/gfp.h】#define __free_page(page) __free_pages((page), 0)而__free_pages()的实现:.........【阅读全文】

阅读(1937) | 评论(0) | 转发(1)

发布时间:2015-03-11 01:25:12

前面分析了伙伴管理算法的初始化,在切入分析代码实现之前,例行先分析一下其实现原理。伙伴管理算法(也称之为Buddy算法),该算法将所有空闲的页面分组划分为MAX_ORDER个页面块链表进行管理,其中MAX_ORDER定义:【file:/include/linux/mmzone.h】#ifndef CONFIG_FORCE_MAX_ZONEORDE.........【阅读全文】

阅读(2091) | 评论(0) | 转发(1)

发布时间:2015-03-08 23:09:46

前面已经分析了linux内存管理算法(伙伴管理算法)的准备工作。具体的算法初始化则回到start_kernel()函数接着往下走,下一个函数是mm_init():【file:/init/main.c】/* * Set up kernel memory allocators */sta.........【阅读全文】

阅读(2030) | 评论(0) | 转发(1)

发布时间:2015-02-28 00:53:19

前面分析了memblock算法、内核页表的建立、内存管理框架的构建,这些都是x86处理的setup_arch()函数里面初始化的,因地制宜,具有明显处理器的特征。而start_kernel()接下来的初始化则是linux通用的内存管理算法框架了。 build_all_zonelists()用来初始化内存分配器使用的存储节点中的管理区链表,是为内存.........【阅读全文】

阅读(2412) | 评论(0) | 转发(2)

发布时间:2015-02-28 00:48:26

前面已经分析了内存管理框架的构建实现过程,有部分内容未完全呈现出来,这里主要做个补充。如下图,这是前面已经看到过的linux物理内存管理框架的层次关系。现着重分析一下各个管理结构体的成员功能作用。【file:/include/linux/mmzone.h】typedef struct pglist.........【阅读全文】

阅读(2005) | 评论(0) | 转发(3)

发布时间:2015-01-25 19:42:39

虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),这里不准备复述什么,仅针对required_movablecore和required_kernelcore做一个补充。以required_movablecore为例,代码中没有很清晰地表明该值从何而来,仅有一处cmdline_parse_movablecore()疑似赋值的实现:.........【阅读全文】

阅读(1530) | 评论(0) | 转发(1)

发布时间:2015-01-01 12:46:31

此处接前文,分析free_area_init_nodes()函数最后部分,分析其末尾的循环:    for_each_online_node(nid) {        pg_data_t *pgdat = NODE_DATA(nid);        free_area_init_node(nid, NULL,  &nbs.........【阅读全文】

阅读(1854) | 评论(1) | 转发(2)

发布时间:2015-01-01 12:43:42

前面构建内存管理框架,已经将内存管理node节点设置完毕,接下来将是管理区和页面管理的构建。此处代码实现主要在于setup_arch()下的一处钩子:x86_init.paging.pagetable_init()。据前面分析可知x86_init结构体内该钩子实际上挂接的是native_pagetable_init()函数。 native_pagetable_init().........【阅读全文】

阅读(1673) | 评论(0) | 转发(2)

发布时间:2014-12-11 08:35:57

传统的计算机结构中,整个物理内存都是一条线上的,CPU访问整个内存空间所需要的时间都是相同的。这种内存结构被称之为UMA(Uniform Memory Architecture,一致存储结构)。但是随着计算机的发展,一些新型的服务器结构中,尤其是多CPU的情况下,物理内存空间的访问就难以控制所需的时间相同了。在多CPU的环境下,系统只.........【阅读全文】

阅读(2120) | 评论(0) | 转发(2)
给主人留下些什么吧!~~

剑魂箫心2018-07-03 23:07

博主真是神人,我正在看4.9内核代码,每当遇到理解不了的地方总能搜到博主的文章。

回复  |  举报

Jean_Leo2016-02-19 00:52

xlzheng:后面没有更新了吗,很期待啊

谢谢关注。后面会更新的,最近工作较忙,还抽不出时间来整理,下一篇是关于kmemcheck的内容

回复  |  举报

xlzheng2016-02-18 14:57

后面没有更新了吗,很期待啊

回复  |  举报
留言热议
请登录后留言。

登录 注册