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


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

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

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

Tags in this post...

面试题 相关文章推荐
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
Sep 09 面试题
static关键字的用法
Oct 07 面试题
2019年Java 最常见的 面试题
Oct 19 面试题
C语言中break与continue的区别
Jul 12 面试题
必须要使用游标的SQL语句有那些
May 07 面试题
C#如何允许一个类被继承但是避免这个类的方法被重载?
Feb 24 面试题
如何开启linux的ssh服务
Feb 14 面试题
什么是SCM(软件配置管理)
Aug 16 面试题
你所在的项目是如何确定版本号的
Dec 28 面试题
Java如何获得ResultSet的总行数
Sep 03 面试题
介绍一下Ruby的特点
Jan 20 面试题
简述安装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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
django 创建过滤器的实例详解
2017/08/14 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python实现画图工具
2020/08/27 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
Python如何定义一个函数
2015/09/01 面试题
会展策划与管理专业求职信
2014/06/09 职场文书
故宫英文导游词
2015/01/31 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
各种货币符号快捷输入
2022/02/17 杂记
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
Redis唯一ID生成器的实现
2022/07/07 Redis