Conceptos Básicos de Programación

Slides:



Advertisements
Presentaciones similares
¿Qué es un Diagrama de Flujo? UN DIAGRAMA DE FLUJO, TAMBIÉN LLAMADO FLUJOGRAMA DE PROCESOS O DIAGRAMA DE PROCESOS, REPRESENTA LA SECUENCIA O LOS PASOS.
Advertisements

¿Que es PHP? PHP Hypertext Preprocessor Y solo porque me quiero hacer el profesor cool y meter un chiste: PHP también significa: Para Hacer Páginas.
UNIVERSIDAD FERMIN TORO CABUDARE ENSAYO TIPOS DE SOFTWARE E IMPORTANCIA JUNIO 2014.
ALGORITMOS DE PLANIFICACIÓN ADRIÁN MINGA BRYAN PIEDRA JEREMY CHAMBA.
Pruebas de Funcionalidad de Software: Caja Negra y Caja Blanca Curso: Diseño de Sistemas 9no. Semestre.
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.
Ingreso , proceso y salida de datos
L. S. C. A. Raúl Monforte Chulin
Convenciones de nomenclatura y diseño
Estructuras de Control en Visual Basic.net
Capítulo 5 Web Workers.
Programación orientada a objetos
SISTEMAS OPERATIVOS Sección Crítica.
PHP Hypertext Preprocessor
Mecanismos de Comunicación usando Paso de Mensajes
Procesos Concurrentes
Programación Orientada a Objetos
“POLIMORFISMO PARAMETRICO”
Paul Leger Procesos (capitulo 2) Paul Leger
Conceptos Básicos de Programación
Exclusión mutua de secciones
Conceptos Básicos de Programación
Programación Básica con NQC
Introducción a programación web Martin Esses
COMPUTADORA Una computadora es una colección de circuitos integrados  y otros componentes relacionados que puede ejecutar con exactitud, rapidez y de.
Programación orientada a objetos
Novell Netware Autores: Cerrina Maria Josefina, Coto Marcelo,
L.I. Gerardo Ortiz Rivera
Modelo de 3 capas. Qué es la arquitectura de una aplicación? La arquitectura se refiere a la forma en la que es diseñada tanto física como lógicamente.
LÓGICA DE PROGRAMACIÓN
Introducción a las estructuras de datos
PROCESOS COMENZAR.
INTRODUCCIÓN A JAVA.
Conocer los fundamentos de la programación estructurada
SISTEMAS OPERATIVOS APRENDICES Diana Carolina Chacón
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
FUNDAMENTOS DE PROGRAMACION EN ENTORNO WEB. Rodrigo Cabello Ing. Informático Director de proyectos Think – Ideas in Motion FUNDAMENTOS.
HERRAMIENTAS DE PROGRAMACIÓN
A RQUITECTURA C LIENTE - SERVIDOR La arquitectura del cliente servidor se divide en dos partes Los promovedores de recursos o servicios llamados servidores.
Ciclo de vida del Software
La escritura de programas que interactúen directamente con los componentes hardware de un computador es una tarea bastante tediosa. Por otra parte, si.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS.
ABSTRACCION DE DATOS   Estructura de Datos Básicos: En programación una estructurad de datos, es una forma particular de organizar datos en una computadora.
Tema: Componentes lógicos de un ordenador. Mediante el sistema de numeración binario, es decir, usando los dígitos 0 y 1. Lo único que transmite,
“Conceptos Básicos de Java”
Estructura de Sistemas Operativos CAMPOS CHACALTANA, ANTHONY.
Estructura de los sistemas Operativos 1. Componentes de un sistema operativo  Administración de procesos  Administración de memoria  Subsistema de Entrada/Salida.
Estructura de los Sistemas Operativos Alumna:Arratea Almeyda Aracelli.
EJECUCION PARALELA THREADS Y FIBERS
ESTRUCTURA DE SISTEMAS OPERATIVOS Carbajal Rojas karla.
Algunas Características de C++ no presentes en C
GC-F-004 V.01 CENTRO DE INDUSTRIA Y LA CONSTRUCCIÓN REGIONAL TOLIMA.
Curso Redes (IS20) -Capítulo 5 1 Redes (IS20) Ingeniería Técnica en Informática de Sistemas Práctica 3- Estudio de tráfico sobre LAN
Núcleo Lic. Gonzalo Pastor.
SISTEMAS OPERATIVOS JOSE ANGEL MORENO B. Ingeniero de Sistemas TP # Copnia Universidad Incca de Colombia CORPORACI Ó N UNIVERSITARIA REMINGTON.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS CHACALIAZA BOZA MARGARET AMARLLY.
Estructura de los SISTEMAS OPERATIVOS.
UNIVERSIDAD PRIVADA SAN JUAN BAUTISTA FILIAL CHINCHA ESCUELA PROFESIONAL DE INGENIERÍA DE COMPUTACIÓN Y SISTEMAS Por: Nestares Torres Luis Jesús Enrique.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS CHACALIAZA BOZA MARGARET AMARLLY.
Estructura de Sistemas Operativos
Ha llegado el momento de dar una mirada al interior de los Sistemas Operativos. En las siguientes secciones examinaremos cuatro estructuras distintas.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS. Estos sistemas no tienen una estructura definida, sino que son escritos como una colección de procedimientos donde.
Estructura de los Sistemas Operativos
Estructura de los Sistemas Operativos por: Omar Saravia Tasayco
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

