2007 - Pablo Abrile1 Threads Lenguajes de Programación I.

Slides:



Advertisements
Presentaciones similares
Unidad 15 Características de C++ no relacionadas con el DOO.
Advertisements

El lenguaje de programación C - El primer programa -
III - Gestión de memoria
Prototipo de compilador didáctico del lenguaje LC99
MANUAL EXPRESS DE C J.M.sevilla.
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Temas Operaciones básicas Instalando el compilador
Programación I Teoría III
Funciones. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
FUNCIONES EN C.
Tema 1. Introducción a la programación (Lenguaje java).
Programación (Estructura de Datos)
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Teoría de lenguajes y compiladores
Ismael Camarero1. 2 ¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria.
Implementación de Listas
Estructuras de Datos Punteros y algo más.
17/09/2014Catedra de Programacion I1 Programación I Funciones.
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
FUNCIONES EN C.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad
Material de apoyo Unidad 2 Estructura de datos
Multiprogramación Procesos Cecilia Hernández
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Tema 3 Entrada y Salida.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Signal, kill, sigaction y máscara de señales
SCJP Sun Certified Programmer for Java 6
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Programación III Clase 07 Funciones.
Introducción a los punteros
Arreglos.
Ing Florencia Ferrigno Tecnicas Digitales 3
Estructura de un programa C
Estructura de un programa en C
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Unidad III Administración de procesos
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
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,
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Capítulo 7 Gestión de memoria.
Elementos básicos del lenguaje

APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
Principios de programación LIA. Suei Chong Sol, MCE. Sentencias de Control Repetitivas.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Punteros Recomendado: 1. Nivelación Funciones
Unidad 2 – Gestión de Procesos
1 5. UNIDADES DE PROGRAMAS. 2 Uso de mecanismos de control de secuencia de: Invocaciones Retornos Entre: PPSP 1 a) I R SP 1 SP 2 b) I R Unidades subordinadas.
Por Luis Esteban Monsalve Martínez
PRINCIPIOS DE PROGRAMACIÓN
Introducción a los TADs
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
 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.
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.
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Transcripción de la presentación:

Pablo Abrile1 Threads Lenguajes de Programación I

Pablo Abrile2 Objetivos Evolución de la Pila de Registros de Activación en Lenguajes tipo ALGOL con unidades concurrentes Conceptos a recordar de prácticas previas  Lenguajes Tipo ALGOL  Pila de Registros de Activación Conceptos a introducir  Unidades concurrentes (en conjunto con los conceptos previos)‏

Pablo Abrile3 Lenguajes Tipo ALGOL También llamados Orientados a Pila Programa Ejecutable Datos La Frontera varía en cada instante de la ejecución Heap

Pablo Abrile4 Lenguajes Tipo ALGOL Tienen bloques (fragmentos de programa)‏  Sin nombre  Con nombre (funciones)‏ Dentro de estos bloques pueden definirse variables a emplear Al llamar a estos bloques, en la pila de ejecución se crean los registros de activación donde se almacenan las variables que se emplean

Pablo Abrile5 Pila de Registros de Activación Registro de Activación  Conjunto de todos los elementos nuevos que necesita un bloque para ejecutarse. Variables Dirección de retorno si llamo a una función (cadena dinámica)‏ Puntero al padre en el árbol de anidamiento (cadena estática)‏

Pablo Abrile6 Pila de Registros de Activación A → B → B → C → D Programa RA de A RA de B RA de C RA de D

Pablo Abrile7 Pila de Registros de Activación Unidades Concurrentes Programa RA de A RA de B RA de C RA de D Thread 1 Thread 2 …….. Thread n Thread Ppal Variables Globales – Descriptores de archivos – Mem. De Heap - etc.

Pablo Abrile8 Ejercicio Ejemplo Programa Ejecutable #include Headers de la librería POSIX Threads void *XX(void) { int i; printf("%x\n",&i); } Función XX Será llamada desde -Thread creado con pthread_create - Thread Principal (main)‏ int main (){ pthread_t thread; pthread_create(&thread, NULL, XX, NULL); XX(); } Thread Principal Creación del Thread que llamará a XX Invocaciones a XX desde el thread principal

