kernel
文章平均质量分 80
四无新人
这个作者很懒,什么都没留下…
展开
-
Linux 内核线程间同步
用户空间的线程间同步机制最终需要内核提供相应的wait, wake up, schedule机制。如果是内核线程间的同步就是直接对这些wait,wake up,schedule的应用。 信号量的使用:struct semaphore sem1,sem2;sema_init(&sem1, 0);sema_init(&sem2, 0); void thread1(voi原创 2012-05-07 10:21:15 · 952 阅读 · 0 评论 -
Where Softirq Is Invoked
summarysoftirq 真正干活的函数是__do_softirq。 linuxv3.11内核里能够执行__do_softirq,有如下调用, 这里指真正执行softirq的地方,不是触发(设置)softirq标志 !!!每个硬中断退出的时。当bh使能的时。发送回环报文时。case1 每个硬中断退出的时候。call trace转载 2017-03-08 12:45:25 · 928 阅读 · 0 评论 -
REEMPT_ACTIVE标志在内核抢占中的作用
Linux从2.6开始支持内核抢占,意味着即使进程运行在内核态也可以被抢占。为了支持内核抢占,代码中为每个进程的 thread_info 引入了 preempt_count 计数器,数值为0的时候表示可以内核抢占,每当进程持有内核锁的时候把 preempt_count 计数器加1,表示禁止内核抢占。此外还有一些其它禁止内核抢占的场景,也通过 preempt_counter 字段反应出来:preem转载 2017-03-08 12:41:38 · 822 阅读 · 0 评论 -
Linux kernel 同步策略的应用
l 下半部可以抢占进程上下文的代码,所以,当进程在访问和下半部共享的数据时,应首先获得锁,同时禁止下半部的执行。l 中断可以抢占下半部,所以,当下半部在访问和中断共享的数据时,应首先获得锁,同时禁止中断。l 即使同类的软中断也有可能在不同的cpu上并行执行,所以,软中断中用到的任何共享的数据在使用前都需要加锁。l 同类tasklet不会并发执行,所以,同类tasklet用到的共原创 2012-04-30 22:29:44 · 960 阅读 · 0 评论 -
Linux下VLAN功能的实现
http://www.cnblogs.com/zmkeil/archive/2013/04/18/3029339.html转载 2014-05-14 10:29:45 · 8677 阅读 · 0 评论 -
Linux下的虚拟Bridge实现
http://www.cnblogs.com/zmkeil/archive/2013/04/21/3034733.htmlLinux下的虚拟Bridge实现转载 2014-05-14 10:24:58 · 16479 阅读 · 0 评论 -
Linux实现的IEEE 802.1Q VLAN
http://www.openstack.cn/p536.html转载 2014-05-19 09:02:17 · 1351 阅读 · 1 评论 -
Linux connection tracking and NAT
Linux 的connection tracking和NAT都是通过netfilter框架实现的。connection tracking模块实现了防火墙的状态检测功能,包括单连接和多连接的(FTP)。NAT模块依赖于connection tracking建立的connection,在此基础上进行地址和端口的匹配和转换。PREROUTING: ip_conntrac原创 2012-09-12 14:36:42 · 3535 阅读 · 0 评论 -
Linux kernel 内存屏障在RCU上的应用
内存屏障主要解决的问题是编译器的优化和CPU的乱序执行。 编译器在优化的时候,生成的汇编指令可能和c语言程序的执行顺序不一样,在需要程序严格按照c语言顺序执行时,需要显式的告诉编译不需要优化,这在linux下是通过barrier()宏完成的,它依靠volidate关键字和memory关键字,前者告诉编译barrier()周围的指令不要被优化,后者作用是告诉编译器汇编代码会使内存里面的值更改原创 2012-05-02 13:03:32 · 6323 阅读 · 0 评论 -
linux内核RCU的演变
2.6内核引入了RCU锁,这种锁十分高效,总的说来就是读时加锁,写时拷贝,读后更新。具体的流程可以参照 rcu的相关文档。本文主要谈一下rcu在linux2.6内核的演变过程,它分别经历了三个阶段,分别是传统rcu锁,可抢占rcu锁以及2.6.29 中将要引入的树形分层rcu锁。 linux中最早引入的rcu锁十分的粗糙,实现原理也是非常简单,毕竟linux中不管多复杂的机制一开始的转载 2012-07-05 14:40:20 · 7281 阅读 · 0 评论 -
Linux内核RCU机制的实现
一:前言RCU机制出现的比较早,只是在linux kernel中一直到2.5版本的时候才被采用.关于RCU机制,这里就不做过多的介绍了,网上有很多有关RCU介绍和使用的文档.请自行查阅.本文主要是从linux kernel源代码的角度.来分析RCU的实现.在讨论RCU的实现之前.有必要重申以下几点:1:RCU使用在读者多而写者少的情况.RCU和读写锁相似.但RCU的读者占锁转载 2012-07-05 14:38:08 · 2751 阅读 · 0 评论 -
Linux Futex的设计与实现
引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwo转载 2012-05-07 22:47:26 · 36240 阅读 · 7 评论 -
关于单CPU,多CPU上的原子操作
所谓原子操作,就是"不可中断的一个或一系列操作" 。硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。这也是某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源互斥的原因。在对称多处理器(Symmetric Multi-Processor转载 2012-05-08 10:16:56 · 986 阅读 · 0 评论 -
Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
引言随着科技的发展,尤其是在嵌入式领域,高性能、低功耗的处理器成为众多厂商追逐的目标,但是由于技术和工艺的瓶颈,试图在单核处理器上达到这样的目标变得越发困难,于是人们提出了多核处理器的概念。多核处理器的核心思想是一个处理器中包含若干个核(或线程),所有核(或线程)之间共享 IO、Cache、内存等资源,对于这些资源的使用和分配由硬件来完成,用户无需关注细节,因此每个核(或线程)对于用户来说转载 2012-05-07 21:52:29 · 1750 阅读 · 0 评论 -
《深入理解Linux内核》软中断/tasklet/工作队列
http://www.cnblogs.com/li-hao/archive/2012/01/12/2321084.html软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之转载 2017-03-08 16:25:41 · 703 阅读 · 0 评论