Linux内核的同步机制是什么?主要有哪几种内核锁


Posted in 面试题 onJanuary 03, 2013
Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;
伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。

Linux的内核锁主要是自旋锁和信号量。
自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。

Tags in this post...

面试题 相关文章推荐
Java面试中常遇到的问题,也是需要注意的几点
Aug 30 面试题
Java方面的关于数组和继承的笔面试题
Sep 18 面试题
北京华建集团SQL面试题
Jun 03 面试题
光声世纪笔试题目
Aug 25 面试题
NET程序员上机面试题
May 23 面试题
上海雨人软件技术开发有限公司测试题
Jul 14 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
Apr 11 面试题
什么是Linux虚拟文件系统VFS
Jan 31 面试题
启动一个线程是用run()还是start()
Dec 25 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Jul 02 面试题
请问软件开发中的设计模式你会使用哪些
May 13 面试题
初级Java程序员面试题
Mar 03 面试题
简述安装Slackware Linux系统的过程
Jan 12 #面试题
介绍一下Linux内核的排队自旋锁
Jan 04 #面试题
Windows和Linux动态库应用异同
Apr 17 #面试题
linux面试题参考答案(9)
Jan 07 #面试题
linux面试题参考答案(8)
Apr 19 #面试题
linux面试题参考答案(7)
Oct 29 #面试题
linux面试题参考答案(6)
Jun 23 #面试题
You might like
php+mysql事务rollback&commit示例
2010/02/08 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
python列表操作实例
2015/01/14 Python
python获取目录下所有文件的方法
2015/06/01 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
详解python多线程之间的同步(一)
2019/04/03 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
利用python在excel中画图的实现方法
2020/03/17 Python
linux 下selenium chrome使用详解
2020/04/02 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
百度吧主申请感言
2014/01/12 职场文书
运动会广播稿30字
2014/01/21 职场文书
大学四年个人自我小结
2014/03/05 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
python爬虫--selenium模块
2021/03/31 Python
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
MySQL中一条update语句是如何执行的
2022/03/16 MySQL