上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页

2013年10月4日

内存管理 初始化(六)vmalloc_init 及 ioremap

摘要: 是不是我错了,本想这个函数会如网上所说将进行非连续内存管理的初始化,但是对于2.6.34的ARM架构而言,该函数实际完成的业务非常少。内存管理的初始化读到此处,我感觉原有的认识存在很大缺陷:(1)内核空间的下限是3G吗?永久映射的PKMAP_BASE已在3G下;(2)低端内存是896M吗?2.6.32的omap4430的VMLLOC_END是1G - 128M,VMALLOC_MIN是1G - 128M -128M;(3)还存在固定映射吗?FIXADDR_SIZE的空间已被FIX_KMAP_BEGIN ~ FIXK_KMAP_END完全占据;(4)I/O空间在初始化已固定映射至VMALLOC_ 阅读全文

posted @ 2013-10-04 22:40 阿加 阅读(2134) 评论(0) 推荐(0) 编辑

内存管理 初始化(五)kmem_cache_init 初始化slab分配器(上)

摘要: 看了下kmem_cache_init,涉及到不同MIGRATE间的buddy system的迁移,kmem_cache的构建,slab分配器头的构建、buddy system的伙伴拆分。对于SMP系统,每个kmem_cache还有各个CPU的arraycache_init,这样每个CPU可以从各自的arraycache_init中获取缓存,如果不足,则从slab分配器中获得;当让slab分配器的三条链表也有一定的缓存作用,如果三条链表都已空了,则需要从buddy system中申请页。在申请页的时候,由于每个zone中都有各个CPU的缓存页per_cpu_pages链表,因此在申请页时既可从p 阅读全文

posted @ 2013-10-04 17:13 阿加 阅读(5137) 评论(1) 推荐(0) 编辑

2013年9月29日

内存管理 初始化(四)mem_init bootmem 迁移至伙伴系统

摘要: mm_init中执行mem_init,将原通过bootmem分配器管理的低端内存 及 通过meminfo得知的高端内存释放到伙伴系统中,最后bootmem位图本身占用的低端内存物理页也被释放进伙伴系统,当然对于内核、初始页表、pkmap页表、struct page实例、ramdisk、percpu变量、dentry_hashtable、inode_hash_table已经被占用的区域不会被释放(对于内核开始的一段,后面会释放).start_kernel() ... 阅读全文

posted @ 2013-09-29 21:51 阿加 阅读(3979) 评论(0) 推荐(0) 编辑

protected: C++ access control works on per-class basis, not on per-object basis

摘要: 一个很简单的问题://为什么BASE::foo()中可以直接通过p访问val? 看本记录标题,这个问题困扰了很长一段时间,终于解决class BASE{ private: int val; public:void foo(BASE *p) { int w = p->val; } };同学参加一场笔试,抛出个问题,丫凡和我讨论了下,丫凡在stackoverflow上找到了答案……如下内容引述自:http://stackoverflow.com/questions/6986798/subtle-c-inheritance-error... 阅读全文

posted @ 2013-09-29 20:07 阿加 阅读(438) 评论(0) 推荐(0) 编辑

2013年9月28日

2013——M笔试南京——程序

摘要: 迄今只参加了M南京笔试,可惜自己不是计算机出身,还有好多东西得学啊……M的最后一题是编程:输入:单链表L0、L1、L2……Ln-1、Ln,将链表变为:L0、Ln、L1、Ln-1、L2……算法:1、将链表分成前后两个部分: 前一个链表长度 >= 后一链表长度; 简单2、反转后一个链表; 简单3、合并两个链表; 简单4、调用以上接口; gameover算法实现:typedef struct Node Node_t;Node_t *list_half(Node_t *head){ Node_t *rv = NULL; Node_t *start = he... 阅读全文

posted @ 2013-09-28 13:20 阿加 阅读(553) 评论(0) 推荐(0) 编辑

2013年9月26日

内存管理 初始化(三)before mm_init()

摘要: 看到了mm_init(),期间将从bootmem迁移到伙伴系统,slab分配器也会建立。在分析mm_init()之前,把setup_arch(&command_line)之后的函数分析了以下,详见注释。start_kernel() |---->page_address_init() | 考虑支持高端内存 | 业务:初始化page_address_pool链表; ... 阅读全文

posted @ 2013-09-26 17:17 阿加 阅读(2449) 评论(0) 推荐(0) 编辑

2013年9月25日

内存管理 初始化(二)bootmem位图分配器建立 及 使用

摘要: 本地的笔记有点长,先把bootmem位图分配器的建立 及 使用过程做下梳理。都是代码,上面做了标注。开始的汇编部分省略了(涉及的内容不多,除了swapper_pg_dir的分配)。该记录不会再添加说明,看下记录中的注释就明白了bootmem的建立及使用。该记录中考虑了高端内存……从start_ker... 阅读全文

posted @ 2013-09-25 22:39 阿加 阅读(2699) 评论(1) 推荐(0) 编辑

2013年9月24日

__setup、early_param的解析

摘要: 内核初始化时根据字符串匹配获得相应的处理函数,查找的时候有些麻烦。写个脚本对将内核中的__setup和early_param显式做了解析:__setup#! /bin/bash grep '\' ./ -rn --include='*.c' | awk 'BEGIN{FS=":"}{$1="";$2="";print $0}' | grep '^ *__setup' | sed -n -e '... 阅读全文

posted @ 2013-09-24 11:21 阿加 阅读(887) 评论(0) 推荐(0) 编辑

2013年9月23日

生成asm-offset

摘要: 因为不善于在Makefile中调用shell的相关工具,所以关于asm-offsets.h中的产生的16进制数并不知如何做到。因此自己写了个脚本,可以生成同样的文件(再次造了轮子)。参考:https://lkml.org/lkml/2001/10/6/3#脚本offset.awk1 /^->$/{printf("\n");next} 2 /^->.*/{sym = $1; val = $2; $1 = ""; $2 =... 阅读全文

posted @ 2013-09-23 16:25 阿加 阅读(507) 评论(0) 推荐(1) 编辑

2013年9月22日

内存管理(一)

摘要: UMA计算机(uniform memory access)将可用内存以连续方式组织起来。SMP系统中每个处理器访问各个内存区都是同样快。NUMA计算机(non-uniform memory access)总是多处理计算机。系统的各个CPU都有本地内存,可支持特别快速的访问。各个处理器之间通过总线连接起来,以支持对其它CPU的本地内存的访问。对于SMP系统,每个处理器对内存区的访问速度都相同,因此NUMA下只有一个Node(UMA), 该Node拥有自己的mem_map数组,同时将这唯一的Node分成几个zone,每个zone再用独立的伙伴系统管理物理页面。page cache:读写文件时文件内 阅读全文

posted @ 2013-09-22 22:53 阿加 阅读(928) 评论(0) 推荐(1) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页

导航