ChinaUnix.net
相关文章推荐:

内核同步的方法

一.为什么内核需要同步方法 并发指的是多个执行单元同时,并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量,静态变量等)的访问则很容易导致竞态。 主要竞态发生如下: 1.对称多处理器(SMP)多个CPU SMP是一种紧耦合,共享存储的系统模型,它的特点是多个CPU使用共同的系统总线,因此可访问共同的外设和存储器。 2.单CPU内进程与抢占它的进程 Linux2.6内核支持抢占调度,一个进程在内核执行的时候被另一高优先级的...

by KYlinux - Linux文档专区 - 2008-08-04 16:52:52 阅读(607) 回复(0)

相关讨论

内核同步方法 1.原子整数操作 原子操作可以保证指令以原子的方式运行--执行过程不能被打断.原子操作把读取和改变变量的行为包含在一个单步中执行,从而避免了竞争. 定义:atomix_t t; Atomic_t u = ATOMIC_INIT(0); 2.操作 定义在中,原子操作是内联函数.通过内嵌汇编指令来实现. Int atomic_read(atomic_t v) Void atomic_set(atomic_t *v,int i) Void atomic_add(int i,atomic_t *v) Void atomic_sub(int i,ato...

by liao_cj - Linux文档专区 - 2007-10-06 08:52:49 阅读(688) 回复(0)

2008年07月29日 星期二 21:46 Linux系统提供了一种比信号量更好的同步机制,即completion,它用于一个执行单元等待另一个执行单元执行完某事。Linux系统中与completion相关的操作主要有以下4种: (1) 定义completion struct completion my_completion; (2) 初始化completion init_completion(&my_completion); 对my_completion的定义和初始化可以通过如下快捷方式实现 ...

by zhaoyuaini - Linux文档专区 - 2008-12-16 10:13:52 阅读(1061) 回复(0)

请教各位几个问题: 自旋锁的实现会去禁止本地cpu内核抢占;之所以要这么做我的理解是为了防止这样的情况:假设CPU1上的线程1持有自旋锁L后进入临界区A,然后发生内核抢占,本地CPU1上切换到线程2执行,而此时若线程2也试图持有自旋锁L进入临界区A,就会发生死锁的情况。 上面的理解有问题吗?在SMP系统上,线程1是否有可能会被其他的CPU执行?如果有可能,是否在SMP系统是实现自旋锁时可以不用禁止本地cpu内核抢占? 另外,禁止内...

by cjdao - 内核源码 - 2012-05-16 15:19:08 阅读(2663) 回复(13)

内核控制路径:内核处理不同种类的中断所执行的指令序列 内核控制路径所充当的角色与进程相似,二者之间的区别在于前者更基本:首先,没有任何描述符与内核控制路径有关;其次,内核控制路径不是通过单个函数进行调度,而是通过把停止和回复路径的指令序列插入到内核的代码中进行调度。 在交错执行内核控制路径时,要特别注意那些包含几个相关变量的数据结构。 本章包括一下几个部分 1: 什么时候同步是不必要的 2:原...

by zhangyd6 - Linux文档专区 - 2008-03-27 23:55:00 阅读(510) 回复(0)

上一章讨论了竞争条件为何会产生以及怎么去解决。幸运的是,Linux内核提供了一组相当完备的同步方法。这一章就依次讨论这些方法,包括它们的接口、行为和用途。这些方法能使内核开发者们编写出高效而又自由竞争的代码。 9.1 原子操作 原子操作可以保证指令以原子的方式执行——执行过程不被打断。内核提供了两组原子操作接口——一组针对整数进行操作,另一组针对单独的位进行操作。在Linux支持的所有体系结构上都实现了这...

by istvh - Linux文档专区 - 2009-07-27 22:27:30 阅读(718) 回复(0)

在学习 Linux® 的过程中,您也许接触过并发(concurrency)、临界段(critical section)和锁定,但是如何在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制,包括原子运算符(atomic operator)、自旋锁(spinlock)、读/写锁(reader/writer lock)和内核信号量(kernel semaphore)。 本文还探讨了每种机制最适合应用到哪些地方,以构建安全高效的内核代码。 本文讨论了 Linux 内核中可用的大量同步或锁定机...

by istvh - Linux文档专区 - 2009-07-27 23:14:42 阅读(1247) 回复(0)

五、读写自旋锁 如果临界区保护的数据是可读可写的,那么只要没有写操作,对于读是可以支持并发操作的。对于这种只要求写操作是互斥的需求,如果还是使用自旋锁显然是无法满足这个要求(对于读操作实在是太浪费了)。为此内核提供了另一种锁-读写自旋锁,读自旋锁也叫共享自旋锁,写自旋锁也叫排他自旋锁。 读写自旋锁是一种比自旋锁粒度更小的锁机制,它保留了“自旋”的概念,但是在写操作方面,只能最多有一个写进程,在读操...

by embededgood - Linux文档专区 - 2009-05-02 02:48:30 阅读(724) 回复(0)

Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。 Linux内核是多进程、多线程的操作系统,它提供了相当完整的内核同步方法内核同步方法列表如下: 中断屏蔽 原子操作 自旋锁 读写自旋锁 顺序锁 信号量 读写信号量 BKL(大内核锁) Seq锁 一、并发与竞态: 定义: 并发(concurrency)指的是多个执行单元同时、...

by embededgood - Linux文档专区 - 2009-05-02 02:47:18 阅读(938) 回复(0)

我的想法很简单,就是内核页表如何同步,当执行vmalloc时,是在init_mm中操作的,分配页表,物理页等,这些如何同步到其他进程的页表中 其他进程访问该vm区域时,发生do_page_fault异常,系统通过比较init_mm的pgd和当前的pgd,进行同步 只需要将init_mm的pgd_t设置到当前进程的pgd中,就搞定了,应该不需要往下到pmd的 但实际不是这样,why? kernel 3.0 #ifdef CONFIG_X86_32 static inline pmd_t *vmalloc_sync_one(pgd_t *pg...

by qtdszws - 内核源码 - 2013-07-31 09:52:01 阅读(1633) 回复(8)

如题,在LDD3中看到,如果在irq中要保护数据的话,要使用spinlock,原因是在中断context中,这个context指的是什么context?特点是什么?和user context or kernel context有什么区别?如果在exception中,要保护数据的话,应该使用什么方法?在softirq中要使用什么方法?tasklet呢?work_queue呢?

by cuibixiong_cu - 内核源码 - 2013-06-22 21:12:12 阅读(1143) 回复(3)