Ing Florencia Ferrigno Tecnicas Digitales 3

Slides:



Advertisements
Presentaciones similares
TEMA 1 Introducción a la Programación Concurrente
Advertisements

Curso de Java Capitulo 7: Continuación Poo Profesor:
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.
Funciones. Programación, Algoritmos y Estructuras de Datos.
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
SISTEMA DE NACIMIENTOS MANUAL DEL USUARIO. El objetivo del presente manual es servir de guía al usuario final para interactuar con el Sistema, permitiéndole.
Modelo de procesos de dos estados
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
Funcionamiento, programación
Concurrencia en JAVA JAVA es un lenguaje que tiene soporte de concurrencia, mediante Threads. Un thread es un proceso “liviano” (lightweight process) que.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Aplicaciones Multihilo
Propietario En informática se denomina así a un tipo de software o a una plataforma hardware, o a ambos, que es propio de un fabricante concreto.
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Subrutinas.
FUNCIONES Y PROCEDIMIENTOS
Java. Threads (Hebras) Los sistemas operativos actuales permiten la multitarea, aunque esta se de tiempo compartido cuando se trabaja con un solo procesador.
Tema 6: Clases Antonio J. Sierra.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Igor Santos Grueiro. Ahora tenemos datos y datos …
Semana 5 Subprogramas..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Conceptos generales: Concurrencia: Existencia simultánea de varios procesos en ejecución. IMPORTANTE: EXISTENCIA SIMULTÁNEA NO IMPLICA EJECUCIÓN SIMULTÁNEA.
DR. ERNESTO SUAREZ.
UNIDAD 3 Conceptos de Sistemas Operativos.
Unidad III Administración de procesos
Archivos.
(Organización y Manejo de Archivos)
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
Material de apoyo Unidad 4 Estructura de datos
Hilos En La Computación. (THREADS).
Gestión de procesos Sistemas Operativos Edwin Morales
Copiando y pegando archivos enteros Programación en Internet II.
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
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 Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Elementos básicos del lenguaje
Materia: Técnicas Digitales 3
Administrador de procesos
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.
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Cuentas de usuarios y grupos en windows 2008 server
Estructura de los Sistemas Operativos
Teoría de Sistemas Operativos Sincronización Procesos
UNIDAD 3 C ONCEPTOS DE S ISTEMAS O PERATIVOS. El ordenador es un sistema programable formado por un conjunto de elementos hardware que necesitan instrucciones.
FLOR ALBA ACEVEDO COD JENNIFFER TATIANA TORRES COD
Unidad 2 – Gestión de Procesos
Por Luis Esteban Monsalve Martínez
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
Cliente-Servidor La arquitectura cliente-servidor permite al usuario en una máquina, llamada el cliente, requerir algún tipo de servicio de una máquina.
Transacciones seguras  Concurrencia Ing. Yeberth Martinez Programación II.
MIA - Grupo 5 Unidad 2.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
Para aplicaciones.   Una variable es un espacio de memoria en donde se almacenan datos 1. VARIABLES.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
MEMORIA DINÁMICA.
Desarrollador Profesional de Juegos Programación III Unidad II Introdución a threading en windows.
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
Historia de los sistemas operativos. Los Sistemas Operativos han sufrido una serie de cambios revolucionarios llamados generaciones. Hay cuatro generaciones:
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Transcripción de la presentación:

Ing Florencia Ferrigno Tecnicas Digitales 3 Threads Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 fork ( ) Produce una copia del proceso que genera la system call. Esta copia es idéntica a la original. Cada proceso (la copia y el original) tiene su espacio de memoria, sus propias variables que también son independientes. El proceso hijo puede modificar cualquiera de sus variables sin afectar la copia de éstas que pertenece al padre. La independencia entre ambos procesos brinda protección y estabilidad. Sin embargo cuando varios procesos trabajan sobre el mismo problema, se producen inconvenientes. Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 Threads Se los llama Light Weight Processes (LWP) o hilos. Cuando un programa crea un thread No se generan copias de los recursos Ambos hilos de ejecución comparten el mismo espacio de memoria, file descriptors y otros recursos de sistema que posea el creador del thread. Cada thread tiene un único thread_id, puntero de stack y variables locales. Si cualquier thread llama a cualquiera de las funciones del grupo exec todos los demás threads terminan. Ver codigo de fork Ver codigo de thread. Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 Concurrencia La definicion exacta de concurrencia introducida por Dijkstra indica que Sn sentencias son concurrentes cuando dadas "S1 | S2 | S3 | Sn" todas ellas pueden ser ejecutadas al momento de ser llamadas. En nuestro caso N procesos son concurrentes cuando su ejecucion se realiza en forma simultanea. (llamese para tomar un recurso, presentar datos etc)(Estrictamente esto es imposible sobre la arquitectura IA32) Un programa concurrente es un programa que tiene más de una línea lógica de ejecución. Dicho de otra forma, es un programa que parece que varias partes del mismo se ejecutan simultáneamente -aunque no tenga por que ser así-. Ing Florencia Ferrigno Tecnicas Digitales 3

