治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu
发布时间:2012-12-21 14:36:11
参考这里:http://blogs.msdn.com/b/oldnewthing/archive/2004/06/29/168719.aspx这个例子非常好,线程安全但不是可重入的:int length = 0;char *s = NULL;// Note: Since strings end with a 0, if we want to// add a 0, we encode it as "\0", and encode a// backslash as "\\".// WARNING! This code is buggy - do not use!void AddToString(i......【阅读全文】
发布时间:2012-12-21 10:53:21
1.导致并发执行的原因 硬件中断服务 SMP(对称多处理) 内核抢占 schedule()2.scull的缺陷if (!dptr->data[s_pos]) { dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL); &nb......【阅读全文】
发布时间:2012-12-17 09:36:24
简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。 tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实 施不同的封装。利用tun/tap驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物 理链路中。开源项目openvpn( ......【阅读全文】
发布时间:2012-12-10 11:36:44
简单实现dump_stack0.首先确保你能写个内核模块:打印"hello kernel" 如果熟悉dump_stack的话,完全可以绕开此文,或者自己去看dump_stack代码实现之。 1.dump_stack是什么经常调试内核一定对这个函数不陌生,因为我们大多数人调试内核的时候都受这个函数的折磨,不信,那么我们调用下这个函数看看(随意写个内核模块调用dump_stack(),插入内核),我们来看看输出:Pid: 9982, comm: insmod Not tainted 2.6.31.5-127.fc12.i686.PAE #1Call Trace:&n......【阅读全文】
发布时间:2012-12-09 20:09:34
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数。所以创建一个进程的过程就是这些数据对象的创建过程。 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通讯机制,如:pipe,fifo,System V IPC机制等,另外通过fork创建子进程系统开销很大,需要将上面描述的每种资源都复制一个副本。这样看来,fork是一个开销十分大的系统调用,这些开......【阅读全文】