Conceptos Básicos de Programación RoboSim Conceptos Básicos de Programación

Tecnologías en Robosim Comunicaciones TCP-IP Necesitamos utilizar cadenas alfanuméricas y las librerías de comunicaciones. Programación distribuida Necesitamos utilizar objetos de sincronismo y librerías para la gestión de threads. Inteligencia Artificial Necesitamos utilizar estructuras de datos y variables dinámicas.

Razones para Multi-hilo Desarrollar un programa multi-hilo (multi-thread) es más complicado que uno monohilo, así pues ¿Por qué es necesario? Respuesta 1: La función recv (o read) detiene la ejecución del programa hasta que se recibe la información. Respuesta 2: Si la información recibida por el socket no se procesa (se ejecuta inmediatamente recv ó read), esta información se acumula => Necesitamos 1 hilo escuchando el puerto permanentemente.

¿Qué es multitarea? “Una ilusión”. La mayor parte de los ordenadores son monotarea. Nota: A partir de los PCs multi-core esto ya no es cierto. Los modernos procesadores (de la familia dual core y superior) son efectivamente multitarea. La multitarea consiste en repartir el tiempo de ejecución entre los procesos e hilos que se estén ejecutando, de forma que, aparentemente, se ejecutan todos a la vez. Nota: En ordenadores multi-core, se reparte entre los distintos cores del sistema. Existen programas llamados “scheduler ” que se encargan de repartir el tiempo de ejecución (en slots de ejecución dedicados a un hilo o proceso). Un scheduler es un gestor de procesos e hilos.

Pero ¿Qué es un hilo? Consideremos un programa para línea de comandos en C, ese programa tiene un “punto de invocación”: la función main y es monotarea porque se ejecutan cada sentencia de ese main secuencialmente. Sólo se empieza una sentencia cuando ha acabado la anterior. Diseñemos una tarea específica e implementemos una función con ella. Invoquemos a esa función, pero dejemos que esa función se ejecute como si fuese un programa “aparte” y por tanto que el main siga su propia ejecución si espera a la finalización de la función. Ya tengo un hilo (un thread).

Arrancar un hilo Para arrancar un hilo es necesario: En Windows: Una función con las sentencias del hilo. Una forma de invocar la función que no sea una simple llamada. Es decir, usar el gestor de hilos. En Windows: CreateThread (está en la API de Windows) Con parámetros “importantes”: El “punto de invocación” (es decir, la función) Un parámetro opcional para esa función. Otros parámetros: prioridad, tamaño de stack, …

Compartir Datos entre Hilos Normalmente los hilos deben compartir información. Los procesos de acceso y escritura de variables (especialmente cuando son compuestas) puede llegar a repartirse entre slots de ejecución. Si esto ocurre y 2 hilos entran a acceder o modificar la misma variable se producen errores. Por tanto, es necesario gestionar el acceso y modificación de datos compartidos entre hilos => sincronización de hilos. Terminología: Recursos  Variables, datos, archivos...

Sincronización de Hilos Idea fundamental: Semáforo. Impedir el acceso a un “recurso” de 2 hilos a la vez. Cuando un hilo accede al recurso “bloquea” el acceso del resto de recursos. Ver “sincronización de hilos” Implementación: Antes del código de acceso-modificación se hace una petición de bloqueo-espera. Si se concede se pasa a ejecutar el código y se bloquea el semáforo para el resto de hilos. Si no se concede el hilo se bloquea (se detiene su ejecución) hasta que se libere el semáforo. Tarde o temprano se liberará el semáforo y se ejecuta el código “conflictivo”. Cuando se acaba el código se debe liberar el semáforo.

