Diferencia entre revisiones de «Hilos»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Pasar imagn ascii a svg)
(poner titulo, crear oraciones apartir de frases sueltas, resaltar en negrita las ventajas)
Línea 1: Línea 1:
* Hilo = "proceso ligero" = línea de ejecución
+
= 3.5 Hilos =  
  
* En general, el planificador de procesos da el mismo tratamiento a los hilos y a los procesos.
+
Un hilo es un "proceso ligero", es decir, una línea de ejecución. En general, el planificador de procesos da el mismo tratamiento a los hilos y a los procesos, pero la conmutación de hilos es menos costosa que la conmutación de procesos.
  
* Proceso inicialmente parte con un único hilo
+
Los procesos inicialmente parten con un único hilo, aunque el sistema operativo ofrece llamadas al sistema para crear y destruir hilos. Puedo hacer uso de estas llamadas al sistema desde el propio código del programa.
  
* El sistema operativo ofrece llamadas al sistema para crear/destruir hilos. Desde el código del programa, puedo hacer uso de estas llamadas al sistema.
+
Cuando se crea un hilo, se le indica qué código se quiere que ejecute. Distintos hilos, de un mismo proceso, comparten espacio de memoria.
 
 
* Cuando se crea un hilo, se le indica qué código se quiere que ejecute.
 
 
 
* Dos o más hilos, de un mismo proceso, comparten espacio de memoria.
 
 
 
* La conmutación de hilos es menos costosa que la conmutación de procesos.
 
  
 
Veamos un ejemplo diseñado para un solo procesador:
 
Veamos un ejemplo diseñado para un solo procesador:
Línea 23: Línea 17:
 
Las principales ventajas del uso de hilos son:
 
Las principales ventajas del uso de hilos son:
  
*Menor penalización en cuanto a conmutación.
+
*'''Menor penalización''' en cuanto a conmutación.
  
*Dos hilos de un mismo proceso pueden compartir memoria aprovechando mejor los recursos y eliminando los mecanismos de comunicación necesarios para soluciones implementadas en varios procesos.
+
*Dos hilos de un mismo proceso pueden '''compartir memoria''' aprovechando mejor los recursos y eliminando los mecanismos de comunicación necesarios para soluciones implementadas en varios procesos.
  
 
*Con un solo procesador es posible que una línea de proceso haga uso de una llamada al sistema bloqueante. En este caso se puede llamar a otro hilo del mismo proceso en lugar de conmutar a otro proceso externo, ahorrando así tiempo de conmutación asociado a la ejecución del planificador de procesos.
 
*Con un solo procesador es posible que una línea de proceso haga uso de una llamada al sistema bloqueante. En este caso se puede llamar a otro hilo del mismo proceso en lugar de conmutar a otro proceso externo, ahorrando así tiempo de conmutación asociado a la ejecución del planificador de procesos.

Revisión del 16:09 29 ene 2012

3.5 Hilos

Un hilo es un "proceso ligero", es decir, una línea de ejecución. En general, el planificador de procesos da el mismo tratamiento a los hilos y a los procesos, pero la conmutación de hilos es menos costosa que la conmutación de procesos.

Los procesos inicialmente parten con un único hilo, aunque el sistema operativo ofrece llamadas al sistema para crear y destruir hilos. Puedo hacer uso de estas llamadas al sistema desde el propio código del programa.

Cuando se crea un hilo, se le indica qué código se quiere que ejecute. Distintos hilos, de un mismo proceso, comparten espacio de memoria.

Veamos un ejemplo diseñado para un solo procesador:

Uso del procesador hilos.svg

Con multiprocesamiento podemos ejecutar diferentes procesos a la vez. Si tenemos uno solo podemos desdoblarlo en hilos, usando técnicas de programación apoyadas en APIS (como POSIX threads).

Para aumentar su eficiencia, un programa en ejecución debe crear tantos hilos como el doble del número de procesadores del los que disponga el sistema. Por ejemplo: 4 hilos para un programa ejecutado con 2 procesadores.

Las principales ventajas del uso de hilos son:

  • Menor penalización en cuanto a conmutación.
  • Dos hilos de un mismo proceso pueden compartir memoria aprovechando mejor los recursos y eliminando los mecanismos de comunicación necesarios para soluciones implementadas en varios procesos.
  • Con un solo procesador es posible que una línea de proceso haga uso de una llamada al sistema bloqueante. En este caso se puede llamar a otro hilo del mismo proceso en lugar de conmutar a otro proceso externo, ahorrando así tiempo de conmutación asociado a la ejecución del planificador de procesos.


Ejemplo

El siguiente es un código en C de ejemplo en el que se muestra la creación de dos hilos. Se hace uso de la llamada al sistema sleep que hace que el proceso pase a estado bloqueado durante N segundos. Nótese que al compartir la variable a, ambos hilos modifican su valor.

#include <stdio.h>
#include <pthread.h>

int a = 10;

void *codigo_hilo1(void *arg)
{
	sleep(10);
	a = a - 2;
	printf("Soy el hilo 1 y la variable a vale %d\n", a);
	return NULL;
}

void *codigo_hilo2(void *arg)
{
	sleep(5);
	a++;
	printf("Soy el hilo 2 y la variable a vale %d\n", a);
	return NULL;
}

int main(void)
{
	pthread_t hilo1, hilo2;

	pthread_create(&hilo1, NULL, codigo_hilo1, NULL);
	pthread_create(&hilo2, NULL, codigo_hilo2, NULL);

	pthread_join(hilo1, NULL);
	pthread_join(hilo2, NULL);
}

Este ejemplo se compila en un terminal escribiendo: gcc -lpthread archivo.c