博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核同步机制的一些见解(未完成)
阅读量:4104 次
发布时间:2019-05-25

本文共 798 字,大约阅读时间需要 2 分钟。

本文主要回答三个问题:

1、为什么要内核同步
2、内核同步有哪些策略
3、Liunx内核同步的代码实现
先来说说内核抢占,这时一个很重要的概念。内核抢占通俗来讲,的那个一个内核进程在运行的时候,是否允许另外一个内核进程进行抢占。内核抢占减少了用户程序的分派延时,提供了更好地人机交互。但是有的进程要求在持续运行直到结束,所以系统也提供了这样的接口,代码如下:

#define preempt_disable()           barrier()#define preempt_enable()            barrier()

上边两个宏实现的功能分别是关闭和打开内核抢占。当current进程的thread_info结构体中的preempt_count(抢占计数器)的值是0时,允许内核抢占,非0表示不允许内核抢占。

第一个问题,为什么要内核同步
因为有很多临界资源,竞争临界资源必然需要同步。
第二个问题,内核同步有哪些机制
1、per-cpu(没遇到过不理解)
2、原子操作
对于那些读写类型的指令来说,只要实现了读写都是原子操作,这样就实现了同步,读写是原子操作的时候,必须等读写完了别的进程才可以访问这个存储单元。原子操作是在硬件级实现的同步,不是我们的重点。
3、优化和内存屏障(不理解为什么这个也算是内核同步)
先来看看优化屏障。现代的编译器对代码编译的时候会进行优化,执行的时候为了更好地满足cpu的并行性,程序的代码可能不会按照原来的顺序运行,这个特性对于一些代码来说是不可接受的(比如之前分析的schedule函数就要求代码一定要按顺序执行),这时候就需要优化屏障,代码如下:

asm volatile("" : : : "memory");

Linux系统用上面一行内联汇编代码实现优化屏障。意思就是不要对这个代码进行优化。

内存优化:还不是很理解
4、自旋锁

转载地址:http://opbsi.baihongyu.com/

你可能感兴趣的文章
有return的情况下try catch finally的执行顺序(最有说服力的总结)
查看>>
String s1 = new String("abc"); String s2 = ("abc");
查看>>
JAVA数据类型
查看>>
Xshell 4 入门
查看>>
SoapUI-入门
查看>>
Oracle -常用命令
查看>>
JAVA技术简称
查看>>
ORACLE模糊查询优化浅谈
查看>>
2016——个人年度总结
查看>>
2017——新的开始,加油!
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.1、类和实例
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.4、获取对象信息
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
Linux设备模型(总线、设备、驱动程序和类)之四:class_register
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>