Pablo Abrile9 Salida Esperada XX se llama 4 veces en total  3 desde el main. En adelante Thread Principal  1 desde el thread creado con pthread_create. En adelante Thread 1  Se esperan: 4 impresiones por pantalla ¿Que ocurre con las direcciones de memoria que serán impresas?

Pablo Abrile10 Pilas de Ejecución 1 para el Thread Principal (main)‏ 1 para el Thread 1 (creado por pthread_create)‏

Pablo Abrile11 XX() (thread principal)‏ Programa XX()‏ Thread 1 Thread Principal i Dirección bfaba8d4 Primer Llamado a XX()‏

Pablo Abrile12 Programa Thread 1 Thread Principal Al terminar el primer llamado el registro de activación se quita de la pila

Pablo Abrile13 XX() (thread principal)‏ Programa XX()‏ Thread 1 Thread Principal i Dirección bfaba8d4 Segundo Llamado a XX()‏ Se vuelve a apilar en la misma posición

Pablo Abrile14 Programa Thread 1 Thread Principal Al terminar el segundo llamado el registro de activación se quita de la pila

Pablo Abrile15 XX() (thread principal)‏ Programa XX()‏ Thread 1 Thread Principal i Dirección bfaba8d4 Tercer Llamado a XX()‏ Se vuelve a apilar nuevamente en la misma posición

Pablo Abrile16 XX() Thread 1 Programa XX()‏ Thread 1 Thread Principal i Dirección b7e1d3c4 Llamado a XX()‏ Desde el thread creado con pthread_create (Thread 1)‏

Pablo Abrile17 Salida Esperada bfaba8d4 b7e1d3c4 El orden puede variar de acuerdo a cuando se ejecute el Thread 1 Puede hacerlo entre las llamadas a XX() desde el Thread Principal

Pablo Abrile18 Salida Obtenida

Pablo Abrile19 Orden de aparición alterno Introducimos una demora en la función XX Entre los tres llamados del thread principal a XX se alternará el llamado al thread creado con pthread_create void *XX(void){ int i; for (i=0; i< ; i++); //Demora antes de imprimir. printf("%x\n",&i); }

Pablo Abrile20 Salida Debido a la demora, se alternan las salidas El resultado sigue siendo el mismo ya que las pilas de ejecución son separadas para cada thread!! Salida de Thread 1 Salida de main

Pablo Abrile21 Ejercicio 2 2 threads  ThreadHola: Imprime Hola  ThreadMundo: Imprime Mundo #include void *mensaje(void* msj){ printf("%s\n",msj); } int main (){ pthread_t threadHola,threadMundo; pthread_create(&threadHola, NULL, mensaje, "Hola"); pthread_create(&threadMundo, NULL, mensaje, "Mundo"); } El cuarto argumento de pthread_create es el argumento a pasar a mensaje cuando se crea el thread. En este caso, el mensaje a imprimir por el thread

Pablo Abrile22 Resultado En general, por el poco tiempo de procesamiento que lleva la función “mensaje” se verá la respuesta “Hola” “Mundo” (aunque puede no ser así). Introducimos una demora en la función mensaje para ver si el orden de impresión puede variar

Pablo Abrile23 void *mensaje(void* msj){ int i; for (i=0; i< ; i++); //Demora introducida printf("%s\n",msj); }

Pablo Abrile24 Para probar los ejercicios Comprobar que se tienen instaladas las librerías de POSIX threads. Realizar un script “compilar” que contenga  gcc $1.c -o $1 –lpthread./compilar 01_threads  Compila 01_threads.c./01_threads

Pablo Abrile25 Información de Interés Fork(): Múltiples procesos vs. Threads

Pablo Abrile26 Para mayor información Material disponible en el sitio web de la cátedra 

Pablo Abrile27 FIN