PDF de programación - Guía Informal al Bloqueo

Imágen de pdf Guía Informal al Bloqueo

Guía Informal al Bloqueográfica de visualizaciones

Actualizado el 28 de Julio del 2017 (Publicado el 14 de Enero del 2017)
754 visualizaciones desde el 14 de Enero del 2017
89,3 KB
24 paginas
Creado hace 24a (01/01/2000)
Guía Informal al Bloqueo

Paul Rusty Russell
[email protected]

Guía Informal al Bloqueo
por Paul Rusty Russell

Copyright © 2000 por Paul Russell

Esta documentación es software libre; puedes redistrubuirla y/o modificarla bajo los términos de la GNU General Public License tal como ha sido
publicada por la Free Software Foundation; por la versión 2 de la licencia, o (a tu elección) por cualquier versión posterior.
Este programa es distribuido con la esperanza de que sea útil, pero SIN NINGUNA GARANTIA; sin incluso la garantía implicada de
COMERCIABILIDAD o ADECUACCION PARA UN PROPOSITO PARTICULAR. Para más detalles refiérase a la GNU General Public
License.
Debería de haber recibido una copia de la GNU General Public License con este programa; si no es así, escriba a la Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Para más detalles véase el archivo COPYING en la distribución fuente de Linux.

Tabla de contenidos

1. Introducción ...........................................................................................................................................1
1.1. El Problema con la Concurrencia................................................................................................1
2. Dos Tipos Principales de Bloqueos del Núcleo: Spinlocks y Semáforos ...........................................3
2.1. Bloqueos y Núcleos Monoprocesador ........................................................................................3
2.2. Variantes de Bloqueo Lectura/Escritura......................................................................................3
2.3. Bloqueando Sólo en el Contexto de Usuario ..............................................................................3
2.4. Bloqueando entre Contexto de Usuario y BHs (Bottom Halves) ...............................................4
2.5. Bloqueando Entre Contexto de Usuario y Tasklets/Soft IRQs ...................................................4
2.6. Bloqueando Entre Bottom Halves...............................................................................................4
2.6.1. El Mismo BH..................................................................................................................4
2.6.2. Diferentes BHs ...............................................................................................................5
2.7. Bloqueando Entre Tasklets..........................................................................................................5
2.7.1. La Misma Tasklet ...........................................................................................................5
2.7.2. Diferentes Tasklets .........................................................................................................5
2.8. Bloqueando entre Softirqs...........................................................................................................5
2.8.1. La Misma Softirq............................................................................................................5
2.8.2. Diferentes Softirqs..........................................................................................................6
3. Contexto de IRQ de Hardware.............................................................................................................7
3.1. Bloqueando entre IRQs Hardware y Softirqs/Tasklets/BHs .......................................................7
4. Técnicas Comunes .................................................................................................................................8
4.1. En un Contexto de Interrupciones No Escritores........................................................................8
4.2. Deadlock: Simple y Avanzado ....................................................................................................8
4.2.1. Preveniendo los Deadlocks.............................................................................................9
4.2.2. Sobreentusiasmo en la Prevención de Deadlocks...........................................................9
4.3. Datos por cada CPU..................................................................................................................10
4.4. Bloqueos Gran Lector ...............................................................................................................10
4.5. Eliminando los bloqueos: Ordenamiento de Lecturas y Escrituras ..........................................10
4.6. Eliminando los Bloqueos: Operaciones Atómicas....................................................................11
4.7. Protegiendo Una Colección de Objetos: Cuentas de Referencia ..............................................11
4.7.1. Macros Para Ayudarte...................................................................................................13
4.8. Cosas Que Duermen..................................................................................................................13
4.9. La Follonera Sparc ....................................................................................................................14
4.10. Cronómetros de Carreras: Un Pasatiempo del Núcleo............................................................14
5. Lecturas Adicionales ...........................................................................................................................16
6. Gracias ..................................................................................................................................................17
7. Sobre la Traducción.............................................................................................................................18
Glosario.....................................................................................................................................................19

iii

Lista de tablas

1-1. Resultados Esperados ...........................................................................................................................1
1-2. Resultados Posibles ..............................................................................................................................1
4-1. Consecuencias ......................................................................................................................................9

