免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 802 | 回复: 0
打印 上一主题 下一主题

内核同步机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-21 13:10 |只看该作者 |倒序浏览
Linux内核同步机制
Atomic Operations(原子操作)
   
Spin Locks(自旋锁)
   只在多处理器的情况下有效。
    APIs: spin_lock_init()
             spin_lock()
             spin_unlock()
   Read/Write Spin Locks()
   在被rwlock保护的临界区,允许有多个读操作,但只允许一个写操作。而且读写操作的优先级是一样的,即是说,写操作也必须在当前的读操作完成之后才能进行。
   rwlock 结构体的 lock 成员在初始话是被置为 0x01000000 (bit24 置1) 。 状态转移图如下:
      
   0x01000000 (初始值)   --->   0x00000000 (写操作, bit 24 clear)
                                    --->   0x00ffffff      (读操作,只有一个reader)
                            --->   0x00ffffff      (读操作,两个reader,以此类推)
Seqlocks
    和 rwlock 类似, 但是 写操作比读操作有更高的优先级。 因此,写操作的延时可以降低。但是,读操作可以需要被执行多次。
Read-Copy Update(RCU)
    http://lse.sourceforge.net/locking/rcupdate.html
   * Classic RCU (CONFIG_CLASSIC_RCU)
     
     Sleeping is forbidden in reader side critical sections.
   * srcu  (Sleepable RCU)
     http://lwn.net/Articles/202847/
     The primary challenge in designing an SRCU is to prevent any
     given task sleeping in an RCU read-side critical section from
     preventing an unbounded number of RCU callbacks.
   * qrcu (quick srcu)
     http://lwn.net/Articles/223752/
     http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg102082.html
     
     The current srcu implementation is very good for readers,
     lock/unlock are extremely cheap. But for that reason it is not
     possible to avoid synchronize_sched() and polling in
     synchronize_srcu().
     'qrcu' behaves the same as srcu but optimized for writers. The
     fast path for synchronize_qrcu() is mutex_lock() + atomic_read()
     + mutex_unlock(). The slow path is __wait_event(), no
     polling. However, the reader does atomic inc/dec on lock/unlock,
     and the counters are not per-cpu.
     Also, unlike srcu, qrcu read lock/unlock can be used in interrupt
     context, and 'qrcu_struct' can be compile-time initialized.
   * Tree RCU (CONFIG_TREE_RCU)
     
   * Preempt RCU (CONFIG_PREEMPT_RCU)
   
   * rcu torture (CONFIG_RCU_TORTURE_TEST)
     RCU test module.
     Create RCU reader and writer threads to test RCU.
   * Source code
     rcupdate.c   : common code, provide synchronize_rcu()
   
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/52480/showart_1905338.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP