Linux内核分析与应用7-内核同步

本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看

留此记录,蜻蜓点水,可作抛砖引玉


alt

7.1 Linux同步概述


竞态条件,也称竞争条件,race condition

临界区

alt
alt

原子操作,Linux专门有一个atomic_t结构体

alt

问题:

在多核系统中遇到原子操作,在系统层面上原子操作还是原子的吗?在核级还是原子的吗?

alt

死锁:所有的任务都在相互等待,但他们永远不会释放已占有的资源,于是任何任务都无法继续执行

死锁的避免: 加锁的顺序是关键

alt

思考:

死锁是一种小概率事件还是大概率事件?如果内核出现死锁,该如何应对?



7.2 内核同步机制


alt

原子操作已经讲过.

中断屏蔽:

alt

自旋锁:(spin lock)

专为多处理器并发而引入的一种锁,在内核中大量应用于中断处理部分

在短期时间内,进行轻量级的锁定

同一时刻,只能为一个处理器所持有, 防止多处理器并发访问临界区,防止内核抢占造成的竞争


信号量:

alt
alt

P/V操作

alt
alt
alt

经典实例: 生产者-消费者并发实例


参考:

内核中的调度与同步[2]


参考资料

[1]

Linux 内核分析与应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

[2]

内核中的调度与同步: http://wwww.kerneltravel.net/journal/vi/syn.htm

本文由 mdnice 多平台发布

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

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

相关文章

嵌入式这个领域会变得过于内卷吗?

今日话题,嵌入式这个领域会变得过于内卷吗?嵌入式开发主要服务于第二产业,尤其是制造业,包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门,稳定性较强,不像互联网行业那样波动大。因此…

Linux CentOS7修改命令行提示符

在CentOS操作系统中,命令和文件是我们与计算机进行交互的重要方式之一。有时候我们可能需要对某些命令、变量或文件进行修改,以满足特定的需求或提高工作效率。 本人在文章《Linux CentOS7命令及命令行》中对命令行提示符的修改作了初步介绍&#xff0c…

无涯教程-JavaScript - XNPV函数

描述 XNPV函数返回的现金Stream量表的净现值不一定是周期性的。要计算一系列定期现金Stream量的净现值,请使用NPV函数。 语法 XNPV (rate, values, dates)争论 Argument描述Required/OptionalRateThe discount rate to apply to the cash flows.RequiredValues 与日期付款时…

spring boot-Resolved element must not contain multiple elements 警告

