Multitasking y Comunicaciones Conceptos. Mecanismos de sincronización. IPCs. Problemas clásicos. Comunicaciones. Flashcards
(30 cards)
Multithreading:
Qué recursos comparte? Cuáles son los mecanismos de sincronización? Cuáles son las características clave?
Recursos Compartidos
● Heap
● Data Segment
● File Descriptors
● Code Segment (read-only)
Sincronización
Soporte threading del SO (pthread-mutex, etc)
● Soporte threading del runtime (threads Java, .Net, etc)
● Inter Process Communication (IPC)
Características clave
● Sencillo compartir información entre threads.
● Alto acoplamiento entre componentes del sistema.
● Escasa estabilidad => 1 thread defectuoso afecta todo el sistema.
● Escalabilidad muy limitada.
Multiprocessing:
Qué recursos comparte? Cuáles son los mecanismos de sincronización? Cuáles son las características clave?
Recursos Compartidos
● Code Segment (read-only)
● InterProcess Communication (IPCs):
○ Signals
○ Shared Memory
○ Sockets
Sincronización
○ Pipes / Fifos
○ Semáforos
Características clave
● No es trivial compartir información entre procesos.
● Componentes separados, en general simples.
● Más escalable y más estable que multi-threading.
● Sin tolerancia a fallos de hardware, sistema operativo, etc.
CHrome le gana a firefox gracias a pasar a multiprocessing. Firefox crasheaba con tantas ventanas porq eran hilos
Multicomputing:
Qué recursos comparte? Cuáles son los mecanismos de sincronización? Cuáles son las características clave?
Recursos Compartidos
● Ninguno
Sincronización
● Mensajes Ad-Hoc entre Computadoras
=> necesidad de implementar mecanismos de sincronización.
Características clave
● Comunicación de red => problemas por limitaciones de ancho de banda,
latencia y pérdida de mensajes.
● Comunicación entre procesos: compleja y central al diseño del sistema.
● Alta escalabilidad y tolerantes a fallos.
Cuáles son las propiedades de programas concurrentes?
Se analizan para ver si un algoritmo es bueno:
Safety properties (siempre verdadera - invariante)
● Exclusión mutua
● Ausencia de deadlocks
Liveness properties (eventualmente verdadera)
● Ausencia de starvation
● Fairness
Asegurar estado safety de propiedades de un sistema se transforma en un pilar
de la teoría de concurrencia. Cómo se puede asegurar?
Basada en Algoritmos:
Sin existencia de abstracciones
especiales.
· Condiciones lógicas simples para
asegurar el cumplimiento de cierta
Critical Section.
Basada en abstracciones:
Basada en abstracciones provistas por
el SO.
· Permite construir mecanismos
compuestos por combinaciones de las
mismas.
Qué ejemplos hay de safety basado en algoritmos? qué definiciones son importantes?
Algoritmos de espera: Dekker, Lamport (del panadero), Peterson, etc.
Busy-Waiting: responsable de la mayoría de los problemas de performance
en sistemas concurrentes.
● Spin-lock: caso más simple de Busy-Wait ( while (flag); )
Cómo funciona el algoritmo de peterson para 2 procesos?
Proceso 0:
bool flag[2] = {false, false};
int turn;
P0: flag[0] = true;
turn = 1;
while (flag[1] && turn == 1);
/* critical section code */
flag[0] = false;
Proceso 1:
P1: flag[1] = true;
turn = 0;
while (flag[0] && turn == 0) ;
/* critical section code */
flag[1] = false;
Qué ejemplos hay de safety basado en abstracciones?
Operaciones atómicas: Mecanismos provistos por un lenguaje para
actualizar variables/objetos sin utilizar mecanismos de sincronización
○ Contadores atómicos de tipos POD (int, char, double, etc.)
○ CAS (Compare and Swap): Operación por excelencia para actualizar
contenedores de forma segura en ambientes multithreading.
Qué características tienen los semaforos?
Variable entera utilizada para acceder a
recursos compartidos (e.g. Shared Mem)
● El mismo queda definido por los valores que
puede adoptar (e.g. S = {0,1,2})
● Operaciones válidas:
○ signal (P): Incrementa el valor de S
○ wait (V): Decrementa el valor de S
● Mutex (S = {0,1})
○ Utilizado para acceder a secciones
críticas
Qué son los monitores?
Tnego recursos que quiero compartir pero no quiero que se accedan desordenadamente, entonces las ingreso en un monitor que genera una cola de tareas para q sea sincronizado. Normalmetne se usaba clases como en java
Qué son las condition variables?
Ejemplo práctico de un monitor
● Mutex debe ser adquirido antes de realizar una operación
● Operaciones válidas:
○ wait: Bloquea al proceso hasta que otro proceso lo despierte
○ notify / notify_all: Despierta a un proceso / todos los procesos
esperando que se cumpla una condición
Ejemplo:
Proceso N°1
cv.acquire()
while not an_item_is_available():
cv.wait()
get_an_available_item()
cv.release()
Proceso N°2
cv.acquire()
make_an_item_available()
cv.notify() / cv.notify_all()
cv.release()
Las condvars hace busy wait? Cómo hacen?
No, Usan una syscall que hace que un proceso esté durmiendo y se despierte, sin necesidad de que esté running todo el tiempo
Como funcionan las barreras?
N threads/procesos deben ejecutar M tareas
● Cada thread/proceso ejecuta su tarea y espera a que sus pares terminen
de hacer lo mismo
● Cuando todos los threads/procesos hayan terminado de ejecutar una
ronda de tareas, proceden a ejecutar una nueva ronda
Qué es un Rendezvous? (cita)
Un rendezvous es una primitiva de sincronización que permite que dos procesos concurrentes intercambien datos de forma coordinada.
Características
Es una sincronización entre dos tareas.
Permite que las tareas intercambien datos y coordinen su ejecución.
El proceso que solicita el rendezvous debe esperar en el punto de reencuentro hasta que el proceso llamado llegue allí.
Los procesos pueden intercambiar datos durante el rendezvous.
Los datos intercambiados corresponden a parámetros y resultados de una llamada.
Igual que la barrera pero usa una blockingqueue
Qué caracteristicas tienen los IPCs?
Inter-Process Communication
Permiten la comunicación entre dos o
más procesos
● Provistos por el SO
● Creación y destrucción exceden
la vida del proceso
○ Usuario es responsable de la vida
de los mismos
○ Proceso Launcher y Terminator para
administrar la vida de los mismos
● Usualmente identificados por nombre
● En Linux todos los IPCs son vistos como diferentes tipos de archivos
Qué comparaciones hay entre mecanismos de sincronización e IPCs?
Semáforo - Semaforo
?? - Shared memory
Monitor - File Lock
Barrera - ??
Rendezvous - Signal / Queue / Pipes / Fifos / Sockets
Qué son las signals?
Existen 31 tipos distintos (kill -l)
● Cada proceso decide cuales handlear
(Ej. libcURL y SIGALRM)
● SIGSTOP y SIGKILL son la excepción
● Ejemplos de signals estándar
○ SIGINT y SIGTERM: Graceful Quit
○ SIGSEGV: Problemas en la memoria
○ SIGABRT: Code assertions
● Propagación de signals en threads. (Masks setting)
Qué es el IPC Shares memory?
Mecanismo provisto por el SO (Linux) para
compartir recursos
● Abstracción inexistente en threads: heap entre
dos threads de un mismo proceso es compartido
● Su tamaño se define al ser creada
● Mutex es necesario solo si dos procesos no
pueden acceder a la memoria al mismo tiempo
(e.g. shared counter)
Caracteristicas de los file locks? (ipc)
Control de acceso a un file descriptor
int flock(int fd, int operation);
● Existen dos tipos:
○ Shared lock (R): Read only lock.
Múltiples read locks permitidos
○ Exclusive lock (W): RW lock.
Sólo un exclusive lock a la vez por
File
Caracteriticas de los Pipes y Fifos? (ipc)
Pasaje de información directa entre 2 procesos
● Linux: API de un archivo para la escritura/lectura
● Unnamed Pipes (Pipes)
○ Comunicación entre procesos padre e hijo
○ Dejan de existir al finalizar el proceso
● Named Pipes (FIFO)
○ Comunicación entre dos procesos cualesquiera
○ Viven en el SO por lo cual excede la vida del proceso
● ¿Cuál es el tamaño de un pipe?
Qué son las Message Queues (System V)?
IPC
Procesos escriben / reciben bloques de bytes
● Campo mtype
○ Identifica el tipo de mensaje
○ Sender debe enviar mensajes con mtype > 0
○ Receptor con mtype = 0 recibe mensajes
sin importar el mtype
○ Caso esotérico: Receptor con mtype < 0
● Mensajes leídos son removidos de la cola
● Buffer size definido durante la creación
Características de sockets?
Permite comunicar dos procesos a través
de un canal de comunicación (endpoint)
int socket(int domain, int type, 0);
● Domain ○ AF_UNIX - Unix socket ○ AF_INET / AF_INET6 - Network Socket ● Type (Protocolos de comunicación) ○ SOCK_DGRAM => UDP ○ SOCK_STREAM => TCP ○ SOCK_RAW => ??
De qué se trata el problema productor consumidor?
Productores agregan paquetes en el buffer
● Consumidores extraen paquetes del buffer
● Situaciones de bloqueo
○ Productor intenta agregar un paquete
cuando el buffer está lleno
○ Consumidor intenta extraer un paquete
cuando el buffer está vacío
● Acceso al buffer debe ser sincronizado
● El buffer es acotado o infinito?
Relacionado con blocking queue
De qué se trata el problema lector escritor?
Procesos intentan acceder a una memoria
compartida
● Dos tipos de procesos (Lectores y Escritores)
● Tipos de problemas definidos en función de las
propiedades fairness y starvation
○ Prioridad Lectores : Escritores esperan a que
lectores liberen recurso compartido
○ Prioridad Escritores : Lectores esperan a que
Escritores liberen recurso compartido
○ Lectores y Escritores acceden a recurso
compartido por tiempo limita