《LKD3粗读笔记》(9)内核同步介绍

news2024/9/25 7:24:18

文章目录

    • 1、临界区和竞争条件
    • 2、 加锁
    • 3、死锁
    • 4、争用和扩展性

  • 实现内核同步的意义是什么?
    目前内核支持SMP,所以共享资源一定要防止并发访问,如果多个执行线程同时访问和操作数据,就可能发生各线程之间相互覆盖共享数据情况,造成被访问数据处于不一致状态,因此我们要了解Linux内核如何解决同步问题防止产生竞争条件

1、临界区和竞争条件

  • 什么是临界区?
    访问和操作共享数据的代码段。
  • 什么是竞争条件?
    多个执行线程处于同一个临界区。
  • 什么是执行线程
    指任何正在执行的代码实例。比如,一个在内核执行的进程、一个中断处理程序或一个内核线程等…
  • 什么是同步?
    安排进程/线程执行的先后顺序
  • 同步的目的是什么?
    避免并发和防止竞争条件

2、 加锁

  • 关于锁的基本认识?
    • 为了防止竞争条件,我们需要能确保一次有且仅有一个线程对数据结构进行操作,或者当另一个线程在对临界区标记时,就禁止(锁定)其他的访问
    • 我们可以利用锁机制(在其他很多地方都用到这种机制,比如数据库,只要是访问数据都可能用到)。
    • 锁的使用是非强制的,程序员自愿的,但是最好在对共享数据访问时使用锁。
    • 锁采用原子操作实现,即不会被打断
  • 内核中造成并发执行的原因是什么?
    • 中断:几乎在任何时刻异步发生,打断当前代码
    • 软中断和tasklet:内核能在任何时刻唤醒和调度软中断和tasklet
    • 内核抢占:内核具有抢占性,内核中的任务可能会被另一个任务抢占
    • 睡眠及与用户空间同步:内核执行的进程可能休眠,这会唤醒调度程序,导致调度一个新的用户进程执行
    • SMP:多处理器同时执行代码
  • 有哪些安全代码?
    • 中断安全代码(interrupt-safe):在中断处理程序中能避免并发访问的代码。
    • SMP安全代码(SMP-safe):在对称多处理器中能避免并发访问的代码。
    • 抢占安全代码(preempt-safe):在内核抢占时能避免并发访问的代码。
  • 在编写内核代码时,如何辨别需要被保护的数据?
    • 此数据是不是全局,其他线程能不能访问?
    • 此数据会在进程上下文中、中断上下文中共享吗?会在两个不同的中断处理程序中共享?
    • 进程在访问时此数据时可不可能被抢占,被调度的新进程会不会访问此数据?
    • 当前进程会不会阻塞在此数据上,会让此数据处于何种状态?
    • 怎样防止数据失控?
    • 此函数在另一个处理器上被调度会发生什么?
  • 处理并发的配置选项
    • Linux内核可在编译时配置,所以可以针对指定机器进行裁剪
    • CONFIG_SMP选项控制内核是否支持SMP, 很多加锁问题在单处理器上不存在,可以避免自旋锁的开销。
    • CONFIG_PREEMPT运行内核抢占的配置选项。

3、死锁

  • 产生死锁的原因是什么?
    有一个或多个执行线程和一个或多个资源,每个线程都在等待其中的一个资源,但所有资源都已经被占用了。所有线程都在相互等待,但它们永远不释放资源
  • 举个简单的例子?
    • 自死锁:一个执行线程试图去获取自己已持有的,最终的结果就是死锁。
    • ABBA死锁
  • 避免死锁的方法是什么?
    • 按顺序加锁——使用嵌套锁时保证以相同顺序获取锁。(当然,释放的时候最好以相反的顺序操作)
    • 防止饥饿发生——假设本代码不会结束,加跳出的代码。
    • 不重复请求同一锁
    • 设计越简单越好——加锁越复杂,死锁越容易出现

4、争用和扩展性

  • 锁的争用
    当锁被占用时,有其他线程试图获得该锁。
  • 加锁粒度
    用来描述加锁保护的数据规模(小到数据元素,大到内核所有的数据结构)
  • 扩展性
    对系统可扩展程度的一个量度。理想情况下,处理器的数量加倍应该会使系统处理性能翻倍。而实际上,这是不可能达到的。
  • 三者直接的联系?
    • 当锁争用严重时,加锁太粗会降低可扩展性;
    • 当锁争用不明显时,加锁过细会加大系统无谓的开销。

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

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

相关文章

ABeam News | 松下家电(中国)生产销售一体化SAP S/4HANA项目正式启动

近日,由德硕管理咨询(上海)有限公司参与实施的松下家电(中国)生产销售一体化SAP S/4HANA项目正式上线,松下集团代表董事全球副总裁本间哲朗先生及ABeam大中华区董事长兼总经理中野洋辅先生出席了项目启动会…

【实验报告】实验二 图像空间域频率域滤波

一.实验目的: 1. 模板运算是空间域图象增强的方法,也叫模板卷积。 (1)平滑:平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成,在空域中全是正值。 (2)锐化&…

