Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Paralelismo Hilos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 48

Mariela Curiel

2020

Paralelismo
Concurrencia
Imagen tomada de Internet
Paralelismo
• Un procesador, varios procesos
Modelos
procesador procesador procesador

• Un procesador, Un proceso
Procesos Ejecución Serial

Hay paralelismo?
procesador

Tiempo
Proceso

Hay paralelismo? procesador procesador procesador procesador

Línea de tiempo Hay paralelismo?


Tiempo

Procesos Multiprogramación (batch y tiempo compartido)


http://www.daniloaz.com/es/diferencias-entre-cpu-fisica-cpu-
logica-core-nucleo-thread-hilo-y-socket/
Modelos
• Un procesador físico, dos o mas
procesadores lógicos (HyperThreading)

procesador
PL1 PL2

Proceso

Hay paralelismo? Hay paralelismo?

1 a = b + c; a = b + c;
2 x = y + pow(z, 3); x = a + pow(z, 3);
3 d = a * x; d = a * x;

1 2 1 Quora
2
3 Paralelismo a Nivel de Instrucciones
3
https://superuser.com/questions/584900/how-distinguish-between-multicore-and-
multiprocessor-systems
https://software.intel.com/content/www/us/en/develop/articles/
software-techniques-for-shared-cache-multi-core-systems.html?
wapkw=smart+cache
Multicores: paralelismo a nivel de Hw

https://www.ingenuityworking.com/discussions/f/161/t/2244.aspx
https://www.slideshare.net/ZackTudu/multicore-processors-and-its-advantages
Cómo explotar el paralelismo a nivel de Hw?
• Un procesador, un Dual core
proceso core core

procesador
Procesos

Proceso
core core

Hay paralelismo?
Paralelismo a Nivel de Aplicaciones

• Se dividen los datos del problema normalmente en partes de


igual tamaño. El cómputo se divide para trabajar sobre los

Descomposición distintos grupos de datos.


• Los datos que se dividen pueden ser la entrada, la salida o
datos intermedios.
de Dominio • Se asocia comúnmente con Divide and Conquer y los
modelos SIMD y SPMD de programas paralelos.

• Particionamiento de las operaciones del problema. Se divide el


Descomposición procesamiento en tareas disjuntas.

Funcional
Cómo explotar el paralelismo a nivel de Hw?
• Un proceso lo podemos dividir en muchos hilos

procesador

Proceso

Hilos
Paralelismo a Nivel de Software (Implementado por Librerías o por el
Sistema Operativo) Core 0 Core 1
PL1 PL2 PL1 PL2

PL1 PL2 PL1 PL2

Core 2 Core 3

Procesadores Físicos
(Multicores) y Lógicos
PL1 PL2 PL1 PL2

I1P1 I2P1…

PL1 PL2 PL1 PL2

Preguntas a Responder:
1. Cómo se implementan los hilos?
2. El proceso amarillo será multihilos?
Cocina comunal (CPU)
Cada familia puede usar el espacio Coloca la ropa en un minuto y
Para hacer lo que requiera en turnos no puede hacer mas nada,
de 5 minutos pierde los otros 4minutos.
Sale y pasa la siguiente
familia.

http://decoracionydisegno.blogspot.com/2013/08/lavadora-
en-la-cocina.html
Dura los 5 minutos picando
verduras y cocinará en los
próximos 5 minutos.
procesos

http://decoracionydisegno.blogspot.com/2013/08/lavadora-
en-la-cocina.html
Esta familia lleva a mas
Cocina comunal (CPU) integrantes uno pela las
Cada familia puede usar el espacio verduras, el otro mete la
Para hacer lo que requiera ropa, el otro friega la loza. Así
Solo 5 minutos aprovechan mejor los 5min
(paralelismo)

La familia es el proceso, cada http://decoracionydisegno.blogspot.com/2013/08/lavadora-


integrante es un hilo en-la-cocina.html
Definiciones
Un proceso es una entidad que posee 2 características importantes:
- Recursos: un espacio de direcciones (programas, datos, pila y un
PCB), archivos, memoria, etc. El SOP realiza la función de protección
para evitar interferencias no deseadas entre procesos en relación con
los recursos.
- Planificación/Ejecución: El proceso sigue una ruta de ejecución.
Tiene un PC, un estado de ejecución (Listo, bloqueado, ejecutándose,
etc.) y una prioridad.
Definiciones
• Estas dos características son independientes y pueden ser tratadas
como tales por los sistemas operativos.
• En algunos sistemas operativos se le denomina hilo (thread) a la
unidad activa y a la unidad propietaria de recursos se le suele
denominar proceso o tarea.
Definiciones
• Es el ejecutable que generamos.
• $ gcc –o sort sort.c
• $./sort
Archivo fuente.

ejecutable

• Los vemos con “ps” o tasklist.


• Tienen un pid
Definiciones
En un entorno multihilo se le asocia a los procesos:
• Un espacio de direcciones virtuales que soporta la imagen del
proceso.
• Acceso protegido a procesadores, a otros procesos, archivos y
recursos de E/S
Definiciones
A cada hilo se le asocian :
• Un estado de ejecución.
• Un PC, un contexto (conjunto de registros) que se almacena cuando no
está en ejecución.
• Una pila.
• Un espacio de almacenamiento para variables locales.
• Acceso a la memoria y recursos del proceso.
• Un programa multihilos es un proceso que contiene
más de un hilo. Cada hilo dentro del programa es como
un mini-programa con exactamente las mismas
propiedades que se mencionaron previamente.
Definiciones
• Un hilo puede ser una
función dentro de un void *primera_funcion(int *num)
{
proceso. int x, *dormir;
dormir = (int *)
main() malloc(sizeof(int));
{ for(x=0; x< 10; x++)
pthread_t thread1, thread2; {
int *tiempo_dormido1, *tiempo_dormido2; sleep(2);
*dormir += 2;
pthread_create(&thread1, NULL, (void*) primera_funcion, (void*)&i); (*num)++;
pthread_create(&thread2, NULL, (void*) segunda_funcion, (void*)&j); }
pthread_exit(dormir);
}
}
Características de los hilos
• No existe forma de predecir el orden de ejecución o el orden
de culminación de varios hilos.
• Los hilos son invisibles fuera de los límites del programa o
proceso que los contiene (al menos desde el punto de vista
de otros procesos)
• Los hilos tienen su propia identidad, i.e., pila, PC, registros,
prioridad.
Modelos

• Hilos a nivel de usuario (ULT)


• Hilos a nivel de kernel (KLT)
Modelos Hilos a Nivel de Usuario Hilos a Nivel del Kernel o SOP
Hilos a Nivel de Usuario
Muchos-a-Uno
• Varios hilos a nivel de usuario son
asignados a un mismo proceso.

• Este modelo se utiliza en sistemas que


no soportan hilos a nivel del kernel. El
kernel probablemente desconozca la
existencia de los hilos.
• Este tipo de hilos es soportado por
librerías.
• Ejemplos:
Solaris Green Threads
GNU Portable Threads

proceso
Hilos a Nivel de Usuario (ULT)
• Como no se involucra al kernel, las operaciones sobre
los hilos son más rápidas. La librería actúa como un
mini-kernel que controla la ejecución de los hilos.
• Las operaciones de creación, destrucción,
sincronización, etc., son llamadas a rutinas de librería.
Cuando un hilo se suspende, la librería toma el control,
salva su contexto y permite la ejecución de otro hilo
dentro del mismo proceso.
Ventajas de los Hilos a Nivel de Usuario
• El cambio de hilo se hace a nivel de proceso usuario, no hay un cambio
de modo. Esto ahorra el overhead que producen los dos cambios de
modo.
• Se pueden diseñar (si la librería lo permite) estrategias de planificación
adecuadas a la aplicación.
• Se pueden ejecutar en cualquier sistema operativo. Cualquier aplicación
puede programarse para ser multihilos a través del uso de una librería
de hilos
Desventajas
• Si un hilo hace una llamada al sistema bloqueante, se bloquearán
todos los hilos del proceso a menos que se use la técnica del
revestimiento.
• No se obtienen ventajas con el multiprocesamiento.
El hilo hace
una
llamada al
(a) (b)
Thread 1 Thread 2 Thread 1 Thread 2 sistema
Ready Running Ready Running Ready Running Ready Running
bloqueant
Hilos a nivel de
usuario Blocked Blocked Blocked Blocked
e.

Process B Process B
Ready Running Ready Running

Blocked Blocked

(c) (d)
Thread 1 Thread 2 Thread 1 Thread 2
Ready Running Ready Running Ready Running Ready Running

Blocked Blocked Blocked Blocked

Process B Process B
Ready Running Ready Running

Blocked Blocked

Colored state
is current state
Figure 4.6 Examples of the Relationships Between User -Level Thread States and Process States
Desventajas
• Si un hilo hace una llamada al sistema bloqueante, se bloquearán
todos los hilos del proceso a menos que se use la técnica del
revestimiento.

Revestimiento
• Convierte una llamada al sistema
bloqueante en una no bloqueante.
La librería demora la solicitud de
servicio al SOP
Uno-a-uno

Hilos a Nivel del Kernel


• Cada hilo a nivel de usuario está asociado a un hilo del kernel

• Ejemplos
- Windows 95/98/NT/2000
- Linux
Hilos a Nivel del Kernel (KLT)
• El núcleo gestiona los hilos. No hay código de gestión de hilos en la
aplicación, sólo la interfaz (API) para acceder a las utilidades de los
KLT.
• Cualquier aplicación puede programarse para ser multihilo. Todos
los hilos de una aplicación se mantienen en un solo proceso
(entidad que posee los recursos)
• El SOP mantiene toda la información de cada hilo y realiza la
planificación.
Ventajas
• Varios hilos de un mismo proceso se pueden planificar en
distintos procesadores.
• Si se bloquea un hilo de un proceso, el SOP puede planificar
otro hilo del mismo proceso.
• Las rutinas del SOP pueden ser en si misma multihilos
(demonios).
Figure 4.3 - Concurrent execution on a single-core system.

