linux函数解读
wh8_2011
这个作者很懒,什么都没留下…
展开
-
initcall机制原理及实践
说明:以下内容基于linux2.4.0一、initcall机制原理 在linux初始化的过程中,内核采用了一种initcall的机制,它利用gcc的扩展功能以及ld的连接控制脚本实现了在内核初始化的过程中通过简单的循环就实现了相关驱动的初始化。核心代码的/init/main.c里面有do_initcalls函数如下:static void __init do_init转载 2015-10-03 17:00:48 · 974 阅读 · 0 评论 -
DIV_ROUND_CLOSEST函数
功能描述该函数主要进行四舍五入计算使用。例如:3/2=1.5,计算机中的整数运算结果为 3/2=1,经过DIV_ROUND_CLOSEST函数四舍五入运算后,3/2=2代码Linux内核中DIV_ROUND_CLOSEST函数的代码如下:#define DIV_ROUND_CLOSEST(x, divisor)( \{原创 2015-09-17 20:14:47 · 6716 阅读 · 0 评论 -
pfn_to_page 函数
linux源代码版本号:2.6.36CPU: x86的32位pfn_to_page 函数困扰了我几天,每次查找都没有找到针对的地方。今天终于找到了,其实pfn_to_page不是真正的还是,而是宏。该宏定义包含的头文件路径:include/asm-generic/memory_model.hpfn_to_pag宏根据make menuconfig编译选项选择不同的函数,详细代码原创 2015-10-07 23:29:33 · 5002 阅读 · 0 评论 -
linux 进程的pid分配策略——pid位图算法
在研究进程fork()的时候,这个调用了do_fork(),其中do_fork()又涉及到进程的pid分配,这个东西的源代码有许多个版本,而且各自都不是一样的。昨天晚上研究了一晚上,今天从下午研究到现在,总算把内核中pid位图算法有一个整体的把握了。明天早上继续完成这篇博客,现在小小的庆祝一下,明天完成。 首先我们先看一个程序,这个程序是我从网上找的,这个程序的主要部分也是内核中的代码,转载 2015-09-23 13:46:34 · 1517 阅读 · 0 评论 -
【内核】进程切换 switch_to 与 __switch_to
经典代码!!!#define switch_to(prev, next, last) \do { \/* \ * Context-switching clobbers(彻底击败) all registers, so we clobber \ * them explicitly, via unused output variables. \转载 2015-11-03 09:22:18 · 3073 阅读 · 0 评论 -
Linux kernel中 __bitmap_weight函数的理解
对Linux kernel中 __bitmap_weight函数的理解 int __bitmap_weight(const unsigned long *bitmap, int bits){ int k, w = 0, lim = bits/BITS_PER_LONG; for (k = 0; k < lim; k++) w += hweight_long(bitmap[k])原创 2016-09-22 08:00:33 · 3209 阅读 · 0 评论 -
__xchg 函数的用法
CPU X86 32位文件:arch\x86\include\asm\cmpxchg_32.h#define __xchg(x, ptr, size) \({ \__typeof(*(ptr)) __x = (x);\switch (size) {\case 1: \{ \volatile u8 *__ptr = (volatile u8 *)(ptr)原创 2016-09-16 21:15:47 · 4651 阅读 · 0 评论 -
shrink_page_list 函数分析
shrink_page_list 是页面回收体系中最至关重要的一个函数,它决定在zone->inactive_list中的页面最后是否能被回收释放掉。这个函数的处理流程总结如下1、如果页面被锁住了,放入继续将页面保留在inactive list中,后就再扫描到底时候再试图回收这些page2、如果回写控制结构体标记了不允许进行unmap操作,将那些在pte表项中有映射到页面保留在inacti转载 2016-10-18 09:34:52 · 3513 阅读 · 0 评论