LA PILA DE EJECUCIÓN Y DEBBUGGING THREADS
|
|
|
- Hugo Santos Acosta
- hace 8 años
- Vistas:
Transcripción
1 UNIVERSIDAD NACIONAL DEL CENTRO DE LA PROVINCIA DE BUENOS AIRES FACULTAD DE CIENCIAS EXACTAS APUNTE DE CÁTEDRA LA PILA DE EJECUCIÓN Y DEBBUGGING THREADS por José A. Fernández León y José Macchi ANTES DE COMENZAR El presente apunte tiene como objetivo dar un marco introductorio al manejo de un debugger o depurador para la programación multi-threaded utilizando la libreria POSIX threads (pthreads). Para ello, se mostrarán a continuación los comandos a fin de visualizar el contenido de la pila de ejecución vinculada a threads. Las explicaciones dadas aquí son específicas a la librería antes nombrada de Linux. El tutorial explica las diferentes herramientas básicas definidas por la librería, muestra como usarlas, y luego da un ejemplo de su uso para resolver problemas de programación. Cuando se hable de POSIX threads, es necesario preguntarse: Cuál implementación del estándar de POSIX threads será utilizada?. Como este estándar de threads ha sido revisado durante muchos años en varios períodos, se pueden encontrar implementaciones del estándar en diferentes etapas de desarrollo del mismo; por ejemplo, que dichas librerías diferirán en el conjunto de funciones, valores por defecto, etc. Para ello se recomienda que ante cualquier duda, se consulten las referencias de la bibliografía de este tutorial, o bien los manuales respectivos de las librerías que se utilicen. QUÉ ES UN THREAD? PORQUE UTILIZARLOS Un thread es un semi-proceso, que tiene su propia pila, y que ejecuta una porción de código dada. A diferencia de un proceso real, un thread normalmente comparte su memoria con otros threads (en la cual tal como sucede con los procesos, cada thread tendrá asignado su espacio de memoria). Un grupo de threads es un conjunto de threads que se están ejecutando todos dentro del mismo proceso. Comparten todos la misma memoria, y por ello pueden acceder a las mismas variables globales, la misma memoria de heap, los mismos descriptores de archivos, etc. Todos se ejecutan en paralelo (por ejemplo, usando porciones del tiempo asignado al proceso en general, o si están dentro de un sistema con multiprocesadores, de forma paralela realmente). La ventaja de usar un grupo de threads en lugar de un programa normal en serie es que muchas operaciones pueden ser llevadas a cabo de forma paralela, y de esta forma los eventos asociados a cada actividad pueden ser manejados inmediatamente tan pronto como llegan (por ejemplo, si tenemos un thread manejando la interface de usuario, y 1
2 otro manejando las consultas a una base de datos, podremos ejecutar consultas complejas realizadas por el usuario, y aun así responder a la entrada del mismo mientras la consulta está siendo ejecutada). La ventaja de usar un grupo de threads en vez de un grupo de procesos es que el cambio de contexto entre threads es realizado mucho más rápidamente que el cambio de contexto entre procesos (un cambio de contexto significa que el sistema operativo cambia la ejecución de un thread o proceso a la ejecución de otro). Por lo tanto, las comunicaciones entre dos threads son usualmente más rápidas y sencillas de implementar que las comunicaciones entre dos procesos. Por otro lado, a modo de inconveniente, debido a que los threads dentro de un grupo, comparten el mismo espacio de memoria, si uno de ellos corrompe el espacio de su memoria, los otros threads también sufrirán las consecuencias. Con un proceso, el sistema operativo normalmente protege a un proceso de otros, y si un proceso corrompe su espacio de memoria, los demás no se verán afectados. CREACIÓN Y DESTRUCCIÓN DE THREADS Cuando un programa multi-threaded comienza su ejecución, tendrá un thread corriendo, el cual ejecuta la función main() del programa. Este es ya un thread en si mismo, con su propio identificador de thread (ID). Para poder crear un nuevo thread, el programa deberá utilizar la función pthread_create(). En el siguiente código mostramos como se la utiliza. CODIGO: create.c #include <stdio.h> /* Rutinas I/O estandar */ #include <pthread.h> /* Estructuras de datos y funciones pthread */ /* Funcion a ser ejecutada por el Nuevo thread */ void* do_loop(void* data) { int i; /* Contador para imprimir valores */ int j; /* Contador para el delay */ int me = *((int*)data); /* Numero ID del Thread */ for (i=0; i<10; i++) { for (j=0; j<500000; j++); printf("thread '%d' - Posicion i en memoria '%x' - Valor i '%d'\n",me,&i,i); } } /* Salida del thread */ pthread_exit(null); /* Main del ejemplo */ int main(int argc, char* argv[]) { int thr_id; /* ID del thread Nuevo */ pthread_t p_thread; /* Estructura del thread */ int a = 1; /* thread 1 */ int b = 2; /* thread 2 */ /* Creo un nuevo thread que ejecutara 'do_loop()' */ thr_id = pthread_create(&p_thread, NULL, do_loop, (void*)&a); /* El otro thread esta dado por la function main() */ do_loop((void*)&b); 2
3 } /* No alcanzado */ return 0; Algunas consideraciones acerca del programa: 1. Notar que el programa main() es también un thread, el cual ejecuta la función do_loop() en paralelo con la ejecución del thread. 2. pthread_create() toma 4 parámetros. El primer parámetro es usado por pthread_create() para brindar información al programa acerca del thread. El segundo parámetro es usado para setear algunos atributos del nuevo thread. En el caso presentado, se provee de un puntero a NULL para decirle a pthread_create() que use los valores por defecto. El tercer parámetro es el nombre de la función a la cual el thread ejecutará. El cuarto parámetro es un argumento a ser pasado a la función. Es posible notar el casting al tipo 'void*'. Esto no es requerido por la sintaxis de ANSI-C, pero es mencionada para clarificar su uso. 3. El lazo del delay dentro de la función es usado sólo para demostrar que los threads son ejecutados de forma paralela. Se recomienda dar un delay mayor si la velocidad de su CPU es demasiado rápida, de esta forma podrá ver las impresiones de cada thread uno antes del otro. 4. La llamada a pthread_exit() causa que el thread en ejecución termine y libere sus recursos. No hay necesidad de utilizar esta llamada al final de la ejecución de la función que se invoca, ya que al terminar la ejecución el thread automáticamente terminará. Esta función es útil cuando deseamos terminar la ejecución de un thread a la mitad de su corrida. Para poder compilar un programa multi-threaded usando gcc, se debe linkear con la librería pthreads. Asumiendo que la librería ya está instalada en el sistema, el siguiente comando compilará nuestro primer programa: gcc create.c -o create -lpthread TERMINACIÓN Y CANCELACIÓN DE THREADS Tal como se crearon los threads, también se debe pensar en la terminación de los mismos. Existen diversas consideraciones a tener en cuenta. Se debe poder terminar la ejecución de un thread de forma clara y limpia. A diferencia de los procesos, para los cuales se utiliza un método de envíos de señales, el diseño de la librería de threads es un poco más compleja, permitiendo cancelar threads y realizar finalizaciones limpias de los mismos. CANCELANDO UN THREAD Cuando se quiere terminar un thread, se debe utilizar la función pthread_cancel. Esta función toma un ID de thread como parámetro y envía un requerimiento de cancelación 3
4 al thread. Lo que hace el thread con el pedido de cancelación dependerá de su estado. Puede finalizar inmediatamente, esperar a encontrar un punto de cancelación o bien ignorarlo. Uso de la función de cancelación: Se debe asumir que 'thr_id' es una variable del tipo pthread_id conteniendo el ID de un thread que está ejecutándose: pthread_cancel(thr_id); La función pthread_cancel() retorna 0, por lo que no se sabe si terminó erróneamente o no. SETEANDO EL ESTADO DE CANCELACIÓN DE UN THREAD El estado de cancelación de un thread puede ser modificado usando varios métodos. El primero es mediante el uso de la función pthread_setcancelstate(). Esta función define cuando el thread deberá aceptar el estado de cancelación o cuando no. La función toma dos argumentos. Uno que setea el nuevo estado de cancelación, y otro con el cual se guarda el estado previo de cancelación mediante la función. Se utiliza de la siguiente forma: int old_cancel_state; pthread_setcancelstate(pthread_cancel_disable, &old_cancel_state); Esto deshabilitará la cancelación del thread. También se puede habilitar la cancelación del thread de la siguiente forma: int old_cancel_state; pthread_setcancelstate(pthread_cancel_enable, &old_cancel_state); Es posible notar que se provee de un puntero a NULL como segundo parámetro, y que por ello no se puede obtener el viejo estado de cancelación del thread. Una función similar, llamada pthread_setcanceltype() es usada para definir como un thread responde a un pedido de cancelación, asumiendo que si el estado de cancelación actual es habilitado. Una opción es tratar el pedido inmediatamente (asincrónicamente). La otra forma de tratar el pedido es esperar hasta un punto de cancelación. Para setear la primera opción (cancelación asincrónica) deberemos hacer algo como lo siguiente: int old_cancel_type; pthread_setcanceltype(pthread_cancel_asynchronous, &old_cancel_type); Mientras que para la segunda opción (cancelación diferida): int old_cancel_type; pthread_setcanceltype(pthread_cancel_deferred, &old_cancel_type); 4
5 es posible observar que existe un puntero a NULL como segundo parámetro y que por ello no es posible obtener el viejo estado de cancelación. El lector se preguntará - qué sucede si nunca seteo el estado de cancelación de un tipo thread? En tal caso, la función pthread_create() automáticamente setea el thread al estado de cancelación diferida, esto es, PTHREAD_CANCEL_ENABLE para el modo de cancelación, y PTHREAD_CANCEL_DEFERRED para el tipo de cancelación. USANDO UN THREAD-AWARE DEBUGGER Una última mención a realizar cuando estamos debuggeando una aplicación multithreaded, es necesario usar un debugger que vea los threads en el programa. La mayoría de los debuggers actuales que vienen en los ambientes de desarrollo comercial son thread-aware. En tanto que en Linux, gdb es el debugger que acompaña a la mayoría de las distribuciones, y el cual normalmente no es thread-aware. Existe un proyecto, llamado 'SmartGDB', que agrega soporte para threads al gdb. Por más información recomendamos dirigirse al sitio O también a la siguiente dirección LinuxThreads homepage ( ). EJEMPLO DE EJECUCIÓN DEL DEBUGGER El siguiente ejemplo muestra el debugging del archivo denominado create.c, del cual ya hemos mostrado su código fuente. Se compiló el archivo mencionado con GCC, y luego se procedió a debuggearlo con GDB bajo el entorno Linux Fedora (aunque con GDB cabe mencionar que solo podremos observar determinadas aspectos del debugging, como la pila de ejecución y la existencia de dos threads, ya que la versión utilizada no es thread-aware). En el ejemplo se visualizan las líneas de ejecución de consola para el debugging con una pequeña leyenda que va dando una explicación de la secuencia de pasos del programa. También al momento de ejecutar el ejemplo, la cual muestra las diferentes direcciones que toma la variable i de la función do_loop() para cada uno de los threads, complementando de esta forma la visión para la cual se puede apreciar que cada thread tiene su propia pila de ejecución. Corrida del ejecutable correspondiente a create.c [vmware@server1 multi-thread]$ gcc create.c -o create - lpthread [vmware@server1 multi-thread]$./create Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '0' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '1' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '2' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '3' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '4' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '5' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '6' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '0' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '1' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '2' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '3' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '4' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '5' Se compila el fuente con GCC Se ejecuta create Notemos que la variable i para el Thread 2 toma la posición de memoria bfeb1774, mientras que la misma variable para el Thread 1 toma la posición de memoria b7f92a94. Además debemos destacar que las ejecuciones de ambos threads son conjuntas (notar que en 5
6 Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '6' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '7' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '8' Thread '2' - Posicion i en memoria 'bfeb1774' - Valor i '9' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '7' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '8' Thread '1' - Posicion i en memoria 'b7f92a94' - Valor i '9' [vmware@server1 multi-thread]$ la salida por pantalla, existen impresiones de ambos threads alternándose) Podemos preguntarnos entonces PREGUNTA: A que se debe que la variable i asuma diferentes posiciones en memoria? Por qué ocurre esto? Veamos ahora la ejecución dentro del debugger: Nota: Por consultas a los comandos del debugger, escribir en la linea de comandos del mismo help, esto desplegará una lista de opciones a las cuales se podrá acceder para realizar consultas de los comandos disponibles. [vmware@server1 multi-thread]$ gdb create GNU gdb Red Hat Linux (6.0post rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...(no debugging symbols found)...using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb) break main Breakpoint 1 at 0x (gdb) break do_loop Breakpoint 2 at 0x804843a (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x <main+6> 2 breakpoint keep y 0x a <do_loop+6> (gdb) run Starting program: /tmp/jose/multi-thread/create (no debugging symbols found)...[thread debugging using libthread_db enabled] [New Thread (LWP 9789)] (no debugging symbols found)...(no debugging symbols found)...[switching to Thread (LWP 9789)] Breakpoint 1, 0x in main () (gdb) where #0 0x in main () (gdb) next Single stepping until exit from function main, which has no line number information. [New Thread (LWP 9794)] Breakpoint 2, 0x a in do_loop () (gdb) where #0 0x a in do_loop () #1 0x080484d6 in main () (gdb) info threads 2 Thread (LWP 9794) 0x00acc15c in clone () from /lib/tls/libc.so.6 * 1 Thread (LWP 9789) 0x a in do_loop Se ejecuta el programa de debugging para el ejemplo mencionado. Se establece un breakpoint en la función main. Se establece un breakpoint en la funcion do_loop. Se visualiza la información de los breakpoints definidos. Comienzo del proceso de debugging del ejemplo. Se detiene en la función main del Thread 1 (LWP 9789) Posición en donde se detuvo el debugger. Continuo la ejecución. Crea un nuevo Thread (2 LWP 9794) y se detiene en el breakpoint 2 a la entrada del do_loop del Thread 1. Posición de donde se detuvo el debugger. Threads activos. Veamos que el thread 1 es quien esta siendo debuggeado desde la consola, ya que aparece con 6
7 () (gdb) next Single stepping until exit from function do_loop, which has no line number information. Program received signal SIGTRAP, Trace/breakpoint trap. [Switching to Thread (LWP 9794)] 0x b in do_loop () (gdb) where #0 0x b in do_loop () #1 0x00c6d98c in start_thread () from /lib/tls/libpthread.so.0 #2 0x00acc16a in clone () from /lib/tls/libc.so.6 (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x <main+6> breakpoint already hit 1 time 2 breakpoint keep y 0x a <do_loop+6> breakpoint already hit 1 time (gdb) info threads * 2 Thread (LWP 9794) 0x b in do_loop () 1 Thread (LWP 9789) 0x d in do_loop () (gdb) next Single stepping until exit from function do_loop, which has no line number information. '1' '2' '3' '4' '5' '6' '7' '8' '9' Couldn't get registers: No such process. (gdb) where #0 0x c in do_loop () (gdb) next Single stepping until exit from function main, which has no line number information. Program exited normally. (gdb) quit [vmware@server1 multi-thread]$ el signo * a su izquierda. Continuo la ejecución. Cambia al Thread 2. El debugger se detuvo en do_loop del Thread 2, ya que el Thread 1 esta ejecutando do_loop hasta su finalización. Muestro los pasajes por los breakpoints. Muestro el estado de los threads (thread activo y en que lugar se encuentra detenido) Continuo con la ejecución del Thread 2. Muestro donde se encuentra el debugger. Continuo la ejecución del Thread 2 hasta su finalización. Salgo del debugger (notemos que la ejecución del Thread 1 no se ha visualizado en la consola. Ello sucede debido a que la versión del GDB no es thread-aware. 7
8 BIBLIOGRAFÍA 8
Procesos e Hilos en C
Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.
Tutorial de GDB. Algoritmos y Estructuras de Datos II. Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1
Tutorial de GDB Algoritmos y Estructuras de Datos II Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1 Qué es gdb? GNU Debugger Es un depurador para varios lenguajes, incluyendo C y C++. Permite
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una
Herramienta de depuración GNU Debugger (GDB)
PIE Herramienta de depuración GNU Debugger (GDB) 1 Herramienta de depuración GNU Debugger (GDB) Programación para Ingeniería Eléctrica April 30, 2014 1 Introducción Llamamos depurador, debugger, a la herramienta
Concurrencia y paralelismo
Introducción a los Sistemas Operativos Concurrencia y paralelismo 1. Ejecución de programas. Procesos. 2. Multiprogramación Bibliografía Silberschatz and Galvin Sistemas Operativos. Conceptos fundamentales.
DEPURADOR GDB. Debugging de programas complejos con múltiples archivos.
Introducción DEPURADOR GDB GDB es el source debugger de GNU. Es un poderoso debugger que permite "ver" que esta sucediendo dentro de programas escritos en C, C++ y Modula-2. Entre las capacidades más notorias
Sistemas Operativos Práctica 3
Sistemas Operativos Práctica 3 Ing. Andrés Bustamante [email protected] Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que
Manipulación de procesos
Manipulación de procesos Las primeras computadoras solo podían manipular un programa a la vez. El programa tenía control absoluto sobre todo el sistema. Con el desarrollo vertiginoso del hardware ese panorama
Guía práctica de estudio 11: Funciones
Guía práctica de estudio 11: Funciones Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 11: Funciones Objetivo: Elaborar
Tema: Clases y Objetos en C#. Parte II.
Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y
Manual de Usuario. Aplicación de Autoevaluación de Centros
Manual de Usuario Aplicación de Autoevaluación de Centros Índice Antes de Comenzar 3 Requisitos del Sistema 4 Instalación de la Aplicación 5 Pasos Previos 5 Manejo de la Aplicación 6-2 - Antes de Comenzar
Tema 13: Apuntadores en C
Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción
Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C
Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales
La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.
Manual de Dev-C++ 4.9.9.2 Página 1 de 11 Introducción Dev-C++ es un IDE (entorno de desarrollo integrado) que facilita herramientas para la creación y depuración de programas en C y en C++. Además, la
Threads, SMP y Microkernels. Proceso
Threads, SMP y Microkernels Proceso Propiedad de los recursos a un proceso se le asigna un espacio de dirección virtual para guardar su imagen Calendarización/ejecución sigue una ruta de ejecución la cual
Qué es un programa informático?
Qué es un programa informático? Un programa informático es una serie de comandos ejecutados por el equipo. Sin embargo, el equipo sólo es capaz de procesar elementos binarios, es decir, una serie de 0s
En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.
El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. En este artículo vamos a conocer los tipos de datos
Taller de Sistemas Operativos. Módulos del kernel
Taller de Sistemas Operativos Módulos del kernel Módulos El kernel de Linux es modular ya que permite la inserción y eliminación dinámica de código en el kernel en tiempo de ejecución. Las subrutinas asociadas,
Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos
T5-multithreading. Indice
T5-multithreading 1.1 Indice Proceso vs. Flujos Librerías de flujos Comunicación mediante memoria compartida Condición de carrera Sección Crítica Acceso en exclusión mutua Problemas Abrazos mortales 1.2
Programación Avanzada
Programación Avanzada Instructivo de Compilación 1 1 Índice 1 ÍNDICE... 2 2 INTRODUCCIÓN... 3 3 HERRAMIENTAS... 3 3.1 SINTAXIS DE LOS COMANDOS GCC Y G++... 3 3.2 OTRAS HERRAMIENTAS:... 4 3.3 EJEMPLOS:...
Elementos esenciales de Word
Word 2013 Elementos esenciales de Word Área académica de Informática 2015 Elementos esenciales de Word Iniciar Microsoft Word 2013 Para entrar en Microsoft Word 2013 Haz clic en el botón Inicio para ir
Principios de Computadoras II
Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo [email protected] Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación
Fundamentos de Ordenadores. Depurar programas usando Nemiver
Fundamentos de Ordenadores Depurar programas usando Nemiver Departamento de Arquitectura de Computadores Autor: Mario Macias. Fecha de elaboración: 16/10/2015 1 Manual básico Nemiver Nemiver es un sencillo
Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C
Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS Departamento de Ciencias de la Computación e IA Subprogramas en C Objetivo Una vez que tengamos un programa que resuelva un problema concreto, ser capaces de usarlo
TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013
TADs en C Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 1. Objetivos Definición de TADs en C Ocultación de la implementación del TAD Manejo básico de memoria dinámica 2. Usando
Generar Temas de Colores y Cambiarlos Dinámicamente en ZK
Generar Temas de Colores y Cambiarlos Dinámicamente en ZK Hola, mi nombre es Manuel Martínez y soy de Colombia. Voy a explicarles desde cómo construir temas de colores para las interfaces graficas de ZK
Tema 3. Aplicaciones de Tipo Consola
Tema 3. Aplicaciones de Tipo Consola Una aplicación de consola es aquella que se ejecuta dentro de una ventana de línea de comandos. Este tipo de ventana recibe diferentes denominaciones: Símbolo del sistema,
Estructuras de Datos Declaraciones Tipos de Datos
Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación
Elementos de un programa en C
Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución
Tema 6. Gestión dinámica de memoria
Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, [email protected] Estructuras de datos y de la
C# para no Programadores
C# para no Programadores Programa de Estudio C# para no Programadores Aprende a programar con una de las tecnologías más utilizadas en el mercado de IT. Este curso está orientado a quienes no tienen experiencia
El lenguaje de Programación C. Fernando J. Pereda <[email protected]>
El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por
Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.
Tema 2 : entorno programación linux Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Francisco J. Santana 1 Programación
PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos
ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos Contenido Introducción...1 Objeto...2 Atributo...2 Métodos...2 Clase...3
Modelos Comprimidos. Modelo de Bloque 3D Standard
Modelos Comprimidos Introducción Una vez que ha creado un modelo de bloques en 3D estándar (3DBM), ya tiene una ideas del tamaño y forma generales del cuerpo mineralizado. En este punto, conviene afinar
Manual de Usuario/a sobre el uso de firma electrónica avanzada
Manual de Usuario/a sobre el uso de firma electrónica avanzada en el e-seia. Versión 1.1 Año 2013 1. Introducción... 3 2. Visualización de documentos... 3 3. Validación de documentos... 4 4. Instalación
Introducción a C++ y Code::Blocks
Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete
ING. JONATHAN QUIROGA TINOCO. Desarrollado por Ing. Jonathan Quiroga T.
ING. JONATHAN QUIROGA TINOCO PARTE III EDITOR DE PROGRAMA Los participantes manejarán el software de programación para editar, verificar, monitorear el diagrama de escalera y comunicarse con el PLC de
PADRÓN GENERAL DE IMPORTADORES Y SECTORES ESPECIFICOS (PGIySE)
PADRÓN GENERAL DE IMPORTADORES Y SECTORES ESPECIFICOS (PGIySE) Manual de Usuario Agente Aduanal 1 1. Descripción... 3 2. Glosario... 3 3. Consideraciones Previas... 3 4. Acceso al Portal... 4 5. Evaluar
Aprendiendo a depurar código
Aprendiendo a depurar código Borja Bergua Guerra Grupo de Usuarios de Linux de la UC3M 13 de Marzo de 2008 Parte I Valgrind Valgrind - Tipos de error Tipos de error Lecturas/escrituras ilegales Uso de
Generador de analizadores léxicos FLEX
Generador de analizadores léxicos FLEX Procesadores de Lenguajes 4 o Informática PL curso 2008-2009 (CCIA) CCIA Octubre 2008 PL 0809 (CCIA) Introducción a FLEX Octubre-2008 1 / 12 Uso de FLEX FLEX: traduce
Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos
Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad
Depuración de Node.js (práctica)
Depuración de Node.js (práctica) Tiempo estimado: 45min El objeto de esta práctica es afianzar, reforzar y consolidar los conocimientos teóricos presentados en la lección. Al finalizarla, el estudiante:
Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación
1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos
Acceso a Datos con Visual Basic
Capítulo 1: Definición del Proyecto Acceso a Datos con Visual Basic Sin duda alguna, que uno de los lenguajes más potentes para manejo de bases de datos es Microsoft Visual Basic.Net, por lo cual en esta
Serialización de datos en C# en Binario, Soap y Xml
Serialización de datos en C# en Binario, Soap y Xml Quizás muchos desarrolladores hayan escuchado hablar del termino serializar la información y no saber de que se trata. Pues bien, resulta que la serialización
Mi primer programa en Code::Blocks
Mi primer programa en Code::Blocks Introducción a la Computación Departamento de Computación - FCEyN - UBA Primer cuatrimestre de 2010 1. Antes de empezar 1.1. Cómo instalo el Code::Blocks en una computadora?
Aplicativos: Cómo se realiza la descarga e instalación de Aplicativos AFIP?
Aplicativos: Cómo se realiza la descarga e instalación de Aplicativos AFIP? La AFIP pone a su disposición los aplicativos necesarios para cumplir con la presentación de las declaraciones juradas y la gestión
Programación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Lenguaje de Programación: C++ GLUT (como instalarlo)
UG C++ Lenguaje de Programación: C++ GLUT (como instalarlo) Universidad de Guanajuato Noviembre 2010 Inicializar GLUT Lo primero que debemos mandar llamar en un proyecto con la librería GLUT es: void glutinit(int
Métodos que devuelven valor Dado el siguiente triángulo rectángulo:
Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán
DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA
DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA Nombre del Módulo: PROGRAMACIÓN EN JAVASCRIPT Código: CSTI0087 total: 51 Horas Objetivo General: Crear contenido web basado en
Avance - Soluciones Informáticas Página 1 de 17
Software de Liquidación de SUELDOS Avance - Soluciones Informáticas Página 1 de 17 Información General del Programa Gracias por elegir nuestro software. A-Sueldos es un sistema para la liquidación de sueldos
Guía de uso del programa AVR-Studio
Guía de uso del programa AVR-Studio El entorno de desarrollo AVR-STUDIO nos permite cargar, ensamblar y depurar los programas que escribimos en lenguaje ensamblador. Los pasos para crear un proyecto nuevo
Guía rápida de uso de Visual Sueldos
Guía rápida de uso de Visual Sueldos Aquí podemos observar la pantalla principal del sistema, en la parte superior o barra de botones, se encuentran todas las opciones disponibles. En la parte inferior
Decenio de las personas con Discapacidad en el Perú Año de la consolidación del Mar de Grau
Procedimiento para obtención de Cita en Línea para el trámite de Pasaporte Electrónico A continuación se describe el procedimiento para la obtención de la Cita en Línea el trámite el Pasaporte Electrónico
Tema 2 Introducción a la Programación en C.
Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes
de Gran Canaria Centro de Tecnología Médica Programación Concurrente
Universidad de Las Palmas de Gran Canaria Centro de Tecnología Médica http://www.ctm.ulpgc.es Tema 1: Introducción a la Escuela Técnica Superior de Ingenieros de Telecomunicación Conceptos Fundamentales
Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia
Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877 Objetivo: Conocer la estructura y características de la tarjeta con un microcontrolador PIC que se dispone
Una introducción al compilador C de GNU
Una introducción al compilador C de GNU Héctor Adrián Valdecantos Departamento de Ciencias de Computación Facultad de Ciencias Exactas y Tecnología - UNT Materia: Programación Carrera: Programador Universitario
Práctica 2: Eclipse como Entorno Integrado de Desarrollo e Introducción al manejo de excepciones.
Práctica 2: Eclipse como Entorno Integrado de Desarrollo e Introducción al manejo de excepciones. Software Necesario Eclipse IDE Ejecución de la práctica 1. Descomprima el archivo eclipse-sdk-3.0.1-win32.zip
INSTITUTO ELECTORAL DEL ESTADO DE MÉXICO SECRETARÍA EJECUTIVA UNIDAD DE INFORMÁTICA Y ESTADÍSTICA
INSTITUTO ELECTORAL DEL ESTADO DE MÉXICO SECRETARÍA EJECUTIVA UNIDAD DE INFORMÁTICA Y ESTADÍSTICA Guía de uso del Correo Electrónico Institucional Outlook Web App. Noviembre de 2014 Correo Electrónico
Lección: Lenguaje de Programación JULIA
Lección: Lenguaje de Programación JULIA ICI3140 Métodos Numéricos Profesor : Dr. Héctor Allende-Cid e-mail : [email protected] JULIA Julia is a highlevel, high-performance dynamic programming language
Tema: Introducción al IDE de Microsoft Visual C#.
Tema: Introducción al IDE de Microsoft Visual C#. Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express mientras crea el formulario más
Manual de Usuario. HISMINSA Sistema de Gestión Asistencial (Versión Offline para XP) Ministerio de Salud del Perú Todos los Derechos Reservados
Manual de Usuario HISMINSA Sistema de Gestión Asistencial (Versión Offline para XP) Ministerio de Salud del Perú 2015 - Todos los Derechos Reservados Introducción El Ministerio de Salud del Perú a través
Office 365 Pro Plus ACTVACIÓN EN EQUIPOS COMPARTIDOS
Office 365 Pro Plus ACTVACIÓN EN EQUIPOS COMPARTIDOS La activación en equipos compartidos permite implementar Office 365 ProPlus en un equipo de la organización a los que varios usuarios tienen acceso.
Oracle Database: Programación con PL/SQL
Oracle University Contact Us: 0800-100-4183 & 0800-100-6854 Oracle Database: Programación con PL/SQL Duration: 5 Days What you will learn Este curso ofrece una introducción sobre PL/SQL y enumera la lista
Diagramas de secuencia
Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Fragmentos Combinados: caminos alternativos Departamento de Ingeniería de Sistemas y Computación - Universidad
Funciones básicas del depurador
Funciones básicas del depurador Con frecuencia, los alumnos piensan que cuando su programa no tiene errores de compilación (está correctamente escrito) entonces ya es correcto. Muchas veces esto no es
Explicación didáctica sobre comandos de Linux: Comandos de Inicio
Explicación didáctica sobre comandos de Linux: Comandos de Inicio 1.- Introducción De todos es bien sabido el auge tan importante que está teniendo en la actualidad el software libre, concretamente el
Tutorial MPLAB v6.x PROYECTO. Creación de Proyecto
Tutorial MPLAB v6.x PROYECTO Creación de Proyecto Un proyecto es un conjunto de archivos fuente e instrucciones que permiten construir el objeto y código ejecutable para una aplicación. Para crear un nuevo
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.
Escuela Politécnica Superior de Elche
EXAMEN DE SISTEMAS INFORMÁTICOS INDUSTRIALES ((SOLUCIÓN) (TEORÍA)jUJ jhshshs SEPTIEMBRE 2015 1. Indicar si las siguientes afirmaciones son verdaderas o falsas: (a) En C++, una clase derivada puede acceder
1. Introducción Generalidades Configuración del Equipo Instalación de Java... 3
Ú CONTENIDO 1. Introducción... 2 2. Generalidades... 2 3. Configuración del Equipo... 3 3.1 Instalación de Java... 3 3.2 Instalación de la aplicación AutoFirma... 12 3.3 Desarrollo de un proceso de firma
MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C
MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C Antes de comenzar a desarrollar aplicaciones podemos crear el programa en cualquier editor de textos, solo hay que guardarlo con la extensión X.c
Introducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
MPB Mouse por Barrido
MPB Mouse por Barrido Versión 3.0 Objetivo 2 Forma de uso 3 Agregar un usuario 4 Opciones 5 Conexión del switch 5 Velocidades 6 Movimientos y clics 7 Posición de la ventana 7 Eliminar usuarios 8 Recomendaciones
ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C
2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing.Karina Esquivel Alvarado. Asignatura: Programación II. ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C OBJETIVOS: Conocer
SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC
SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC INTRODUCCIÓN Los subprogramas son otro tipo de bloques PL/SQL Se diferencian de los bloques anónimos porque
Ejecuta el modo XP sin virtualización de hardware
Una de las características más limpias nuevo en Windows 7 orgánico y categorías superiores es el modo de XP, pero no todas las máquinas son capaces de ejecutarlo. Hoy te mostramos cómo utilizar VMware
EJERCICIO 26 DE EXCEL
EJERCICIO 26 DE EXCEL TABLAS EN EXCEL Tablas En las versiones anteriores de Excel esta característica se conocía como Listas, ahora en esta nueva versión se denomina Tablas. Las tablas facilitan la administración
ACCIONES Photoshop. Primero explicaremos brevemente que son las Acciones de Photoshop y cómo utilizar esta interesante utilidad. Acciones Photoshop
ACCIONES Photoshop Uno de los problemas que mas echa para atrás a mucha gente a la hora de procesar archivos en Photoshop, especialmente cuando estos requieren procesados complejos, es el tiempo que requiere
Java desde Consola Utilizando Java sin Path
1 Utilizando Java sin Path Una vez hayamos instalado el JDK (Java Development Kit) ya estamos en capacidad de crear y hacer funcionar algunos códigos sencillos. Para esto utilizaremos como entorno de programación
Seagate Extended Capacity Manager
Seagate Extended Capacity Manager Seagate Extended Capacity Manager (ECM) permite que su sistema operativo (SO) pueda admitir discos de gran capacidad con estilo de partición MBR. Después podrá utilizar
ATRIBUTOS DE LOS FICHEROS EN LINUX
PRÁCTICA 2 ATRIBUTOS DE LOS FICHEROS EN LINUX Objetivos Noción de inodo. Enlaces simbólicos y no simbólicos. Descripción de los atributos de un fichero. Permisos de un fichero. 1. Noción de inodo A cada
Introducción. Word Autor: Viviana M. Lloret Prof. de Matemática e Informática Blog: aulamatic.blogspot.com
Introducción Word 2003 Autor: Viviana M. Lloret Prof. de Matemática e Informática Blog: aulamatic.blogspot.com Procesador de Textos Un procesador de texto es un software informático utilizado para la creación
PROYECTO 2 Parte 1 BASES DE DATOS. Curso (2 Semestre) Grupos 4F2M y 4F1M-1 (aula 5102) CONSULTAS REMOTAS EN JAVA A UNA BASE DE DATOS
PROYECTO 2 Parte 1 BASES DE DATOS Curso 2014-15 (2 Semestre) Grupos 4F2M y 4F1M-1 (aula 5102) CONSULTAS REMOTAS EN JAVA A UNA BASE DE DATOS Pág. 1 de 8 1. Objetivos Generales Acceder a una Base de Datos
Archivos Datanet. Si desea acceder directamente a un capítulo, posicionese sobre el número de página y haga clic.
Archivos Datanet Archivos Datanet...1 Download Automático de SIB...2 Requisitos para el uso...2 1. Contratación del servicio:...2 2. Alta de un Operador de Sistema :...2 3. Instale el programa:...6 AutoSIB...9
Seleccione en el escritorio el programa Sucosoft S40 y darle doble click.
Programación y manejo de Sucosoft S40: Cómo Programar? Seleccione en el escritorio el programa Sucosoft S40 y darle doble click. Aparece una ventana denominada administrador Sucosoft en la cual se encuentra
Manual de Instrucciones Definición de Componentes y Registro de Notas Parciales
Oficina Central de Informática y Telecomunicaciones Departamento de Programación y Desarrollo de Sistemas Manual de Instrucciones Definición de Componentes y Registro de Notas Parciales Versión 1.0 ÍNDICE
