资料介绍
Mutex 是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section 代码的访问,保证这段代码不会被并行的运行。
Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。
Binary semaphore与Mutex 的差异:
在有的系统中Binary semaphore与Mutex 是没有差异的。在有的系统上,主要的差异是mutex 一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量, 大家可以加或减),因此semaphore可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex 能否由其他进程释放则未定,因此建议mutex 只用于保护critical section 。而semaphore则用于保护某变量,或者同步。
另一个概念是spin lock ,这是一个内核态概念。spin lock 与semaphore的主要区别是spin lock 是busy waiting ,而semaphore是sleep 。对于可以sleep的进程来说, busy waiting 当然没有意义。对于单CPU的系统, busy waiting当然更没意义(没有CPU可以释放锁) 。因此,只有多CPU的内核态非进程空间,才会用到spin lock 。Linux kernel 的spin lock 在非SMP的情况下,只是关irq ,没有别的操作,用于确保该段程序的运行不会被打断。其实也就是类似mutex 的作用,串行化对critical section 的访问。但是mutex 不能保护中断的打断,也不能在中断处理程序中被调用。而spin lock 也一般没有必要用于可以sleep 的进程空间。
---------------------------------------------------------------------
------------------------
内核同步措施
为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。我们的重点不是介绍这些方法的详细用法, 而是强调为什么使用这些方法和它们之间的差别。
Linux 使用的同步机制可以说从2.0 到2.6 以来不断发展完善。从最初的原子操作, 到后来的信号量, 从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux 从单处理器到对称多处理器的过度;伴随着从非抢占内核到抢占内核的过度。锁机制越来越有效,也越来越复杂。
目前来说内核中原子操作多用来做计数使用,其它情况最常用的是两种锁以及它们的变种: 一个是自旋锁,另一个是信号量。我们下面就来着重介绍一下这两种锁机制。
- Linux内核文件Cache机制 4次下载
- 嵌入式LINUX系统内核和内核模块调试 9次下载
- Linux_Kernel_Developments内核开发 37次下载
- Linux内核的编译与运行 10次下载
- Linux的内核定制方法详细说明 22次下载
- Linux的内核定制方法详细说明 4次下载
- Linux内核GPIO操作函数的详解分析 28次下载
- 动手编译Linux内核的教程免费下载 14次下载
- 嵌入式LINUX系统内核和内核模块调试教程 21次下载
- 如何才能编译Linux的内核 8次下载
- Linux 0.01版本内核的源码和注释的详细资料免费下载 0次下载
- 基于Linux内核输入子系统的驱动研究 23次下载
- 嵌入式系统Linux内核工程师必会题 51次下载
- Linux内核详细说明 35次下载
- Linux 内核0.11 详细注释 23次下载
- 获取Linux内核源码的方法 270次阅读
- Linux系统内核与Linux发行套件的区别 917次阅读
- Linux内核中整合对 Rust 的支持 949次阅读
- Linux内核之块分配器 1195次阅读
- Linux指令的详细整理 1823次阅读
- Linux操作系统修改内核参数的三种方法详细说明 1w次阅读
- Linux内核到底是什么应该如何学习 1741次阅读
- Linux:QEMU调试内核的步骤 2841次阅读
- 深入linux内核架构 Linux内核架构分析解读 3376次阅读
- Linux内核与Android的关系 4371次阅读
- 如何自行编译一个Linux内核的详细资料概述 2995次阅读
- Linux内核地址映射模型与Linux内核高端内存详解 3299次阅读
- Linux内核模块介绍,使用Linux模块的优点 7040次阅读
- 基于Linux进程管理的详细剖析 3453次阅读
- Linux内核开发工具介绍 4524次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多