Linux内核的同步机制是什么?主要有哪几种内核锁
Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;
伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。
Linux的内核锁主要是自旋锁和信号量。
自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。
信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。
伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。
Linux的内核锁主要是自旋锁和信号量。
自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。
信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。
【Linux内核的同步机制是什么?主要有哪几种内核锁】相关文章
7. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
8. 什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
本文来源:https://www.mianshiwenti.com/a13612.html
进入下载页面
上一篇:Linux如何压缩可执行文件
下一篇:一些Solaris面试题
﹝Linux内核的同步机制是什么?主要有哪几种内核锁﹞相关内容
- GC是什么?为什么要有GC?
- Hashtable 添加内容的方式有哪几种,有什么区别?
- 你经历的项目中的SCM配置项主要有哪些?什么是配置项?
- Linux管理员面试题 Linux admin interview questions
- Linux面试题LINUX系统类
- 简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
- HttpServlet类中的主要方法都有哪些?各自的作用是什么?
- 排序都有哪几种方法?请列举。用JAVA实现一个快速排序
- Oracle数据库有哪几种启动方式
- Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?