Linux内核同步与互斥机制介绍

在内核中,可能出现多个进程(通过系统调用进入内核模式)访问同一个对象、进程和硬中断访问同一个对象、进程和软中断访问同一个对象、多个处理器访问同一个对象等现象,我们需要使用互斥技术,确保在给定的时刻只有一个主体可以进入临界区访问对象。如果临界区的执行时间比较长或者可能睡眠,可以使用下面这些互斥技术。

(1)信号量,大多数情况下我们使用互斥信号量。

(2)读写信号量。

(3)互斥锁。

(4)实时互斥锁。

申请这些锁的时候,如果锁被其他进程占有,进程将会睡眠等待,代价很高。

如果临界区的执行时间很短,并且不会睡眠,那么使用上面的锁不太合适,因为进程切换的代价很高,可以使用下面这些互斥技术。

(1)原子变量。

(2)自旋锁。

(3)读写自旋锁,它是对自旋锁的改进,允许多个读者同时进入临界区。

(4)顺序锁,它是对读写自旋锁的改进,读者不会阻塞写者。

申请这些锁的时候,如果锁被其他进程占有,进程自旋等待(也称为忙等待)。

进程还可以使用下面的互斥技术。

(1)禁止内核抢占,防止被当前处理器上的其他进程抢占,实现和当前处理器上的其他进程互斥。

(2)禁止软中断,防止被当前处理器上的软中断抢占,实现和当前处理器上的软中断互斥。

(3)禁止硬中断,防止被当前处理器上的硬中断抢占,实现和当前处理器上的硬中断互斥。

在多处理器系统中,为了提高程序的性能,需要尽量减少处理器之间的互斥,使处理器可以最大限度地并行执行。从互斥信号量到读写信号量的改进,从自旋锁到读写自旋锁的改进,允许读者并行访问临界区,提高了并行性能,但是我们还可以进一步提高并行性能,使用下面这些避免使用锁的互斥技术。

(1)每处理器变量。

(2)每处理器计数器。

(3)内存屏障。

(4)读-复制更新( Read-Copy Update, RCU)。

(5)可睡眠 RCU。

使用锁保护临界区,如果使用不当,可能出现死锁问题。内核里面的锁非常多,定位很难,为了方便定位死锁问题,内核提供了死锁检测工具 lockdep。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内衣迷你洗衣机什么牌子好?好用不贵的内衣洗衣机推荐

由于内衣洗衣机在目前的市场上越来越受欢迎,使得不少的小伙伴都在犹豫要不要为自己入手一台专用的内衣洗衣机,专门来清洗一些内衣裤等等贴身衣物,这个问题的答案是很有必要的,因为目前市场上的家用大型洗衣机对衣物只能够起到清洁…

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件: application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件,优先级最高的是properties 配置文件优先级…

前端又出新轮子Nue.js,但还是低代码更香!

前言 别TM卷了!!! 自从前后端分离以来,前端前端的车轮滚滚向前,轮子造的越来越圆。每个人都在适应这个轮子的节奏,稍微不注意就会被甩出车轮之外。 调侃归调侃,既然口子已经开了,…

一键抠图2:C/C++实现人像抠图 (Portrait Matting)

一键抠图2:C/C实现人像抠图 (Portrait Matting) 目录 一键抠图2:C/C实现人像抠图 (Portrait Matting) 1. 前言 2. 抠图算法 3. 人像抠图算法MODNet (1)模型训练 (2)将Pytorch模型转换ONNX模型 &…

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …

LightDB to_char 三入参函数支持

文章目录 背景函数示例 背景 在信创适配中&#xff0c;从Oracle迁移过来的程序使用了TO_CHAR函数。 LightDB-X 23.3版本已经支持了两个入参的TO_CHAR函数&#xff0c;并不支持三个入参的TO_CHAR函数。LightDB-X 23.4版本对三个入参的TO_CHAR函数进行了支持。 函数示例 准备…

全网最新最牛的Appium自动化:Appium常用操作之TouchAction操作

TouchAction操作 Appium的辅助类&#xff0c;主要针对手势操作&#xff0c;比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中&#xff0c;然后将该链条传递给服务器。服务器接受到该链条后&#xff0c;解析各个动作&#xff0c;逐个执行。 TouchAction类支持的动…

laravel 自定义密码验证方式

