Aprendizaje basado en LINUX integrado 8 condiciones de carrera y problemas relacionados con la concurrencia (cero) teoría básica

1. ¿Qué es concurrencia y competencia?

Simultaneidad: ocurren múltiples unidades de ejecución al mismo tiempo; las
unidades de ejecución se refieren a procesos e interrupciones;
condiciones de carrera: múltiples unidades de ejecución acceden a recursos compartidos al mismo tiempo para formar un estado de competencia.
Por lo tanto, para formar un estado de carrera, debe tener:
1. Debe haber múltiples Unidad de ejecución
2. Debe haber recursos compartidos (variables globales en el programa, varios registros de operación)
3. Los accesos deben ocurrir al mismo tiempo.
Resumen: La forma de evitar condiciones de carrera es permitir que la CPU no interrumpa cuando una unidad de ejecución está accediendo a recursos compartidos el acceso a recursos compartidos,
durante el acceso a recursos compartidos, el cambio de recursos de CPU no ocurre. A esta operación de acceder a recursos compartidos la llamamos atómica, es decir,
la operación de acceder a recursos compartidos es un todo y no se puede dividir.

Dos, ¿qué es el acceso mutuamente exclusivo?

 当一个执行单元在访问共享资源时,其它执行单元禁止访问这个临界区域。

Tres métodos de acceso mutuamente excluyentes:

             1、中断屏蔽
              2、自旋锁系列   
              3、 信号量
              4、原子操作              

3.1 Máscara de interrupción

3.1.1 Características del blindaje de interrupciones:

     1、单CPU的进程与进程的抢占本身是基于软中断实现
      2、中断屏蔽能够解决以下竞态问题:
             1)中断和中断:
                                   硬件中断和软件中断,
                                   软件中断和软件中断(软件中断分为高优先级和低优先级两种)
              2)中断和进程:
                                    硬件中断和进程
                                    软件中断和进程
               3)进程之间的抢占
        3、中断屏蔽不能解决多核引起的竞态异常

3.1.2 Proceso de acceso exclusivo de la máscara de interrupción:

      当一个执行单元在访问共享资源前,先开启中断屏蔽,一旦屏蔽的中断信号,任务将接收不到中断信号,
      此时也就没有了高低优先级的进程抢占资源,也不会有其它硬件中断或软件中断打断任务的执行,此执行
      单元也就可以踏踏实实对共享资源进行操作,当操作完成后,应当立即恢复中断。
      注:多核时可能会引起异常

3.1.3 Posibles problemas y cuestiones que requieren atención al utilizar la máscara de interrupción

      由于中断屏蔽实现的方式是将中断功能禁止,而linux操作系统很多机制(tasklet、 软件定时器、硬件定时器、按键等等)
      都和中断密切相关,长时间使用中断屏蔽,会给系统带来影响,所有使用中断屏蔽操作的共享资源代码执行速度要快,
      因休眠类操作会释放资源,故不能使用中断屏蔽,多核下也可能会导致中断屏蔽功能失效,也不推荐使用。

3.2 Bloqueo de giro

3.2.1 Características del bloqueo de giro:

         1、自旋锁必须要附加在某个共享资源上(访问共享资源前加锁,操作完成后解锁);
          2、要访问共享资源之前,要先获取自旋锁,如果获取自旋锁失败,此任务会原地空转(处于忙等待),直到获取到自旋锁
          3、如果获取自旋锁成功,可以访问共享资源 ,但访问共享资源 的代码执行速度要快,且不能有休眠操作;
          4、操作完共享资源,一定要记得释放自旋锁
          注:1、可以解决多核、单CPU进程与进程的抢占问题,但无法解决中断引起的异常。
                   2、在中断和休眠的引起的异常场景中,自旋锁不适用。

3.2.1 Las características de los candados de giro derivados

        1、衍生自旋锁必须要附加在某个共享资源上(访问共享资源前加锁,操作共享资源完毕释放衍生自旋锁),
        2、在访问共享资源前要先获取 衍生自旋锁,如果获取衍生自旋锁失败(处于忙等待),直到获取到衍生自旋锁,
        3、获取衍生自旋锁成功后,就可以访问共享资源了,但操作共享资源的代码执行速度一定要性,更不能有休眠操作,
        4、操作完共享资源后,一定要记得释放衍生自旋锁,
        注:衍生自旋锁可以解决所有的竞态引用的异常(相当于自旋锁 + 中断屏蔽);

3.3 Semáforo

3.3.1 Características del semáforo:

        1、内核中的信号量和应用程序中的信号量一模一样,
         2、信号量又称睡眠锁,本质上基于自旋锁,只是多加了一个休眠功能,
         3、想获取信号量访问共享资源的进程,在没有获取信号量时,此进程将进行休眠操作(此进程会释放占用的CPU资源)
         4、一旦获取信号量进程,可以访问共享资源,对共享资源进行操作,操作完毕释放信号量,并且唤醒之前休眠的等待进程;
         注:信号量用于进程中;

3.4 Manipulación atómica

3.4.1 Características del funcionamiento atómico:

        1、原子操作能够解决所有的竞态引起的异常,
         2、原子操作可以分为:
                                              位原子操作
                                               整形原子操作
          3、位原子操作:位操作具有原子性,也就是在位操作时,不允许发生CPU资源切换,如果驱动要对共享资源进行位操作,
                                     可以考虑位原子操作相关的函数实现互斥访问,
           4、整形原子操作:整形数的操作具有原子性,如果驱动 中对共享资源进行整形操作(++    --等),此时可以考虑使用内核
                                         提供的整形原子操作函数来实现互斥访问,
                                          linux内核对于整形原子操作提供了专有的数据类型:atomic , 又称整形原子变量拘束类型,
                                          并且对整形原子变量进行的访问操作时,一事实上要利用内核提供的整形原子操作函数,才能达到互斥访问的效果。

Supongo que te gusta

Origin blog.csdn.net/weixin_47273317/article/details/107985909
Recomendado
Clasificación