Materia: Técnicas Digitales 3

Slides:



Advertisements
Presentaciones similares
Programación Interactiva Hilos
Advertisements

I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
T5-multithreading SO-Grado Q1.
Administración de procesos y del procesador.
IET110 Sistemas Operativos
Sistemas en estratos. Descripción: se organiza en una jerarquía de estratos, estando construido cada uno de ellos sobre el otro que tiene menor jerarquía.
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
Comunicación entre procesos en Linux
Concurrencia en JAVA JAVA es un lenguaje que tiene soporte de concurrencia, mediante Threads. Un thread es un proceso “liviano” (lightweight process) que.
Comunicación y sincronización entre procesos
SISTEMAS OPERATIVOS UNIDAD 1..
Administración de procesos y del procesador.
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
El lenguaje de programación C - Funciones -
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Signal, kill, sigaction y máscara de señales
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
Semana 5 Subprogramas..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Concurrencia: Exclusión Mútua y Sincronización
Comunicación y sincronización entre procesos Realizado por Kepa Bengoetxea Kortazar
Semáforos Cecilia Hernández
Ing Florencia Ferrigno Tecnicas Digitales 3
Unidad III Administración de procesos
Profesor: Rodrigo Sanhueza Figueroa
IET110 Sistemas Operativos P04: Exclusión Mutua Prof. Jonathan MakucSlide: 1.
ICC243 Sistemas Operativos P03: Introducción: Conceptos Prof. Jonathan Makuc.
Pablo Abrile1 Threads Lenguajes de Programación I.
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing.
Concepto de proceso Sebastián Sánchez Prieto. Procesos 2  S2P, OGP & IGT Definición de proceso Un proceso es un programa en ejecución Componentes:
Planificación de Procesos
 La cuestión de la cantidad es simple, cuanto más memoria haya disponible, más podrá utilizarse. La velocidad óptima para la memoria es la velocidad.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Gestión de Procesos Gestión de Procesos Procesos Planificación CPU
Capítulo 7 Gestión de memoria.
Programming with POSIX* Threads Intel Software College.
Gestión de procesos Sistemas Operativos Edwin Morales
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Tema 9.6: Sincronización de Procesos
Monitores Cabudare, noviembre de 2010 Universidad Fermín Toro
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.
1 Descripción y control de procesos Capítulo 3. 2 Requerimientos de un SO relacionados con procesos Ejecutar concurrentemente múltiples procesos para.
Teoría de Sistemas Operativos Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Introducción a los SOs.
Tema 8: Introducción a los SOs. Tema 8: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.), Introducción.
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Programando con Hilos POSIX* Intel Software College.
Programación Orientada a Objetos
Desarrollador Profesional de Juegos Programación III Unidad III Programación con Threads Bajo Linux.
Estructura de los Sistemas Operativos
Unidad 2 – Gestión de Procesos
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
INTERRUPCIONES – ABRAZO MORTAL
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.
SISTEMAS OPERATIVOS Contenido: Descripción del proceso proceso nulo estado del procesador imagen del proceso información del BCP Miguel Ángel Martínez.
Desventajas Poco eficiente: lectura y escritura en disco es lenta Necesita otro mecanismo de sincronización para acceder a los datos Son los procesos.
MUTEX. QUE ES CONCURRENCIA - MUTEX  Son el mecanismo que nos ayuda en la sincronización para proteger una sección crítica en nuestro código.  Estas.
Transcripción de la presentación:

Materia: Técnicas Digitales 3 THREADS Materia: Técnicas Digitales 3 Autor: Jonathan Rubstein

Índice Procesos Ciclo de vida Scheduling Sincronización Señales Atributos Funciones Ejemplos Autor: Jonathan Rubstein

Procesos – Definiciones Procesos pesados: Procesos livianos: Los procesos no comparten ninguna porción de la memoria entre si. Cada uno se ejecuta en su propio procesador virtual con CPU y memoria. Todos ellos comparten el mismo espacio de almacenamiento permanente (el disco). Necesita una MMU para su uso. Los procesos livianos comparten la memoria pero tienen su propia CPU virtual. Autor: Jonathan Rubstein

Procesos – Procesos livianos Se pueden tener varios en una misma área de memoria. El tiempo de creación es 10 a 100 veces menor comparado con la creación de procesos pesados. Se destruyen con mayor rapidez. El context switch es más rápido. Se comunican entre si con mayor facilidad. Reducen la seguridad. Autor: Jonathan Rubstein

Procesos - estructuras Cada tipo de proceso tiene su propia estructura de datos, en la cual guarda la información necesaria para su control. PCB ( process control block ) o task_struct pid y ppid. Prioridad. Dirección al proximo pcb. Stacks y Registros. Estados del proceso. Datos para ipc. File descriptors varios. Restricciones y permisos. TCB ( Thread control block ) Thread id. Estado. Registros de CPU. Stack pointer. Program counter. Signal mask Autor: Jonathan Rubstein