继承 EloquentUserProvider <?phpnamespace App\Providers;use Illuminate\Auth\EloquentUserProvider; use Illuminate\Contracts\Auth\ Authenticatable as UserContract;class ApiEloquentUserProvider extends EloquentUserProvider {public function validateCredent…

如何销售汽车之 汽车销售技巧和话术

如何销售汽车之 汽车销售技巧和话术 当前&#xff0c;汽车销售市场的竞争日益激烈&#xff0c;消费者对汽车的需求和要求也越来越高。但是市场竞争车型也非常多&#xff0c;如何更好的做好销售业绩突破&#xff0c;提高汽车销量&#xff0c;创造汽车销售佳绩&#xff0c;就需要…

什么是网络爬虫?有什么用?怎么爬?

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 【导读】 网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。 在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低…

线程池,及7大参数,4大拒绝策略

1. 线程池的基本概念 线程池由以下几个主要组件构成&#xff1a; 任务队列&#xff08;Task Queue&#xff09;&#xff1a; 用于存储等待执行的任务。工作线程池&#xff1a; 用于执行任务的线程集合。线程工厂&#xff08;Thread Factory&#xff09;&#xff1a; 用于创建…

k8s 安装部署

一&#xff0c;准备3台机器&#xff0c;安装docker&#xff0c;kubelet、kubeadm、kubectl firewall-cmd --state 使用下面命令改hostname的值&#xff1a;(改为k8s-master01)另外两台改为相应的名字。 172.188.32.43 hostnamectl set-hostname k8s-master01 172.188.32.4…

Matlab 生成license

参考下面两个帖子 https://ww2.mathworks.cn/matlabcentral/answers/389888-matlab https://www.mathworks.com/matlabcentral/answers/131749-id-id-id-id 登陆 https://ww2.mathworks.cn/licensecenter 针对R2020b版本,点击下面红框生成 ip addr | grep ether看第一行 根据…

Geodesic in Heat: 一种测地线计算方法

在之前的博客中&#xff0c;我已经介绍过了使用Fast Marching算法计算测地线。Fast Marching的好处是实现简单&#xff0c;方便扩展在点云上。但是缺点是精度不够&#xff0c;求解不平滑。早在2013年&#xff0c;Crane et al. [1]就已经提出利用热流来估算测地距离。我很早就知…

Hadoop学习笔记(HDP)-Part.14 安装YARN+MR

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

一文7个步骤教你搭建测试web测试项目实战环境,

​今天小编&#xff0c;给大家总结下web 测试实战的相关内容&#xff0c;一起来学习下吧&#xff01; web项目实战可按顺序依次为&#xff1a;【搭建测试环境】、【需求评审】、【编写测试计划】、【分析测试点.编写测试用例】、【用例评审】、【执行用例提bug】、【测试报告】…

编写并调试运行一个简单的 Java 应用程序,显示自己的学号、姓名、兴趣爱好等。

源代码&#xff1a; public class Main { public static void main(String[] args) { System.out.println("学号是:""0233217821"); System.out.println("姓名是:""赵港"); System.out.println("兴趣爱好是:""运动&qu…

想要精确搜索商品详情?闲鱼电商API接口帮你实现!

闲鱼电商API接口是一种为开发者提供的强大工具&#xff0c;它能够帮助开发者轻松获取闲鱼平台上的商品信息&#xff0c;实现精确搜索商品详情功能。无论你是想要开发一个自有电商平台&#xff0c;还是需要定制商品搜索功能&#xff0c;闲鱼电商API接口都能够满足你的需求。 API…

C++检测字符串中有效的括号个数

匹配一个字符串buf中&#xff0c;连续包换运算符reg的次数&#xff1a; #include <iostream>//return 返回匹配的字符个数 //buf, 要检测的字符串 //reg, 包含的连续运算符 int GetMatchCount(std::string& buf, std::string& reg) {int nMatchCount 0;if (reg.…

提高Idea编码速度和插件自用推荐

非常推荐 Easy Javadoc 一款注释生成器&#xff0c;很好使~免费&#xff0c;配合使用腾讯、百度之类的翻译免费额度完全够用了&#xff0c;印象中是50万字符每月。下图是使用快捷键生成的注释&#xff08;我采用鼠标侧面按键&#xff0c;随手一按很方便&#xff09; Chinese …