首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
5,内核同步
时间:
2014-05-15 12:00:23
阅读:
209
评论:
0
收藏:
0
[点我收藏+]
标签:
c
a
数据
使用
代码
类
内核抢占
无论在抢占还是非抢占内核中,运行在内核态的进程都可以自动放弃CPU.称为计划性进程切换.但是,抢占式内核在相应引起进程切换的异步事件的方式上有差异,称为强制性进程切换.
抢占式内核的特点: 一个在内核态运行的进程,可能在执行内核函数期间被另一个进程取代.可抢占式的目的是减少用户态进程的分派延迟(即从进程变为可执行状态到它实际开始运行之间的间隔).但是它会引起不容忽视的开销.
只有当内核正在执行异常处理程序,且内核抢占没有被显示禁止时,才可能抢占内核.同时本地CPU必须打开本地中断.
需要同步的情况: 当计算的结果依赖于两个或以上的交叉内核控制路径的嵌套方式时,可能出现竞争条件.临界区是一段代码,在其他的内核控制路径能够进入临界区前,进入临界区的内核控制路径必须全部执行完这段代码. 必须确保在任意时刻只有一个内核控制路径处于临界区.
不需要同步的:1)中断处理程序和tasklet不必编写成可重入函数; 2)仅被软中断和tasklet访问的每CPU变量不需要同步; 3)仅被一种tasklet访问的数据结构不需要同步.
每CPU变量:最好的同步技术是吧设计不需要同步的内核放在首位.因为显式的同步原语都有性能开销. 吧内核变量声明为每CPU 变量.
仅当确定在系统的CPU上的数据在逻辑上是独立的时候才使用.
主要是数据结构的数组,每个CPU对应数组的一个元素.在主存中被排列以使每个数据结构存放在Cache的不同行.所以,并发访问不会引起Cache行的切用和失效
对来自不同CPU的并发访问提供保护,但是对来自异步函数的访问不提供保护.
原则:内核控制路径应该在禁用抢占的情况下访问每CPU变量.
原子操作:
若干汇编指令具有"读-修改-写"类型.即访问存储器单元两次,一次读,一次写.
确保这样的操作在芯片级是原子的.任何这样的操作都必须以单个指令执行.
优化和内存屏障
使用优化的编译器时,指令不会严格按照他们在源代码中出现的顺序执行.此外,CPU通常并行地执行若干条指令,且可能重新安排内存访问.
但是在处理同步时,必须避免指令重新排序.所以,所有的同步原语起优化和内存屏障的作用.
优化屏障:保证编译程序不会混淆放在原语操作之前和之后的汇编指令.但并不保证不使当前CPU把汇编指令混在一起执行.
内存屏障:在原语执行之前,原语之前的操作已经完成,类似于防火墙.
自旋锁
加锁技术:当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把"锁".
自旋锁用在多CPU下.如果锁开着,就获取锁并继续自己的执行.相反,当锁由运行在另一CPU上的内核控制"锁着"时,就在周围"旋转"反复执行一条紧凑的循环指令(忙等).直到锁被释放.
在自旋锁忙等时,内核抢占还是有效的.等待自旋锁释放的进程有可能被更高优先级的进程替代.
读写自旋锁
为了增加内核的并发能力.在没有写的情况下,允许并发的读操作.
5,内核同步,布布扣,bubuko.com
5,内核同步
标签:
c
a
数据
使用
代码
类
原文地址:http://www.cnblogs.com/robyn/p/3729343.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!