iv

Capítulo 1. Introducción

Bienvenido, a la Guía Informal de Bloqueo de Núcleo de Rusty. Este documento describe los sistemas de
bloqueo en el núcleo Linux como aproximación al 2.4.

Parece que es aquí donde tiene que estar SMP ; por lo tanto todo el mundo que esté en estos días
hackeando el núcleo necesita conocer los fundamentos de la concurrencia y el bloqueos para SMP.

1.1. El Problema con la Concurrencia

(Sáltate esto si sabes lo que es una Condición de Carrera (Race Condition).

En un programa normal, puedes incrementar un contador de la forma:

contador_muy_importante++;

Esto es lo que esperarías que pasase:

Tabla 1-1. Resultados Esperados

Instancia 1
lee contador_muy_importante (5)
añade 1 (6)
escribe contador_muy_importante (6)

Esto es lo que quizás pase:

Tabla 1-2. Resultados Posibles

Instancia 1
lee contador_muy_importante (5)

añade 1 (6)

escribe contador_muy_importante (6)

Instancia 2

lee contador_muy_importante (6)
añade 1 (7)
escribe contador_muy_importante (7)

Instancia 2

lee contador_muy_importante (5)

añade 1 (6)

escribe contador_muy_importante (6)

1

Este solapamiento, donde lo que sucede depende del tiempo relativo de múltiples tareas, es llamado
condición de carrera. La parte de código que contenie al punto de concurrencia se llamado región crítica.
Y especialmente desde que Linux se empezó a ejecutar en máquinas SMP, se ha convertido en uno de los
puntos más grandes del diseño e implementación del núcleo.

Capítulo 1. Introducción

La solución es reconocer cuando ocurren estos accesos simultáneos, y usar bloqueos para asegurar que
sólo una instancia puede entrar en la región crítica en cada instante. Hay muchas primitivas amigables en
el núcleo Linux que te ayudan a hacer esto. Y entonces hay primitivas no amigables, pero yo intento que
no existan.

2

Capítulo 2. Dos Tipos Principales de Bloqueos
del Núcleo: Spinlocks y Semáforos

Hay dos tipos principales de bloqueos del núcleo. El tipo fundamental es el spinlock
(include/asm/spinlock.h), que es un bloqueo muy simple receptáculo-simple; si no puedes coger el
spinlock, entonces te mantienes intentándolo (spinning) hasta que puedas. Los spinlocks son muy
pequeños y rápidos, y pueden ser usados en cualquier sitio.

El segundo tipo es el semáforo (include/asm/semaphore.h): puede tener más de un receptáculo en
algún momento (el número se decide en tiempo de inicialización), aunque es usado más comúnmente
como un bloqueo de receptáculo-simple (un mutex). Si no puedes obtener el semáforo, tus tareas se
pondrán en una cola, y serán despertadas cuando el semáforo sea liberado. Esto significa que la CPU
hará algo mientras que estás esperando, pero hay muchos casos en los que simplemente no puedes
dormir (ver Sección 4.8), y por lo tanto tienes que usar un spinlock en vez del semáforo.

Ningún tipo de bloqueo es recursivo: ver Sección 4.2.

2.1. Bloqueos y Núcleos Monoprocesador

Para núcleos compilados sin CONFIG_SMP, los spinlocks no existen. Esta es una excelente decisión de
diseño; cuando nadie se puede ejecutar al mismo tiempo, no hay motivo para tener un bloqueo.

Deberías siempre de probar tu código de bloqueo con CONFIG_SMP habilitado, incluso si no tienes un
equipo de prueba SMP, porque aún así pillará algunos tipos (simples) de deadlock.

Los semáforos todavía existen, porque son requeridos para la sincronización entre contextos de usuario,
tal como veremos a continuación.

2.2. Variantes de Bloqueo Lectura/Escritura

Los spinlocks y los semáforos tienen variantes de lectura/escritura: rwlock_t y struct rw_semaphore.
Estos dividen a los usuarios en dos clases: lo
  • Links de descarga
http://lwp-l.com/pdf1325

Comentarios de: Guía Informal al Bloqueo (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad