- 博客(100)
- 资源 (4)
- 收藏
- 关注
转载 c&c++框架
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/
2016-04-27 10:57:34
404
原创 synchronization mutex &semaphore completion &example
Linux offers two kinds of semaphores:• Kernel semaphores, which are used by kernel control paths • System V IPC semaphores, which are used by User Mode processes struct semaphore {spinl
2016-04-25 20:09:31
847
原创 synchronization in Linux kernel
kernel preemption:the main characteristic of a preemptive kernel is that a process running in the kernel mode can be replaced by another process while in the middle of a kern
2016-04-25 09:36:05
669
原创 softirq and tasklets
tasklet is something like a very small thread that has neither stack, not context of its own. Such “threads” work quickly and completely.
2016-04-22 10:19:55
2670
转载 epoll实现
poll&&epoll实现分析(二)——epoll实现 2014-05-05 23:16:52来自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28541347&id=4238524Epoll实现分析——作者:lvyilong316通过上一章分析,poll运行效率的两个瓶颈已经找
2016-01-14 18:30:35
404
转载 epoll
来自:www.cnblogs.com/apprentice89/p/3234677.htmlepoll用法回顾更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size);int epoll_ctl(int epfd, int op, int
2016-01-14 16:09:02
439
转载 copy_from_user
来自 http://blog.chinaunix.net/uid-20469034-id-1943565.htmlcopy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0.这么简单的一个函数却含盖了许多关于内核方面的知识,比如内核关于异常出错的处理.从用户空间拷贝数据到内核中时必须非常小心,如果用户空间的数据地址是个非法的地址,或是超
2016-01-14 15:03:46
577
转载 select(poll)系统调用实现解析(二)
二、重要结构体之间关系 比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、struct poll_table_struct,这小节重点讨论前三个,后面一个留到后面小节。 2.1、结构体关系每一个调用select()系统调用的应用进程都会存在一个struc
2016-01-14 14:22:32
443
转载 select(poll)系统调用实现解析(三)
三、讨论几个细节 来自:http://blog.csdn.net/lizhiguo0532/article/details/65689693.1、fop->poll() fop->poll()函数就是file_operations结构体中的poll函数指针项,该函数相信很多人都知道怎么写,网上大把的文章介绍其模板,但是为什么要那么写,而且它做了什么具体的事情?本小
2016-01-14 14:15:06
244
原创 apue高级IO
1、系统调用分成低速系统调用和其他系统调用两类。低速系统调用是可能会使进程永远阻塞的一类调用调用,他们包含:如果某些文件类型(例如管道,终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞。如果数据不能立即被上述相同类型的文件接受(由于在管道中无空间,网络流控制等),则写操作也会使调用者永远阻塞。在某些条件发生之前,打开某些类型的文件会被阻塞。(例如开打一个终端设备可
2016-01-13 18:18:36
362
原创 libevent8
信号工作原理参考:http://blog.csdn.net/luotuo44/article/details/38538991假如用户要监听SIGINT这个信号,那么在实现的内部就对SIGINT这个信号设置捕抓函数。此外,在实现的内部还要建立一条管道(pipe),并把这个管道加入到多路IO复用函数中。当SIGINT这个信号发生后,捕抓函数将会被调用。而这个捕抓函数的工作就是往管道写入一个字
2016-01-12 21:54:48
410
原创 libevent7
将event加入到队列后调用intevent_base_dispatch(struct event_base *event_base){return (event_base_loop(event_base, 0));}intevent_base_loop(struct event_base *base, int flags){ const struct eve
2016-01-12 20:59:36
497
原创 libevent5
在上一篇中 会调用event_assign将初始化event中去;同时调用event_add_nolock()将event添加到base中intevent_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short events, void (*callback)(evutil_socket_
2016-01-12 15:30:14
331
原创 libevent(3)
信号signal事件:见博客http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html分析socket pairLibevent通过socketpair,将signal事件与I/O事件完美的统一起来。Socketpair,简单的说就一对socket,一端用于写,一端用于读。工作方式如下为了与I/O事件统一起来,l
2016-01-05 20:10:11
323
原创 libdevent(3)
信号signal事件:见博客http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html分析socket pairLibevent通过socketpair,将signal事件与I/O事件完美的统一起来。Socketpair,简单的说就一对socket,一端用于写,一端用于读。工作方式如下为了与I/O事件统一起来,l
2016-01-05 20:07:52
305
原创 libevent(2)
event_set()函数:在将事件注册事件处理框架之前,应该先调用event_set对事件进行相关设置。intevent_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short events, void (*callback)(evutil_socket_t, short, void *), v
2016-01-05 09:33:09
481
原创 libevent基本结构的分析
结构体event 和event_base是libevent的两个重要数据结构;具体意思见英文解释:/** Structure to define the backend of a given event_base. */struct eventop { /** The name of this backend. */ const char *name; /** Func
2016-01-04 22:09:51
1043
转载 signal 9
内核处理信号对应用层堆栈的影响本文着重点在内核信号处理对应用层堆栈的影响上,其他的一些在处理信号细节上被忽略。至于本文是否跟安全相关,那就是仁者见仁智者见智了。1 发送信号过程:发送信号的过程比接收信号的过程简单的多。当应用层用KILL命令向某个进程发送进程的时候,内核只在进程task_struct的sigpending结构中安排一个信号位。2 接收信号过程
2015-11-23 15:22:22
3646
转载 signal 6
内核signal_struct中notify_count变量的作用 在进程或者线程执行exec函数的时候,由于exec函数会影响整个进程组的内存结构,所以其他线程的存在是没有意义的,这时需要杀死线程组中其他的线程,也包括主线程,杀死线程的任务交给了信号SIGKILL,同时执行exec函数的进程需要被挂起,等待所有线程结束后,在重新唤醒执行exec的进程。这一系列的控制,在sig
2015-11-23 14:48:38
1315
转载 signal 5转载
在分析内核对信号处理的代码,一直不太明白signal_struct中group_stop_count这个变量的作用,google下只发现了这个帖子http://tsecer.blog.163.com/blog/static/15018172011919103338913/,介绍了一下group_stop_count,大致看懂了一些。我说下对这个变量的理解,group_stop_count是记录当前
2015-11-23 14:45:19
581
转载 signal3
提到signal与thread的关系,就得先提POSIX标准。POSIX标准决定了Linux为何将signal如此实现: 1 信号处理函数必须在多线程应用的所有线程之间共享,但是,每个线程要有自己的挂起信号掩码和阻塞信号掩码。 2 POSIX 函数kill/sigqueue必须面向所有的多线程应用而不是某个特殊的线程。 3 每个发给多线程应用的信号仅传送给1个线程,这个线程
2015-11-23 14:18:11
686
转载 signal4
Linux signal next_signal 负责从挂起信号中选择deliver的signo:当然,有线程显存私有的penging,有线程组共有的pending,对于线程而言,先从自己私有的pending中选,处理完毕私有的才会去处理线程组共有的pending,这个逻辑的代码在:int dequeue_signal(struc
2015-11-23 14:16:27
1003
转载 first bit
unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset){ const unsigned long *p = addr + BITOP_WORD(offset); // offset位于p指向的long地址32位空间
2015-11-23 14:14:30
462
转载 linux可变参数 va_arg
在linux驱动中 kobject_add(struct kobject *kobj, struct kobject *parent,const char *fmt, ...)此时函数传入的可变参数;怎么处理? 依据参数出入时是压栈操作,具体压栈顺序根据编译器规则来确定。{va_list args;int retval;if (!kobj)return -E
2015-11-23 10:02:08
906
转载 linux操作系统CPL、DPL、RPL说明
linux操作系统中特权级有3种:CPL,DPL和RPL,每个都是有4个等级。我对他们的关系理解是这样:一般来说,CPL代表当前代码段的权限,如果它想要去访问一个段或门,首先要看看对方的权限如何,也就是检查对方的DPL,如果满足当前的权限比要访问的权限高,则有可能允许去访问,有些情况我们还要检查选择子的权限,即RPL,因为我们通过选择子:偏移量的方式去访问一个段,这算是一个访问请求动作,因
2015-10-25 10:53:56
1480
转载 TSS TR
32位CPU寄存器简介以及TSS和TRPosted on 2010-07-26 17:18 mumuliang 阅读(1815) 评论(1) 编辑 收藏CPU的指令一般都是通过寄存器来实现的。 其中有一个寄存器叫做EIP(Instruction Pointer,指令寄存器),程序的执行就是靠EIP的不断增加来完成的(跳转的话,EIP就变成了跳转到的地址)。在Window
2015-10-21 09:37:32
790
原创 进程切换&&中断&&异常&系统调用execve()函数
进程切换每个进程都可以拥有属于自己的进程空间;但是共享一个CPU寄存器;因此在切换进程之前,必须确保每个寄存器的值都是准入了挂起进程时的值。进程恢复执行前必须装入寄存器的一组数据称为硬件上下文(hardware context) ;在linux 中 硬件上下文的一部分存放在TSS段,而剩余部分存放在内核态堆栈中。
2015-10-21 09:36:49
573
原创 内核线程&&系统调用exit&&wait4&&撤销进程
在linux中,内核线程在以下几个方面运行:内核线程只运行在内核态,普通进程可以运行于内核态和用户态内核线程用大于page_offset的线性地址,普通进程可以用所有的创建内核线程kernel_thread()函数创建一个新的内核线程;fn所要执行的内核函数的地址fn,要传递给函数的参数arg,一组clone标志/* * Create a kernel threa
2015-10-20 21:26:34
552
原创 copy_process
在 fork()函数中最重要的是 copy_peocess函数 实现进程的复制asmlinkage int sys_fork(struct pt_regs regs){return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL);}asmlinkage int sys_vfork(struct pt_regs r
2015-10-19 21:31:28
644
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