zoukankan      html  css  js  c++  java
  • 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内核中的并发与竞态现象进行概述,并给出了与其相关的一些概念和竞态现象产生的原因和解决途径。

  • 相关阅读:
    HDOJ 1069_大二写
    HDOJ 2037:今年暑假不AC_大二写
    第二次HDOJ:1058
    HDOJ 1019
    第二次 HDOJ 1003
    第二次做HDOJ 1051
    memset()的用法
    数据结构中的频度含义
    程序框图的书写
    python课堂整理22----装饰器进阶
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/11900524.html
Copyright © 2011-2022 走看看