文章目录

  • 1、原子操作
  • 2、自旋锁、读写自旋锁
  • 3、信号量、读写信号量、互斥体
  • 4、完成量
  • 5、大内核锁
  • 6、顺序锁
  • 7、禁止抢占
  • 8、顺序和屏障

1、原子操作

2、自旋锁、读写自旋锁

(自旋锁)
spin_lock() 获取指定的自旋锁
spin_lock_irq() 禁止本地中断并获取指定的锁
spin_lock_irqsave() 保存本地中断的当前状态,禁止本地中断,并获取指定的锁
spin_unlock() 释放指定的锁
spin_unlock_irq() 释放指定的锁,并激活本地中断
spin_unlock_irqstore() 释放指定的锁,并让本地中断恢复到以前状态

(读自旋锁)
read_lock() 获取指定的读锁
read_lock_irq() 禁止本地中断并获得指定读锁
read_lock_irqsave() 存储本地中断的当前状态,禁止本地中断并获得指定读锁
read_unlock() 释放指定的读锁
read_unlock_irq() 释放指定的读锁并激活本地中断
read_unlock_irqrestore() 释放指定的读锁并将本地中断恢复到指定前的状态

(写自旋锁)
write_lock() 获得指定的写锁
write_lock_irq() 禁止本地中断并获得指定写锁
write_lock_irqsave() 存储本地中断的当前状态,禁止本地中断并获得指定写锁
write_unlock() 释放指定的写锁
write_unlock_irq() 释放指定的写锁并激活本地中断
write_unlock_irqrestore() 释放指定的写锁并将本地中断恢复到指定前的状态

3、信号量、读写信号量、互斥体

(信号量)
down_interruptible(struct semaphore *) 以试图获得指定的信号量,如果信号量已被争用,则进入可中断睡眠状态
down(struct semaphore *) 以试图获得指定的信号量,如果信号量已被争用,则进入不可中断睡眠状态
up(struct semaphore *) 以释放指定的信号量,如果睡眠队列不空,则唤醒其中一个任务

(读写信号量)
读写信号量和信号量之间的关系 与 读写自旋锁和普通自旋锁之间的关系 差不多。
读写信号量都是二值信号量,即计数值最大为1,增加读者时,计数器不变,增加写者,计数器才减一。
也就是说读写信号量保护的临界区,最多只有一个写者,但可以有多个读者。
读写信号量的相关内容参见:<asm/rwsem.h> 具体实现与硬件体系结构有关

(互斥体)
mutex_lock(struct mutex *)
mutex_unlock(struct mutex *)

4、完成量

wait_for_completion(struct completion *)
complete(struct completion *)

5、大内核锁

大内核锁已经不再使用,只存在与一些遗留的代码中.
???

6、顺序锁

7、禁止抢占

preempt_disable() 增加抢占计数值,从而禁止内核抢占
preempt_enable() 减少抢占计算,并当该值降为0时检查和执行被挂起的需调度的任务

8、顺序和屏障

rmb() 阻止跨越屏障的载入动作发生重排序
read_barrier_depends() 阻止跨越屏障的具有数据依赖关系的载入动作重排序
wmb() 阻止跨越屏障的存储动作发生重排序
mb() 阻止跨越屏障的载入和存储动作重新排序
smp_rmb() 在SMP上提供rmb()功能,在UP上提供barrier()功能
smp_read_barrier_depends() 在SMP上提供read_barrier_depends()功能,在UP上提供barrier()功能
smp_wmb() 在SMP上提供wmb()功能,在UP上提供barrier()功能
smp_mb() 在SMP上提供mb()功能,在UP上提供barrier()功能
barrier() 阻止编译器跨越屏障对载入或存储操作进行优化