首先强调一下,此问题不影响程序运行。 报错信息: package org.springframework.util; ...public abstract class Assert ...public static void state(boolean expression, String message) {if (!expression) {throw new IllegalStateException(messa…

奇妙文: AI智能写作助手工具

【产品介绍】 奇妙文是一款由出门问问科技有限公司开发的AI智能写作助手,它可以帮助用户快速生成各种类型的文本内容,如文章、标题、摘要、广告语、口号等。 奇妙文利用人工智能技术,根据用户输入的关键词、主题、风格等要求,自动…

智能博弈技术军事应用展望

源自:指挥与控制学院 作者:马悦 吴琳 郭圣明 摘 要 为利用智能技术解决现代战争中的意图判断、威胁评估与指挥控制, 提高军事决策水平, 将军事问题转化为博弈问题, 综合利用博弈论和人工智能(artificial intelligence, AI&#xff…

React 全栈体系(五)

第三章:React 应用(基于 React 脚手架) 一、使用 create-react-app 创建 react 应用 1. react 脚手架 xxx 脚手架: 用来帮助程序员快速创建一个基于 xxx 库的模板项目 包含了所有需要的配置(语法检查、jsx 编译、devServer…)下载好了所有…

手机木马远程控制复现

目录 目录 前言 系列文章列表 渗透测试基础之永恒之蓝漏洞复现http://t.csdn.cn/EsMu2 思维导图 1,实验涉及复现环境 2,Android模拟器环境配置 2.1,首先从官网上下载雷电模拟器 2.2,安装雷电模拟器 2.3, 对模拟器网络进行配置 2.3.1,为什么要进行配置…

用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections

今天用Navicat进行数据备份的时候,发现由于数据库连接数目过多导致连接锁定,这种情况在多人协同开发的场景中很常见。当然我这里也因为多个应用使用了数据库连接,所以出现了Too Many Connections。 可能是超过最大连接数了。 1、进入Navicat…

亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章

8月18-19日,近万人齐聚上海国家会展中心,带着对数字化、数智化趋势和热点的关注,以满腹热情投身到以“数据驱动 智能运营”为主题的“2023全球商业创新大会”,共商新技术条件下企业信息化出现的新课题、新挑战,共享数智…

spice VDAgent简介

vdagent分为linux和windows,其中Linux分为vdagent守护进程和vdagent客户端进程,而windows主要为vdagent服务。 在windows中,通过服务方式自启动,并控制windows显示等。 在linux中, 守护进程通过 Sys-V initscript 或 s…

【配电变电站的最佳位置和容量】基于遗传算法的最优配电变电站放置(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

十二、集合(5)

本章概要 for-in 和迭代器 适配器方法惯用法 本章小结 简单集合分类 for-in和迭代器 到目前为止,for-in 语法主要用于数组,但它也适用于任何 Collection 对象。实际上在使用 ArrayList 时,已经看到了一些使用它的示例,下面是它…

【C++】泛型编程 | 函数模板 | 类模板

一、泛型编程 泛型编程是啥? 编写一种一般化的、可通用的算法出来,是代码复用的一种手段。 类似写一个模板出来,不同的情况,我们都可以往这个模板上去套。 举个例子: void Swap(int& a, int& b) {int tmp …

如何在Robosuite中导入自建的物体模型

Robosuite是基于mujoco封装的机器人操作库,而mujoco的碰撞检测是基于凸壳,也就是geom必须是凸的,如果是凹的话,凹的部分会有一个透明的屏障而无法与其他物体有碰撞。但是实际场景很多物体都不是凸的,比如杯子的口是凹进…

六招带你认识炫酷的新的室内工业艺术风格

就在设计师们以为他们已经见识过所有可能的风格和样式组合时,工业风出现了。这种原始与精致的开创性组合从大都市的仓库和工厂改建而来,对现代装饰产生了巨大的影响。 工业风格的起源 工业风格住宅和工业风格公寓的起源 由于大城市缺乏经济适用房&…

模拟实现字符串函数和内存函数

模拟实现字符串函数和内存函数 函数介绍部分模拟实现strlenstrcpy,strcat,strcmpstrncpy,strncat,strncmpstrstr,strtokstrerror 字符分类函数内存函数memcpy,memmove,memset,memcmp 求字符串长度(strlen)长度不受限制的字符串函数(strcpy,strcat,strcmp)长度受限制的字符串函数…

科学中的人工智能:量子、原子和连续体技术概述

人工智能(AI)的进步正在推动自然科学领域的一种新的发现范式。如今,AI已经开始通过改进、加速和促进我们对各种空间和时间尺度上自然现象的理解来推动自然科学的发展,催生了一个被称为AI for science(AI4Science&#…

Vue中的生命周期钩子

生命周期钩子 :::warning 注意 所有生命周期钩子的 this 上下文将自动绑定至实例中,因此你可以利用 this 访问 props、data、computed 和 methods 等选项内的数据/函数。这意味着你不应该使用箭头函数来定义一个生命周期方法,因为箭头函数中没有 this&a…

牛客:小美的01串翻转

小美的01串翻转 #include<iostream> #include<cstring> #include<string> #include<vector>using namespace std; typedef long long ll; const int N 1100; string s; ll res 0;int main() {cin>>s;int n s.size();vector<vector<in…