Mecanismos de concurrencia en linux

Solo disponible en BuenasTareas
  • Páginas : 12 (2806 palabras )
  • Descarga(s) : 0
  • Publicado : 22 de febrero de 2011
Leer documento completo
Vista previa del texto
Mecanismos de concurrencia en Linux

Linux incluye todos los mecanismos de concurrencia encontrados en otros sistemas UNIX como SVR4, incluyendo tuberías, mensajes, memoria compartida y señales. Adicionalmente, Linux 2.6 incluye un rico conjunto de mecanismos de concurrencia específicamente creados para usarse cuando un hilo se está ejecutando en modo kernel. O sea, estos mecanismos se usandentro del kernel para proveer concurrencia en la ejecución de código a nivel kernel. Aquí examinamos los mecanismos de concurrencia del núcleo de Linux.
 
Operaciones atómicas
 
Linux provee un conjunto de operaciones que garantizan las operaciones atómicas sobre una variable. Estas operaciones pueden usarse para evitar condiciones de competencia simples. Una operación atómica se ejecuta sininterrupción y sin interferencia. En un sistema con un solo procesador, un hilo llevando a cabo una operación atómica no puede ser interrumpido una vez que la operación ha iniciado hasta que esta termina. Adicionalmente, en un sistema multiprocesador, se bloquea el acceso a la variable sobre la que se está operando por parte de otros hilos hasta que la operación ha concluido.
 
Hay dos tipos deoperaciones atómicas definidas en Linux: las operaciones enteras, que operan en una variable entera, y las operaciones de mapa de bits que operan en un bit de un mapa de bits (tabla 1). Estas operaciones deben implementarse en cualquier arquitectura que implemente Linux. Para algunas arquitecturas, existen las correspondientes instrucciones en lenguaje ensamblador para las operaciones atómicas. Enotras arquitecturas, se usan operaciones que bloquean el bus de memoria para garantizar que la operación es atómica.

 
Operaciones atómicas enteras |   |
ATOMIC_INIT (int i) | En declaración: inicializa un atomic_t a i |
int atomic_read(atomic_t *v) | Lee el valor entero de v |
void atomic_set(atomic_t *v, int i) | Iguala el valor de v a i |
void atomic_add(int i, atomic_t *v) | sumai a v |
void atomic_sub(int i, atomic_t *v) | Resta i a v |
void atomic_inc(atomic_t *v) | Suma 1 a v |
void atomic_dec(atomic_t *v) | Resta 1 a v |
int atomic_sub_and_test(int i, atomic_t *v) | Resta i a v; regresa 1 si el resultado es cero; regresa 0 si no |
int atomic_add_negative(int i, atomic_t *v) | Suma i a v; regresa 1 si el resultado es negativo; regresa 0 si no (usado paraimplementar semáforos) |
int atomic_dec_and_test(atomic_t *v) | Resta 1 a v; regresa 1 si el resultado es cero; regresa 0 si no. |
int atomic_inc_and_test(atomic_t *v) | Suma 1 a v; regresa 1 si el resultado es cero; regresa 0 si no |
Atomic Bitmap Operations |   |
void set_bit(int nr, void *addr) | Pone en 1 el bit nr en el mapa de bits apuntado por addr |
void clear_bit(int nr,void *addr) | Pone en 0 el bit nr en el mapa de bits apuntado por addr |
void change_bit(int nr, void *addr) | Invert bit nr in the bitmap pointed a by addr |
int test_and_set_bit(int nr, void *addr) | Pone en 1 el bit nr en el mapa de bits apuntado por addr; regresa el viejo valor |
int test_and_clear_bit(int nr, void *addr) | Pone en 0 el bit nr en el mapa de bits apuntado por addr;regresa el viejo valor |
int test_and_change_bit(int nr, void *addr) | Invierte el bit nr en el mapa de bits apuntado por addr; regresa el viejo valor |
int test_bit(int nr, void *addr) | Regresa el valor del bit nr en el mapa de bits apuntado por addr |

 
Para operaciones atómicas enteras se usa un tipo de dato especial, atomic_t. Estas operaciones solo se pueden usar sobre este tipo dedato, y no se permiten otras operaciones para este tipo de dato. [LOVE04] lista las siguientes ventajas para estas restricciones:
 
1. Las operaciones atómicas nunca son usadas en variables que puedan bajo alguna circunstancia estar desprotegidas de condiciones de competencia.
2. Las variables de este tipo de dato están protegidas del uso inapropiado por operaciones no atómicas....
tracking img