【超全总结】集成环信消息推送注意事项(华为、oppo、vivo等)

环信即时通讯 IM 支持集成第三方厂商的消息推送服务,为 Android 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。 当客户端应用进程被关闭等原因导致用户离线,环信即时通讯 IM 服务会通过第三方厂商的消息推送服务向该离线用…

鸿蒙Service Ability的前世今生--进阶篇

二、SA的配置 ​ SA的运行需要配合多个配置项,此节专门对此进行说明。 ​ OpenHarmony中SA一般由两个配置文件和一个so组成。上一章节已介绍了生成so中代码。此节描述下另外两个配置文件(.cfg或.rc、xml)。 ​ SA的启动一般采用.cfg或.rc .xml libxxx.z.so方式…

Python 编程必不可少的unittest测试框架

一段表面看起来平平无常的代码,很可能暗藏很多bug无法一眼看透,没有经过测试的代码是不可靠的代码。上一篇讲过pytest测试框架这次我们换个框架。 unittest 是一个单元测试框架,单元测试完成对一个模块、一个类或一个函数的运行结果进行检验…

SpringSecurity之注销与自动登录

前言 前面我们讲解了用户的登录以及用户授权的过程。今天我们看一下,系统中常用的注销与自动登录各功能! 注销操作 注销操作,首先需要在我们的配置类中添加上我们的注销路径。主要配置详见下方标红处代码,标记了退出的路径以及…

java轻量级框架MiniDao的详解

MiniDao是一款基于Java语言开发的轻量级持久层框架,它的目标是简化数据库操作流程,提高开发效率,减少代码量。MiniDao采用简单的注解配置方式,可以很容易地与Spring等常用框架集成使用。 MiniDao的主要特点包括: 简单…

浙大数据结构网课第一周入门

题目详情 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For …

RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)RBF神经网络训练部分

1.清空变量 close all clear,clc 2.导入数据用以RBF神经网络训练,一共14组,训练数据P(第一列为电压值,第二列为SOC值,第三列为电流值。),并将所有数据存储在变量PP中,所有电压数据…

蓝桥杯:优秀的拆分

蓝桥杯:优秀的拆分https://www.lanqiao.cn/problems/801/learning/ 目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 输入 输出 题目分析(位运算) AC代码(Java) 题目描述 一般来说,一个正整数可以拆…

【】:addService 和 getService

一次完整的 Binder IPC 通信过程通常是这样: 首先 Binder 驱动在内核空间创建一个数据接收缓存区; 接着在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用…

无线传感器网络硬件设计简介

无线传感器网络硬件设计简介 无线传感器网络因其巨大的应用前景越来越受到学术界和工业界的广泛关注。本文介绍了无线传感器网络节点的体系结构,分析比较了国内外当前典型的硬件平台,重点讨论了目前无线传感器网络节点常用的处理器、射频芯片、电源和传…

孩子为什么不能玩抖音精彩回答,共勉

2 可是,为什么我的同学、哥哥姐姐…… 反正身边好多人都在玩? 我不知道你父母有没有告诉你这个道理: 你把时间花在哪儿, 你就会成为什么样的人。 他们爱玩,是因为两个字: 空虚。 想象一下&#xff…

02、Cadence使用记录之创建元器件---原理图和封装(OrCAD Capture CIS)

02、Cadence使用记录之创建元器件—器件原理图符号和封装(OrCAD Capture CIS) 参考的教程是B站的视频:allegro软件入门视频教程全集100讲 前置教程: ## 01、Cadence使用记录之新建工程与基础操作(原理图绘制&#xf…

新闻文本分类任务:使用Transformer实现

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

13.网络爬虫—多进程详讲(实战演示)

网络爬虫—多进程详讲 一进程的概念二创建多进程三进程池四线程池五多进程和多线程的区别六实战演示北京新发地线程池实战 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者&#xff0c…

Spark SQL实战(07)-Data Sources

1 概述 Spark SQL通过DataFrame接口支持对多种数据源进行操作。 DataFrame可使用关系型变换进行操作,也可用于创建临时视图。将DataFrame注册为临时视图可以让你对其数据运行SQL查询。 本节介绍使用Spark数据源加载和保存数据的一般方法,并进一步介绍…

node安装

一、下载nodejs的安装包: 下载地址:https://nodejs.org/zh-cn/download 根据自己电脑系统及位数选择,一般都选择windows64位.msi格式安装包 二、改变nodejs的下载依赖包路径 安装完nodejs后,也同时安装了npm, npm是…

半监督语义分割_paper reading part1

Assignment 要解决的问题思路方法结果自己的想法 01 A Survey on Semi-Supervised Semantic Segmentation University of Granada, 18071, Granada, Spain 2023.02出版 problem to solve ss先前的(19年)不适用先前的调研包含弱监督,ss不…

Docker Desktop使用PostgreSql配合PGAdmin的使用

在看此教程之前,请先下载安装Docker Desktop 安装成功可以查看版本 然后拉取postgresql的镜像:docker pull postgres:14.2 版本可以网上找一个版本,我的不是最新的 发现会报一个问题 no matching manifest for windows/amd64 10.0.19045 i…