自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 start_kernel

void __init x86_64_start_kernel(char * real_mode_data){ int i; /* 内核映像和模块区域映射的完整性检查 */ ... /* clear bss before set_intr_gate with early_idt_handler */ clear_bss(); /* Make NULL poi

2011-11-04 14:31:53 2469

原创 include/linux/init.h

这个头文件只需要包含另一个头文件#include ,这个文件中的宏被用来标记函数和初始化数据为`initialization ` 函数,内核据此认为这些函数只在内核初始化时使用,并在完成初始化后释放这些函数和数据占用的存储。对于函数初始化,在函数名前立即假如__init修饰符,如:static void __initinitme(int x, int y){ extern int

2011-11-03 23:22:10 4967

原创 call_chain & dump_trace

调用链是剖析工具中常备的一种显示方式,可以为用户呈现明确的函数调用关系,在perf中,可以根据调用链分析主函数的sample分布到了哪些子函数中。在内核调试中,根据调用链可以得到出错函数的上层调用者是谁。调用链的实现其实很简单,就是遍历函数栈,在x86中,bp寄存器指向的内存位置存放的是旧栈帧基地址,这个位置之上(高地址处)是函数返回地址,因此在函数返回时pop %ebp,就是把旧栈帧地址置放

2011-10-21 21:49:04 2328

原创 /dev/mem

/dev/mem是物理内存的全映像,可以用来访问物理内存,一般用法是open("/dev/mem",O_RDWR|O_SYNC),然后mmap,接着就可以用mmap的地址来访问物理内存,这实际上就是实现用户空间驱动的一种方法。有几个论据倾向于用户空间编程,有时编写一个所谓的用户空间设备驱动对比钻研内核是一个明智的选择,用户空间驱动的好处在于:完整的C库可以链接,驱动可以进行许多奇怪的任务,

2011-10-21 13:24:46 9023 1

原创 VDSO

VDSO(Virtual Dynamically-lined Shared Object),这是一个由内核提供的虚拟.so文件,它不在磁盘上,而在内核里,内核将其映射到一个地址空间中,被所有程序共享,正文段大小为一个页面。$ ldd /bin/lsmod linux-vdso.so.1 => (0x00007ffff7fdf000) libc.so.6 =

2011-10-18 23:50:10 16652 2

原创 ELF文件备忘

1. 读取ELF文件头:$ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:

2011-10-18 15:04:59 1153

原创 采撷

当使用等价关系来定义类时,应该定义一种标识使得同类中的每一项都具有相同的标识,而异类则没有该标识这段话是用在排序问题上,例如变位词问题,变位词中字母顺序不同,但如果将这些字母重新排序就可以看出所有变位词都有了共同的标识,然后利用这个标识对单词进行排序就可以得到变位词集合了。

2011-10-17 23:43:32 551

原创 bitmap(2)

位图应用:1. 老鼠测药:瓶子序号记为二进制格式,如果第i位为1,则第i个老鼠喝药,譬如14 = 10110,即1,2,4号老鼠喝第14号瓶,那么如果这瓶水有毒,则1、2、4号老鼠都会死亡,反推,如果1、2、4号老鼠死亡,那么三只老鼠都喝到了那一瓶毒药,所以必定是14,而非1

2011-10-17 23:34:07 746

原创 bitmap(1)

bitmaps利用一个或多个ulong类型来提供位数组,在一个给定位图中的有效位数不需要是确定的BITS_PER_LONG的倍数,位图接口和可用运算列在bitmap.h中。lib/bitmap.c中的函数实现适用于所有结构,特定于不同结构的函数实现位于include/asm-/bitop.h头文件以及arch/相关文件中。bitmap_zero(dst, nbits)

2011-10-17 17:06:44 2394

原创 perf_event源码分析(二)——cmd_report

__cmd_report() => perf_session_open(),打开perf.data=>perf_session_read_header()根据perf.data的头部初始化session->evlist链表上的各个事件。perf_session__proces

2011-10-15 10:01:48 3597 5

原创 perf_event源码分析(一)——cmd_record

cmd_record是perf用户层的一个核心工具,为之后的report, annotate等工具提供profile,监测数据都记录在perf.data中,后面就是进行上层分析,这里对cmd_record()的分析主要是关注perf.data文件内容组成。parse_events()会根据用户在命令行上的指定来配置监测事件,为每一个事件分配一个perf_evsel结构体,其中记录了事件名称与配

2011-10-10 23:04:51 5129

原创 perf_event 源码分析

由于工作需要, 去年12月份前后花了半个月的时间全职阅读perf代码,那时还是2.6.30的内核版本,第一次阅读内核代码,走了不少弯路,但也算收获颇丰。现在内核已经是3.0.*了,乘着国庆无事,将这部分代码再重新分析一下,一来方便以后备查,二来再巩固熟悉下内核编程的一些技术。

2011-09-30 18:55:38 5927 1

原创 vmlinux和bzImage的Makefile部分阅读

本文分析的是linux2.6.36版本的Makefile

2010-12-12 13:49:00 2585 1

转载 cache history

纵观PC系统和CPU二十年的发展,随着半导体加工工艺水平的不断提高,CPU和存储器的性能都有了很大的提高。  CPU频率的提高,必然要求系统中存储器的存取速度要提高,还要求其容量要增大。主存储器DRAM容量的提高还是比较快的,但是DRAM读取时间的提高却很慢。从而在速度上与CPU主频的提高产生了极不相配的情况,这样会影响整个系统的性能。二十年来,CPU设计的问题之一就是解决高速CPU和低速DRAM

2009-05-20 16:20:00 1122

原创 硬件动态提高ILP

ILP与流水线的关系:ILP即指令级并行,两条或多条指令并行不悖,就要求他们之间不存在数据依赖,现代处理器中采用流水线技术,较高的ILP就能带来更多级的流水线阶段,流水线段数增加,那么CPI就会降低,整个系统的指令throughput变大。所以ILP的提高很重要。硬件动态

2009-05-06 19:56:00 1173

原创 量化(一)

现在的通用处理器是基于冯.伊曼计算机模型设计的,这些处理器大都是单处理器单指令流的工作方式,之所以可以实现"并行处理",是因为利用了指令级并行(ILP)的特性。超标量流水管线、多级存储(二级缓存、三级缓存)、预测机制等技术先后引入微处理器都是为了提高微处理器的指令级并行性。不过,

2009-05-06 19:19:00 580

原创 开博

wlp600开博!

2009-05-05 21:48:00 683 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除