Linux内核之锁
文章平均质量分 80
zmxiangde_88
这个作者很懒,什么都没留下…
展开
-
同步与互斥基本原理
现代操作系统提供了一个并发控制环境,即系统中同时活动着的多个不同的进程,这些进程共享同一个CPU、内存或 I/O设备。特别是对于Linux这种世界上最先进的操作系统来说,其多任务、多用户、分时实时混合的性质决定了多个进程在某种程度上彼此依赖或相互制约的关系,这些关系我们叫“并发关系”,按其性质可以分为同步(synchronization)和互斥(mutual exclusion)两类。转载 2012-09-08 15:40:24 · 3097 阅读 · 0 评论 -
RCU机制
读-拷贝-更新(RCU)是为了保护在多数情况下被多个CPU读的数据结构而设计的另一种同步技术。RCU允许多个读者和写者并发执行(相对于只允许一个写者执行的顺序锁有了改进)。而且,RCU是不使用锁的,就是说,它不使用被所有CPU共享的锁或计数器,在这一点上与读/写自旋锁和顺序锁(由于高速缓存行窃用和失效而有很高的开销)相比RCU具有更大的优势。RCU是如何不使用共享数据结构而令人惊讶地实现多转载 2012-09-08 20:57:01 · 1054 阅读 · 0 评论 -
自旋锁
加锁(locking)是一种广泛应用的同步技术。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把“锁”。由锁机制保护的资源非常类似于限制于房间内的资源,当某人进入房间时,就把门锁上。如果内核控制路径希望访问资源,就试图获取钥匙“打开门”。当且仅当资源空闲时,它才能成功。然后,只要它还想使用这个资源,门就依然锁着。当内核控制路径释放了锁时,门就打开,另一个内核控制路径就可以进入转载 2012-09-08 16:01:18 · 587 阅读 · 0 评论 -
信号量
信号量这个东西,从本质上说,它实现了一个加锁原语,即让等待者睡眠,直到等待的资源变为空闲。实际上,Linux提供两种信号量:- 内核信号量,由内核控制路径使用- System V IPC信号量,由用户态进程使用在本专题,我们集中讨论内核信号量,而IPC信号量将有专门的专题来讲。内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路转载 2012-09-08 20:16:40 · 924 阅读 · 0 评论 -
原子操作
若干汇编语言指令都具有“读-修改-写”特点 —— 也就是说,它们访问存储器单元两次,第一次读原值,第二次写新值。假定运行在两个CPU上的两个内核控制路径试图通过执行非原子操作来同时“读-修改-写”同一存储器单元,如n++。首先,两个CPU都试图读同一单元,比如n=5。但是存储器仲裁器(对访问RAM芯片的操作进行串行化的硬件电路)插手,只允许其中的一个访问而让另一个延迟。然而,当第一个读操作转载 2012-09-08 15:57:59 · 938 阅读 · 0 评论