• Linux内核中的并发与竞态概述


    1、前言

     众所周知,Linux系统是一个多任务的操作系统,当多个任务同时访问同一片内存区域的时候,这些任务可能会相互覆盖内存中数据,从而造成内存中的数据混乱,问题严重的话,还可能会导致系统崩溃。

    2、相关概念

     了解一下Linux内核中并发与竞态的相关概念,如下:

    并发与竞争:并发指的是多个执行单元同时、并行地执行,当并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态现象。

    临界区:访问共享资源的代码区叫做临界区。

    SMP:对称多处理器。

    3、竞态产生原因及处理

     在Linux系统中,并发与竞态产生的原因非常复杂,主要有下面几个原因:

    (1)对称多处理器(SMP)的多个CPU

    SMP是一种紧耦合、共享存储的系统模型,特点是多个CPU使用共同的系统总线,结构如下:

    在SMP的情况下,两个核(CPU0和CPU1)可能会发生如下的并发竞态现象:

    (2)单CPU内进程与抢占它的进程

    在2.6版本以后的Linux内核开始支持内核抢占调度,当一个进程在内核执行的时候可能耗完了时间片,也可能被另外一个更高优先级的进程打断,进程与抢占它的进程访问共享资源也可能引发竞态现象。

    (3)中断(硬中断、软中断、Tasklet、底半部)与进程之间

    中断可以打断正在执行的进程,当中断服务程序访问进程正在访问的资源,则竞态现象也有可能会发生,另外,中断也有可能会被更高的优先级中断打断,多个中之间并发访问共享资源也可能引起竞态现象。 

     SMP中核内与核间产生竞态现象:

    在Linux内核中,解决竞态问题的途径是保证对共享资源的互斥访问,当一个执行单元在访问共享资源的时候,其它的执行单元被禁止访问,临界区需要被以某种互斥机制加以保护,在Linux设备驱动中可以采用的互斥途径有中断屏蔽、原子操作、自旋锁、信号量和互斥锁等。

    4、小结

     本文主要对Linux内核中的并发与竞态现象进行概述,并给出了与其相关的一些概念和竞态现象产生的原因和解决途径。

  • 相关阅读:
    「Java分享客栈」Nacos配置中心称王称霸,我Apollo一生也不弱于人!
    超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群
    中科大下载android源码
    binder框架核心类关系图
    BinderService模板类
    SpringBoot启动命令行参数【D】和【】的区别
    MySQL快速生成大量数据的SQL存储过程
    【已解决】'sql_server.pyodbc' isn't an available database backend.
    python 常用模块
    hive正则
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/11900524.html
Copyright © 2020-2023  润新知