Beneficios de concurrencia Bloqueo de IO: Los procesos que utilizan IO tiene 3 opciones de manejarlo: De forma serie: esperar que uno termine de acceder para que otro pueda usarlo. De forma asincrónica mediante polling o select. De forma sincrónica creando procesos separados por cada llamada IO. Ing Florencia Ferrigno Tecnicas Digitales 3

Beneficios de concurrencia Separar la Interfaz Usuario (IU) del core en dos procesos distintos, permite que la IU continúe respondiendo al usuario mientras en el otro hilo se realizan operaciones que demandan mucho tiempo de ejecución. Se busca que los servidores sean concurrentes. Esto tradicionalmente se soluciona con fork ( ). En algunos casos los threads pueden mejorar el uso de memoria. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Creacion de threads #include <pthread.h> int pthread_create (pthread_t *thread_id, const pthread_attr_t *attributes,void *(*thread_function)(void *), void *arguments); Puntero a pthread_t en el cual se guarda el thread id del nuevo thread. Puntero a thread attribute . Detalla como interactúa el thread con el resto del programa. Si se le pasa NULL como atributo, el thread será creado con los atributos default. Puntero a la función que ejecutara el thread. Argumento del tipo void* . Lo que sea que se pase como argumento, es pasado a la función que ejecutara el thread. Esta función crea un thread cada vez que es llamada. Retorna un 0 en caso de éxito. En caso de error se retorna cualquier valor distinto de 0. (thread-create.c) Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Terminacion de un thread El thread puede terminar de dos formas: Con un simple return, en cuyo caso el valor que sea que se retorne será el valor de retorno del thread. Mediante la función phtread_exit(). El argumento que se le pasara a esta función será el valor de retorno del thread. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Terminacion de un thread Existe otra forma de terminar con thread. Esto es mediante el pedido que un thread termine, acción denominada cancelación. Para cancelar un thread se debe llamar a la función: int pthread_cancel (pthread_t thread) El argumento a pasar es el thread id del thread que se desee cancelar. A un thread cancelado, se le puede luego hacer un join, (de hecho es necesario hacer un join del thread cancelado para poder liberar los recursos del mismo, al menos que este haya sido detached). Ing Florencia Ferrigno Tecnicas Digitales 3