linux kernel同步方法的总结相关推荐

  1. linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项

    Linux kernel debug技巧----开启DEBUG选项 作者:wowo 发布于:2016-11-1 19:39 分类:Linux应用技巧 kernel的source code中有很多使用p ...

  2. linux kernel内存回收机制

    http://www.wowotech.net/linux_kenrel/233.html 无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有 ...

  3. Linux kernel futex.c的bug导致JVM不可用

    JVM死锁导致线程不可用,然后会瞬间起N个线程,当然也是不可用的,因为需要的对象死锁,然后耗尽文件句柄导致外部TCP无法建议拒绝服务,jstack之后就会恢复. 解决办法:替换中间件类库 ,比如htt ...

  4. linux命令注入,Linux kernel本地命令注入漏洞

    Linux kernel本地命令注入漏洞 2005-10-19 eNet&Ciweek Linux kernel 2.2.6 Linux kernel 2.2.5 Linux kernel 2 ...

  5. 编译Linux Kernel(linux-4.19.178)并制作成rpm文件

    目录 一.安装依赖项 二.下载.解压缩.制作.config文件 三.编译内核及打包 四.升级内核 首次尝试编译Linux内核,记录过程,提供Linux Kernel(linux-4.19.178)下载 ...

  6. linux读取nand的文件,Linux Kernel 之AP读写Nand Flash上的Yaffs2文件的全过程浅析

    1.1 用top-down的方法分析AP读一个Nand Flash上的file的全过程 我先简单看一个例子,看User Application如何打开一个Yaffs2 file并读写之: int ma ...

  7. linux 内核 call,在Linux Kernel內新增一个System Call(转)

    在Linux Kernel內新增一个System Call(转)[@more@]本文作者: gpmoney 使用 system call 去呼叫系統的函式是非常好玩的,但是要如何寫出一個自己的syst ...

  8. g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统

    写在开头: 本来是想使用linux kernel +busybox 制作一个教程的,后来快要结束的时候,死活找不到硬盘,我了解很多文章都有类似的,但是没有谈到硬盘找不到问题,最后历经艰辛,终于把问题解 ...

  9. linux kernel内存映射实例分析

    作者:JHJ(jianghuijun211@gmail.com) 日期:2012/08/24 欢迎转载,请注明出处 引子 现在android智能手机市场异常火热,硬件升级非常迅猛,arm cortex ...

最新文章

  1. 机器学习入门(19)— 卷积网络 CNN 的简单实现
  2. OkHttp源码分析
  3. 这是我见过最蛋疼的注册中心与API网关实践!
  4. 【错误记录】Visual Studio 编译 C++ 代码报错 ( To disable deprecation, use _CRT_SECURE_NO_WARNINGS. )
  5. 哪一个不是html5新增的语义化标记元素,东师19春《HTML5开发基础与应用》作业考核【标准答案】...
  6. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 3 assignment3
  7. 提交本地项目到github
  8. 数据结构之--冒泡排序的三种实现
  9. 性价比不高却出到8?华为存在感最低的一个系列再发新机
  10. 4.7_singleton_创建型模式:单例模式
  11. php study 后门,phpStudy后门简要分析
  12. 一文看尽Facebook 3D视觉技术研究进展
  13. python返回值函数_Python函数的返回值(一)
  14. 手机app界面及易用性测试点分析(通用)
  15. deeping linux安装安卓,给Deeping Linux系统官方的一封信,希望官方看到
  16. 美洽客服JavaScript 网页插件
  17. OSN1800V OSN1800II OSN1800I 华为全新原包装分组增强型多业务光传送平台
  18. 抓取网易云音乐歌曲热门评论生成词云
  19. MySQL 误删数据恢复
  20. OSChina 周六乱弹 —— 泡面就要泡着吃……

热门文章

  1. 浅谈电量传感器在数据中心的UPS电源中的应用
  2. 2025年全球结构化布线市场预计将达到165亿美元
  3. 如何做好配电室、临时用电安全管理?
  4. 精密空调主要部件是干啥用的?
  5. 数据中心实现高效运维的秘诀
  6. linux替换每个英文字开头为大写,shell脚本,文件里面的英文大小写替换方法。...
  7. python通过ip获取mac地址_通过IP或socket获取对方的MAC地址
  8. 百度地图 key_Android百度地图导航的接入(包含驾车、公交、步行)
  9. android 图片缩放算法,Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析大图加载...
  10. Postman:Postman(HTTP的测试工具)使用方法详细攻略