¿Dónde se colocan? En primer lugar es necesario conocer (o diseñar) con claridad los “recursos” (es decir, las variables, datos o archivos) compartidos entre hilos. Si el recurso está preparado no es necesario hacer nada (no es el caso corriente, pero existen). Se suelen decir que son implementaciones multithread. En caso contrario, se debe: Declarar y compartir entre hilos un objeto de sincronismo (un semáforo). Siempre que se acceda (se use el valor del recurso) o se modifique en cualquier hilo se debe colocar el semáforo (la petición-bloqueo-espera y la liberación-desbloqueo).

Objetos de Sincronismo En Windows: Mutex (RS_Server utiliza estos) Critical Sections Events (RS_Server también utiliza estos) … En otros sistemas: Nombres parecidos, pero cuidado, el mismo nombre de objeto de sincronismo puede representar distinto tipo de “semáforo” en otro sistema o librería.

Bloqueo y Liberación La petición de bloqueo y la liberación se hacen a través de funciones (o métodos, interfaces, …) que tienen como parámetros el objeto de sincronismo. Por ejemplo: WaitForSingleObject (espera y bloquea un objeto de sincronismo) ReleaseMutex (libera un objeto de sincronismo tipo mutex)

Compartir memoria entre hilos No siempre se pueden compartir datos en memoria entre hilos o procesos (hay que consultar la documentación del sistema). Generalmente la memoria se comparte en la zona de heap (variables dinámicas, suele ser común para todos los hilos de un proceso), las zonas de stack (variables locales de las funciones) de los hilos suelen estar separadas.

Separación de Hilos Una técnica para separar hilos consiste en: Suministra Información Gestor de Mensajes Hilo Procesa Información Cada caja es un hilo El gestor de mensajes se protege para multitarea Cada hilo pone información (push) o la retira cuando le viene bien Ver patrones de diseño (design patterns): observer, push and pull models

Sincronización vía Pila de Mensajes Cuando la comunicación entre hilos es muy frecuente es muy útil utilizar una “pila de mensajes” (mala tradución de message queuing en realidad es una cola). La idea consiste en enviar información (un mensaje) a otro hilo de forma asíncrona (es decir, en cualquier momento y sólo opcionalmente esperando una respuesta). El hilo que recibe almacena los mensajes en una estructura tipo “cola” o FIFO. Procesa los mensajes sacándolos de la fifo en un bucle infinito que no hace nada si no hay mensajes pendientes de resolver.

Implementación de la pila de mensajes Se necesita: Una estructura tipo lista común a todos los hilos con una operación de inserción al final y otra de extracción del primer elemento y preparada para multihilo mediante semáforos. Un bucle infinito que compruebe si la lista está vacía y si no lo está quite el primer elemento y lo procese. Alternativamente podemos usar el message queuing de Windows (esta es la opción que se usa para comunicar RS_Server y RS_Visual y algunos hilos dentro de RS_Server). Útil si utilizáis distintos tipos de control a largo y corto plazo para comunicar sus algoritmos. Ver patterns: Observer, push and pull models.

Otra técnica para mejorar la sincronización Compare-and-swap Aunque la implementación de esta técnica es bastante compleja podemos usar la idea subyacente para mejorar el inter-bloqueo de nuestros algoritmos. Podemos: Usar varios “recursos” de un mismo tipo (quizás tantos o más como hilos), los apuntamos con distintos punteros. Lo normal es que el recurso sea una estructura de datos, por ejemplo, una lista. Cada hilo actúa sobre un puntero distinto y cuando acaba intercambiamos los punteros.

¿Y que hago con mis hilos? Los hilos los introducimos si queremos realizar tareas concurrentes (a la vez) y no queremos ocuparnos de distribuir el tiempo de ejecución nosotros mismos (cosa complicada por otro lado). Cada hilo debería realizar una tarea distinta. Muchos hilos pueden funcionar en bucles infinitos. Simplemente hay que asegurarse que el schuduler es capaz de suspender la ejecución de ese hilo y pasar al siguiente (en ocasiones hace falta poner un sleep).