Figure 4.4 - Parallel execution on a multicore system


Desventajas
En el caso • Si varios hilos acceden el mismo conjunto de datos, este
de hilos a
nivel de
acceso debe ser sincronizado (semáforos, variables de
usuario condición, etc.). Tanto las llamadas de sincronización como
también se
deben las de creación y destrucción de KLT requieren de llamadas
sincronizar, al sistema.
pero
pudieran
ser
llamadas a
librería
Comparación
La principal desventaja es que el cambio
de hilo a nivel de kernel, requiere de dos
cambios de modo.
Kernel-Level
Operation User-Level Threads Threads Processes
Null Fork 34 948 11,300
Signal Wait 37 441 1,840

Table 4.1
Thread and Process Operation Latencies (s)
Desventajas

La siguiente tabla muestra el costo relativo de los hilos a nivel de usuario y


a nivel de kernel, como se presenta en el Sun Solaris 2.3 Answer Book.

Vinculado= KLT
45
Procesos e Hilos

Comunicación
Diferencias
en Cambios de
Contexto
Comunicación (Procesos)
• Por pertenecer a diferentes espacios de
direcciones, la comunicación
entre procesos sólo es posible
utilizando llamadas al sistema.
Mecanismos de Comunicación entre procesos
Comunicación (Hilos)
• Cada hilo dentro de un
proceso es una entidad
independiente, pero dado
que los hilos forman parte
de un mismo proceso o
espacio de direcciones, la
comunicación entre hilos
es mucho más rápida y
simple.
Comunicación (Hilos)
• Debido a que los threads son parte del mismo proceso, el
compartir datos entre ellos es muy fácil; todo los hilos tienen
acceso a los datos globales.
• La comunicación entre varios hilos se lleva a cabo a través
de recursos del proceso usuario, no a través de los recursos
del kernel.
• No se necesitan llamadas al sistema para su comunicación,
sencillamente se acceden los datos. Esto vale para hilos a nivel de
usuario y a nivel de kernel.
int main(){

pthread_t threads[NUM_THREADS]; // arrglo de


identificadores
int *tarea_ids[NUM_THREADS]; // apuntadores para
#define NUM_THREADS 3 pasar los parametros.
int rc, t;
char *mensaje[NUM_THREADS]; mensaje[0] = "Ingles: Hello World!";
mensaje[1] = "Espanol: Hola Mundo!";
void *PrintHello(void *thread_id){ mensaje[2] = "Italiano: Ciao Mondo!";
for(t=0;t<NUM_THREADS;t++){
tarea_ids[t] = (int *) malloc(sizeof(int));
int *id_ptr, tarea_id;
*tarea_ids[t] = t;
id_ptr = (int *) thread_id; printf("Creando el thread %d \n", t);
tarea_id = *id_ptr; rc = pthread_create(&threads[t], NULL, PrintHello,
printf("Thread %d: %s \n", tarea_id, (void *) tarea_ids[t]);
mensaje[tarea_id]); if (rc) {
pthread_exit(NULL); perror("Hello World");
} exit(-1);
}

}
pthread_exit(NULL);
}
Cambios de Contexto: Cambio de Hilo o
Cambios de Proceso.

Hilos a nivel de usuario Hilos a nivel de Kernel Procesos

Lo hace la librería a nivel Lo hace el sistema Lo hace el sistema


de usuario. No hay operativo. Se requiere operativo. Requiere
cambio de modo. Se cambio de modo. Si cambio de modo y salvar
hace de forma coloca otro hilo del todo el contexto del
independiente al SOP mismo proceso es proceso (status,
menos costoso que un registros), en el PCB y
cambio de proceso. recuperar del PCB el
contexto del nuevo
proceso a ejecutarse.
Por qué usar hilos?
Los mayores beneficios de los hilos provienen de las consecuencias del rendimiento:

• Lleva mucho menos tiempo crear un hilo en un proceso


existente, que crear un proceso totalmente nuevo. La creación de un
hilo puede ser hasta 10 veces más rápida que la creación de un
proceso en Unix.
• Lleva menos tiempo finalizar un hilo que un proceso.
Por qué usar hilos?
• Mayor eficiencia si se tiene un multiprocesador (y se soportan hilos a
nivel del kernel). Explotar Paralelismo del HW.
• Mayor concurrencia aún si se desconocen los hilos a nivel del kernel,
si se logra, a través de la librería, que al bloquearse un hilo, pueda
ejecutarse otro dentro del mismo proceso.
• Los programas que realizan diversas tareas o que tienen varias
fuentes y destinos de E/S (servidor) se pueden diseñar e implementar
fácilmente usando hilos.
Recursos
• http://systope.blogspot.com/2012/05/procesos-e-hilos.html
• https://es.quora.com/Cu%C3%A1l-es-la-diferencia-entre-un-proceso-
y-un-hilo
• https://sistemasoper2.wordpress.com/2014/10/21/diferencias-entre-
hilos-y-procesos/
• https://www.profesionalreview.com/2019/04/03/que-son-los-hilos-
de-un-procesador/
• https://www.youtube.com/watch?v=LOfGJcVnvAk

También podría gustarte