
Linux 内核学习
文章平均质量分 76
codetracer
学习造轮子
展开
-
copy_to_user 和 copy_from_user
copy_from_user函数目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0原创 2011-07-15 12:53:35 · 3462 阅读 · 0 评论 -
barrier 和 preempt_disable() 学习
#define preempt_disable() \do{ \ inc_preempt_count(); \ barrier(); \}while(0)一、这个barrier 在干什么... 内存屏障出现因为编译器或现在的处理器常会自作聪明地对指令序列进行一些处理,比如数据缓存,读写指令乱序执行等等。如果优化对象是普通内存,那么一般会提升性能而且不转载 2012-07-25 00:36:59 · 10113 阅读 · 0 评论 -
ELF在Linux下的加载过程
主要函数调用:sys_execve | - do_execve|| - search_binary_handler |- linux_binfmt= elf_format |- elf_format-> load_elf_binary| - elf_entry = load_elf_interp()原创 2012-06-24 09:07:21 · 7696 阅读 · 0 评论 -
在驱动中写磁盘文件
驱动层是不可以调用标准库的,那么想要在驱动中直接写磁盘文件要怎么办?一、到底可不可行?这里的文章,详细地追踪了系统调用的实现,并提供了一种直接访问的方法。总结如下: 1.在系统调用open的流程中,会调用getname()函数,里面会使用get_fs()判断文件名字符串的地址,如果属于3~4G,也就是内核空间,返回错误。是用户空间的,则拷贝到内核空间。在系统调用read的流原创 2012-06-18 23:00:24 · 2697 阅读 · 1 评论 -
关于daemonize()
lock_kernel();siginitsetinv(¤t->blocked, SHUTDOWN_SIGS);daemonize();target_data.thread_id = current;unlock_kernel();注:SHUTDOWN_SIGS前面定义为# define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGIN转载 2012-03-05 13:01:00 · 10624 阅读 · 0 评论 -
cpu绑定和cpu亲和性
将进程/线程与cpu绑定,最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。我觉得在NUMA架构下,这个操作对系统运行速度的提升有较大的意义,而在SMP架构下,这个提升可能就比较小。这主要是因为两者对于cache、总线这些资源的分配使用方式不同造成的,NUMA每个cpu有自己的一套资源体系, SMP中每个核心还是需要共享这些资源的,从这个角度来看,NUMA使用原创 2012-04-21 15:57:38 · 28950 阅读 · 4 评论 -
Linux 魔术键
根据Linux内核文档介绍:这是一组'魔术组合键',只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键可以立即打印出内核的信息。使用sysrq组合键是了解系统目前运行情况的最好方式。如果系统出现挂起的情况或者在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,使用sysrq键是一个比较好的方式。如何打开和关闭SysRq组合键?为了安全起见,在红帽企业版转载 2012-04-17 08:57:25 · 6149 阅读 · 0 评论 -
Linux中__init、__devinit等内核优化宏
内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:· __init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text 内存区转载 2012-01-02 17:09:43 · 2159 阅读 · 0 评论 -
likely() && unlikely() && __builtin_expect((x), 1)
在Linux2.6内核中,看到一对奇怪的函数,likely(), unlikely()。追踪回去,发现其实是一对宏,如下实现:#define likely(x) __builtin_expect((x), 1)#define unlikely(x) __built原创 2011-08-08 20:10:54 · 6234 阅读 · 5 评论 -
基数树(radix tree)
原文基数(radix)树Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。IDR(ID Radix)机制是将对象的身份鉴别号整数值ID与对象指针建立关联表,完成从ID与指针之间的相互转换。IDR机制使用radix树状结构作为由id转载 2012-12-03 05:59:33 · 47863 阅读 · 2 评论