Paso de datos a un thread Dado que el tipo de argumento es void*, no se puede pasar gran cantidad de datos de forma directa. Se suele pasar como argumento un puntero a algún tipo de estructura o array de datos. (Ver código de ejemplo. Thread2.c). En el código que se acaba de ver, el programa principal muere antes que los threads. Si esto ocurre, el kernel se encarga de realocar memoria mientras los otros threads la utilicen. Sin embargo la forma correcta de trabajar es asegurarse que esto no ocurra nunca. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Sincronización entre threads Se dispone de tres tipos de sincronización: 1- Mutexes. Asegura un acceso exclusivo por el thread a determinadas variables. 2- Joins. Hace que el thread espere a que otros threads completen su tarea. 3- Variables condicionales. Son aquellas cuyo tipo es pthread_cond_t. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Joins int pthread_join(pthread_t thread, void **value_ptr); El uso de esta función provee una solución para forzar al main a esperar a que uno o varios de sus threads termine antes de finalizar el proceso main. Argumentos: 1) pthread_t thread: thread id del thread que se desea esperar 2) void **value_ptr: esta variable recibe el valor de retorno del thread cuando finaliza. Ver codigo de ejemplo (thread3.c) Si el segundo argumento no es NULL, el valor retornado por el thread será almacenado en esta ubicación. Ver codigo ejemplo (thread 4.c) Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Sincronización y zonas críticas Al compartir el mismo espacio de memoria… Thread 1 Thread 2 a = data; b = data; a++; b--; data = a; data = b; Si este código es ejecutado de forma serial (thread1, thread2) no hay problema, sin embargo los threads se ejecutan de forma aleatoria. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Sincronización y zonas críticas Thread 1 Thread 2 a = data; b = data; a++; b--; data = a; data = b; Como resultado quedaría que data = data-1!!! Para eliminar este riesgo, es necesario operar de manera atómica, es decir de forma indivisible e ininterrumpible. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Sincronización y zonas críticas La solución es tener funciones que bloqueen a los threads; si otro thread esta accediendo a la misma información. Para esto se utilizaran los mutex….. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Mutexes Mutex: Mutual Exclusion. Son utilizados para serializar recursos compartidos. Son una forma especial de generar que alguna porción de código sea atómica. Solo un thread puede estar lockeado con el mismo mutex, el segundo thread que desee lockearse deberá esperar a que el primero se delockee. Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Mutexes. Creación Se debe crear una variable del tipo pthread_mutex_t, esta identificara al mutex que se este utilizando. Para inicializar un mutex se debe llamar a la función: int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); 1) Puntero a la variable anteriormente mencionada 2) Son los atributos que tendrá el mutex, en el caso de ser NULL, los atributos serán aquellos que están por default. Declaración e inicialización: pthread_mutex_t mutex; pthread_mutex_init (&mutex,NULL); Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Mutexes. Lock & Unlock Si un thread desea lockearse, simplemente deberá llamar a la función: int pthread_mutex_lock(pthread_mutex_t *mutex); Si el mutex esta siendo usado por otro thread, esta función bloquea la ejecución y retornara únicamente cuando el mutex sea liberado por el otro thread. Para delockear un mutex, simplemente se deberá llamar a la función: int pthread_mutex_unlock(pthread_mutex_t *mutex); Esta función deberá ser llamada siempre por el thread que lockeo al mutex. Mutex1.c Ing Florencia Ferrigno Tecnicas Digitales 3

Librería pthreads Mutexes. Locks no bloqueantes En algunos casos es conveniente que el thread no quede bloqueado hasta que el mutex sea liberado por otro thread. Para esos casos existe la función: int pthread_mutex_trylock(pthread_mutex_t *mutex); Si el mutex no esta siendo usado por otro thread, entonces se lockea y la función retorna cero. En caso contrario, no se bloquea sino que simplemente la función retorna el código de error EBUSY. Se deberá intentar mas tarde. Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 Demonios Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 Demonios Se trata de procesos que se caracterizan porque se ejecutan haciendo que su proceso padre sea el proceso init, cuyo identificador de proceso es el 1, y NO tienen como terminales asociados de entrada y salida la pantalla y el teclado respectivamente. Los procesos normales usan la terminal, dejandola bloqueada para otros usos hasta que el proceso finalice. Esta situacion no es deseable para algunos tipos de aplicaciones, como aquellos que mantienen una sesion para controlar un dispositivo en tiempo real 24 horas al dia. En estos casos no es logico tener una terminal bloqueada, sin mencionar que alguien por error presione las teclas Ctrl-C y por error termine el programa. Un proceso para convertirse en demonio deben realizar dos tareas: Independizarse del padre y "engancharse" del init. Independizarse del terminal. Ing Florencia Ferrigno Tecnicas Digitales 3

Ing Florencia Ferrigno Tecnicas Digitales 3 Demonios setsid(): pertenece al header unistd.h. Esta funcion permite independizarse de la terminal. De esta forma cuando el programa se ejecute no quedara bloqueada la terminal. Esta funcion crea una nueva sesion para el proceso que la llame, sin el control de la tty. chdir(path): pertenece al mismo header. Cambia el directorio al directorio que se le pasa como argumento. No es imperioso para la creacion de un daemon pero sirve para asegurarse que el mismo trabajara en el directorio de trabajo deseado. demonio.c integ1.c Ing Florencia Ferrigno Tecnicas Digitales 3