Ciclo de vida Just create: Se instancia el thread pero todavía esta activo. Runnable: El thread esta esperando a que el scheduler le de su slot correspondiente. Running: El thread se esta ejecutando. Blocked: Se esta ejecutando una función bloqueante, ya sea operaciones de E/S o métodos de sincronización. Dead: Termino su función o surgió un error que para el thread. Autor: Jonathan Rubstein

Scheduling Cada thread tiene su juego de parámetros para el scheduler. Puede ser cargados antes o después de su creación. La política utilizada para cuando se bloquea la ejecución por un mecanismo de sincronización se define cuando se crea dicho mecanismo. Para definir los quantum de tiempo se tienen en cuenta la prioridad, el estado y la métrica entre otras variables. La métrica refiere al comportamiento del thread. Por ejemplo, estaba esperando un evento que acaba de llegar. En cuanto al context switch, los procesos livianos tiene menor tiempo de cambio debido a que se guardan menos datos. Se introduce la función yield() que fuerza el cambio de contexto. Autor: Jonathan Rubstein

Sincronización – El porque Los procesos livianos comparten todo su acceso a memoria por lo tanto se crean race condition constantemente. Al igual que los semáforos en ipc se debe prevenir la escritura y lectura recurrente. Se puede bloquear un thread hasta que se de una condición especifica. Autor: Jonathan Rubstein

Sincronización – Mecanismos Mutex ( Mutual exclusion lock ) Similar al semaforo de ipc. Bloquea el flujo hasta que es liberado. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER Join Espera a que termine un thread especifico. condition variables Bloquean un thread hasta que otro cumple la condición. Puede despertar a un thread que este esperando o a todos aquellos que esten bloqueados por la condicion. pthread_cond_t condition_cond = PTHREAD_COND_INITIALIZER Autor: Jonathan Rubstein

Sincronización - DeadLocks Mutex void *function1(){… pthread_mutex_lock(&lock1); - Execution step 1 pthread_mutex_lock(&lock2); - Execution step 3 DEADLOCK!!! ... pthread_mutex_lock(&lock2); pthread_mutex_lock(&lock1); } void *function2() { ... pthread_mutex_lock(&lock2); - Execution step 2 pthread_mutex_lock(&lock1); pthread_mutex_lock(&lock1);pthread_mutex_lock(&lock2); ... } main() { ... pthread_create(&thread1, NULL, function1, NULL); pthread_create(&thread2, NULL, function1, NULL); ... } Autor: Jonathan Rubstein

Señales Se configura que señal puede recibir cada thread. int pthread_sigmask(int how, const sigset_t *newmask, sigset_t *old- mask); Posibilidades: SIG_SETMASK, SIG_BLOCK, SIG_UNBLOCK Se puede enviar una señal especifica a un thread en particular. int pthread_kill(pthread_t thread, int signo); Es posible bloquear un thread hasta que llegue una señal activada en el set indicado. int sigwait(const sigset_t *set, int *sig); Para cambiar el handler se utiliza: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); Autor: Jonathan Rubstein

Atributos Los atributos son las propiedades. Son del tipo pthread_attr_t. Se les asignan al crear el thread. Si al lanzarlo los atributos son nulos se le otorga los definidos por defecto. Definen el estado de espera ( join ), quien lo controla ( scope ),la política para el scheduler, prioridad, entre otros. Para destruirlos se usa pthread_attr_destroy(). Autor: Jonathan Rubstein

Funciones - 1 Crea un thread. int pthread_create(pthread_t *tid ,pthread_attr_t *attr,void *(*func)(void*), void *arg); Espera por la finalizacion de un thread que no sea detach. int pthread_join(pthread_t tid, void **status) Configura al thread para liberar los recursos usados al terminar. int pthread_detach(pthread_tic) Termina la ejecución. void pthread_exit(void *status) Devuelve el thread id. pthread_t pthread_self(void) Autor: Jonathan Rubstein

Funciones - 2 Copia los argumentos por defecto a atributo. int pthread_attr_init(pthread_attr_t* atributo) Destruye la varible atributo. int pthread_attr_destroy(pthread_attr_t * atributo) Compara dos thread id (devuelve cero si son distintos). int pthread_equal(pthread_t tid1, pthread_t tid2) Cancela la ejecucion del thread indicado. int pthread_cancel(pthread_t tid) Autor: Jonathan Rubstein

Funciones - 3 Si el mutex esta libre lo bloquea, sino para la ejecución hasta que este libre. int pthread_mutex_lock (pthread_mutex_t *mutex) Trata de bloquar el mutex, si esta ya esta tomado devuelve un EBUSY. int pthread_mutex_trylock (pthread_mutex_t *mutex) Si el thread esta bloqueado lo libera. int pthread_mutex_unlock (pthread_mutex_t *mutex) Destruye el mutex. int pthread_mutex_destroy (pthread_mutex_t *mutex) Autor: Jonathan Rubstein

Funciones – 4 Bloquea hasta que se cumple la condición. int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) Despierta a un thread que este dormido por cond_wait. int pthread_cond_signal (pthread_cond_t *cond) Despierta a todos los thread dormidos. int pthread_cond_broadcast (pthread_cond_t *cond) Destruye a la variable cond. int pthread_cond_destroy (pthread_cond_t *cond) Autor: Jonathan Rubstein