Secretos de la Programación Concurrente
|
|
|
- María Soledad Margarita Velázquez Rico
- hace 10 años
- Vistas:
Transcripción
1 Secretos de la Programación Concurrente Stuart Perez, Luis Castro Autómatas y Compiladores, Escuela de Ciencias de la Computación e Informática, San Pedro de Montes de Oca, Costa Rica [email protected] ; [email protected] Abstract. Este articulo refiere a las practicas comúnmente utilizadas para la construcción de programas con procesamiento concurrente, esto es, utilización de varios núcleos para el procesamiento de los datos. Keywords: Programación, multiprocesador, hilos, sincronización 1 Introducción "Divide et vinces" La frase celebre del Emperador Julio Cesar, que significa, Divide y Vencerás se yergue como una máxima para el mundo de la programación de nuestros días. la multiprogramación, una técnica para entrelazar la ejecución de varios programas, se ha convertido en la solución ideal para reducir los tiempos de ejecución, así como para aprovechar al máximo las cualidades de los procesadores multinucleo de la nueva era. Esta técnica nació ya hace varios años y tiene sus principales raíces en la construcción de sistemas operativos, con ella, vieron la luz términos como procesos e hilos, sincronización, tiempo compartido de procesador y muchos otros. El presente articulo esta orientado a repasar los principales conceptos de la multiprogramación, así como varias de sus técnicas y uno que otro secreto, que nos ayuden a conocer mas este interesante mundo, que se encuentra, hoy en día, en su máximo apogeo. 2 Técnicas básicas de programación concurrente 2.1 EXCLUSIÓN MUTUA Una forma en la cual podemos lograr que 2 o más procesos de un programa concurrente se comuniquen es usando variables comunes. Este método aunque sencillo nos puede traer problemas. Se pueden presentar errores en el resultado y ejecución del programa ya que el acceso concurrente podría desembocar en que la acción de un proceso sobre la variable común interfiera en las acciones de otro de una forma no adecuada.
2 Veamos un ejemplo: Tenemos 2 procesos (PA, PB) que comparten una variable(x). Los procesos pueden sumar o restar una unidad a la variable. Los procesos comparten la posición de memoria. Supongamos la siguiente sucesión de eventos. - P1 lee la variable x, la coloca en su registro. - P2 lee la variable x, la coloca en su registro. - P2 suma una unidad al registro de x - P1 suma una unidad al registro de x - P1 almacena el valor de su registro en la dirección de memoria de x - P2 almacena el valor de su registro en la dirección de memoria de x Se ve claramente que en esa sucesión de acciones se pierde un incremento de X. este tipo de errores son muy difíciles de encontrar en un programa pues dependen de temporizaciones especificas. Por esto es necesario sincronizar estos procesos para evitar este tipo de errores. Lo logramos identificando las regiones de los procesos que comparten variables con otros procesos y ejecutarlas como si fueran una única instrucción. Se denomina Región Crítica a aquellas partes de los procesos concurrentes que no pueden ejecutarse de forma concurrente o, también, que desde otro proceso se ven como si fueran una única instrucción. Esto quiere decir que si un proceso entra a ejecutar una sección crítica en la que se accede a unas variables compartidas, entonces otro proceso no puede entrar a ejecutar una región crítica en la que acceda a variables compartidas con el anterior. Para lograr esto se deben implementar protocolos de software que no permitan el acceso a una región crítica cuando está siendo utilizada por un proceso. 2.2 SEMÁFOROS Dijkstra creó una solución al problema de la exclusión mutua con el concepto de semáforo binario. Los semáforos permiten resolver los problemas de sincronización entre procesos concurrentes y son muy importantes en el diseño de sistemas operativos. Un semáforo binario es un indicador (S) de condición que indica si un recurso puede ser usado o no. Un semáforo binario trabaja de forma muy simple, tiene 2 estados: 0 y 1. Si S = 1 entonces el recurso está disponible, y el proceso lo puede tomar. Si S = 0 el recurso no está disponible y el proceso debe esperar. Además tienen tres operaciones: Inicializar (Init), Espera (wait), Señal (signal) La exclusión mutua se resuelve fácilmente usando semáforos. La operación Espera se usa como procedimiento de bloqueo antes de entrar a ejecutar una región crítica y Señal como procedimiento de desbloqueo.
3 2.3 SINCRONIZACIÓN Utilizando semáforos logramos la sincronización entre dos procesos. Las operaciones Espera y Señal no usan dentro de un solo proceso sino que se dan en dos procesos distintos, el que ejecuta la operación de Espera queda bloqueado hasta que el otro proceso ejecuta la operación de Señal. 2.4 MONITORES Definimos un monitor como un conjunto de procedimientos que proporcionan el acceso garantizando exclusión mutua a un recurso compartidos por un grupo de procesos. Los procedimientos van encapsulados dentro de un módulo que tiene la característica de que sólo un proceso va a estar activo para ejecutar un procedimiento del monitor. Podemos ver a el monitor como una muralla perimetral del recurso, así que los procesos que van a utilizarlo deben entrar al perímetro del recurso, pero solo se puede según las reglas del monitor. Muchos procesos van a solicitar entrar pero sólo se permite que entre un proceso a la vez, los procesos deberán esperar a que salga del perímetro el proceso que se encuentra del otro lado de la muralla para que otro pueda entrar. Si comparamos el uso de un monitor contra el uso de los semáforos: encontramos ventaja en los monitores pues la única acción que debe realizar el programador del proceso que quiere solicitar un recurso es llamar una entrada del monitor. Si el monitor se encuentra programado fielmente no podrá ser mal utilizado por un proceso que quiera acceder al recurso. Todo lo contrario ocurre con los semáforos pues el programador debe proveer la secuencia correcta de instrucciones Espera y Señal. El monitor deberá ser implementado usando manejo de prioridades, para evitar que un proceso en espera de usar el recurso se vea bloqueado indefinidamente por otros procesos. 2.5 MENSAJES Los mensajes se pueden usar como una solución al problema de la concurrencia de procesos que brinda tanto sincronización como comunicación siendo útil para sistemas centralizados y distribuidos. Así es como hoy los vemos en los sistemas operativos soportando las comunicaciones del sistema de un computador o de varios. Se presenta un proceso emisor, un receptor y la información que compone el mensaje. Las operaciones básicas para mensajes son: enviar (mensaje) y recibir (mensaje). Las acciones de transmisión de información y de sincronización se ven como actividades inseparables. El proceso de denominación de las tareas para la comunicación por mensajes se puede realizar de dos formas distintas: directa e indirectamente.
4 Para la comunicación directa los dos procesos nombran de manera explícita al proceso con el que se están comunicando. Las operaciones de enviar y recibir toman la forma: Enviar (Q, mensaje): envía un mensaje al proceso Q Recibir (P, mensaje): recibe un mensaje del proceso P Este sistema brinda mucha seguridad dado que tanto el receptor como el emisor deben conocer con quien se van a comunicar pero a la vez esto se convierte en una visible desventaja. En la comunicación indirecta los mensajes se envían y reciben a través de un intermediario que se llama normalmente buzón o puerto. Un buzón es un objeto en el que los procesos depositan mensajes y donde otros procesos los pueden recoger. Es menos seguro pero ofrece una mayor versatilidad que el nombramiento directo. Esto porque es posible la comunicación 1 a 1, 1 a N, N a 1, y N a M. Cada buzón que exista tendrá una identificación para reconocerlo. Las operaciones básicas de comunicación serán así: Enviar (buzóna, mensaje): envía un mensaje al buzón A Recibir (buzóna, mensaje): recibe un mensaje del buzón A. Las diferencias en los modelos usados para la sincronización de los procesos se deben a las distintas formas que puede tomar la operación de envío del mensaje. a) Síncrona. El proceso que envía sólo prosigue su tarea cuando el mensaje ha sido recibido. b) Asíncrona. El proceso que envía un mensaje sigue su ejecución sin preocuparse de si el mensaje se recibe o no. c) Invocación remota. El proceso que envía el mensaje sólo prosigue su ejecución cuando ha recibido una respuesta del receptor. 2.6 INTERBLOQUEO El interbloqueo es el error más serio que puede ocurrir en programas concurrentes, este consiste en que dos o más procesos entran en un estado que imposibilita a cualquiera de ellos salir del estado en que se encuentra. A dicha situación se llega porque cada proceso adquiere algún recurso necesario para su operación a la vez que espera a que se liberen otros recursos que retienen otros procesos, llegándose a una situación que hace imposible que ninguno de ellos pueda continuar. 2 Aplicaciones Prácticas Aprender a programar de forma paralela no es un simple paseo por el bosque, sin embargo, como toda técnica de programación, es posible llegar a dominarla con el tiempo y sobre todo, con mucha dedicación. Inicialmente el mundo de la programación no estaba diseñado para trabajar con la concurrencia; durante sus primeros años los esquemas de trabajo secuencial gozaron de mucho éxito, y pronto, todo el mundo de la programación continuo con esta
5 tendencia, depurando y perfeccionando el comportamiento de bloque. Distintos paradigmas se pusieron en práctica, bajo la constante idea de la programación secuencial. Los primeros en dar el salto resultaron ser los sistemas operativos, los cuales, en su afán por mejorar los tiempos de respuesta y aprovechar los momentos de ocio en los procesadores, introdujeron técnicas de multiprocesamiento, este procesamiento inicialmente era una simple simulación de paralelismo, ya que, al contar con un único procesador físico, los procesos o hilos debían echar mano al tiempo compartido para hacer uso del CPU. Con el advenimiento de los tiempos modernos, el peligro de alcanzar el límite cuántico, y las limitaciones en los materiales utilizados para la fabricación de procesadores, nace la tendencia de los múltiples núcleos, esto es, computadores con más de dos procesadores, los cuales comparten chaches y memoria principal. Esta nueva concepción dio un una nueva luz de esperanza a la programación en paralelo, ya que resultaba posible (y útil) programar hilos del sistema que tomaran diferentes núcleos para su ejecución. Pero con estas nuevas aplicaciones, llegaron nuevos retos, la multiprogramación se encontró con los conflictos de concurrencia y con la necesidad de asegurar la integridad de los datos, nuevas técnicas de programación debieron ser concebidas, y hasta la actualidad, aun se trabaja en mejorar los métodos de la programación concurrente. Dicho esto, echemos un vistazo breve a las técnicas más populares aplicadas en la multiprogramación. Supongamos que en su primer día de trabajo, su nuevo jefe le solicita construir un programa que le devuelva todos los números primos entre 1 y (no ahondemos en el porqué), usando una maquina con procesamiento paralelo y diez hilos de capacidad. Esta computadora está siendo alquilada al minuto, y entre más se tarde su algoritmo en funcionar, más costoso resultara para la empresa. Cómo lo resolvería? En un principio, es fácil pensar en dividir el trabajo en partes iguales, darle a cada hilo la misma cantidad de entrada, este intento fallaría, ya que los números primos no aparecen de manera uniforme, por ejemplo, hay muchos números primos entre 1 y 10 9 pero muy pocos entre y 10 10, además, el tiempo de procesamiento de cada primo no es el mismo, se tarda más analizando un numero grande que un número pequeño, en otras palabras, no hay motivo para pensar que el trabajo puede ser dividido en partes iguales y tampoco resulta claro cuánto trabajo deberá tener cada hilo. Una manera más prometedora de realizar el trabajo, es asignar un entero a cada hilo a la vez, para esto, resulta necesario utilizar una variable contadora independiente del código de cada hilo. Sin embargo, el uso de esta variable nos puede crear un conflicto mayor e inesperado, supongamos que el hilo A acceda el segmento de código, se le asigna el contador 1 y comienza su ejecución, mientras que en el mismo instante, el hilo B tiene acceso al mismo contador y registra un 1 como su número de inicio. O peor aún, supongamos
6 que el hilo A lee el 1 y antes de aumentar el contador a 2, otro hilo C ha realizado varias iteraciones colocando el contador en 4; cuando el hilo A realiza la escritura, la variable contador estaría siendo disminuida en dos unidades. La raíz de todo este problema resulta ser que, sobre la variable contador es necesario hacer dos distintas operaciones, lectura y escritura, resolver esto consta de tomar una simple decisión, quien va primero y quien va después. En los aspectos prácticos de la programación concurrente, existen muchos acercamientos, muchas teorías y muchas diferentes maneras de hacer las cosas (como vimos en los párrafos anteriores) sin embargo, pocas nos llevan a un resultado optimo. Los diferentes lenguajes de programación han adoptado, con el paso del tiempo, estrategias para el manejo de concurrencia, es así como C++ establece las primeras bibliotecas para el uso de hilos. En este lenguaje, el programador puede desencadenar la creación de procesos hijos de un proceso padre, con la instrucción fork, estos hilos son completamente dependientes de su padre y terminan su proceso cuando este así se los indique. Usualmente, se escribe un segmento de código que será compartido por los diferentes procesos hijos, dentro del mismo, las variables serán comunes a todos y cada uno de ellos tendrá una copia de ellas. Los mecanismos de sincronización utilizados son los mismos observados en la primera parte de este documento, esto con el fin de evitar las posibles colisiones y demás conflictos antes mencionados. 1 class Counter { 2 private int value; 3 public Counter(int c) { // constructor 4 value = c; 5 } 6 // increment and return prior value 7 public int getandincrement() { 8 int temp = value; // start of danger zone 9 value = temp + 1; // end of danger zone 10 return temp; 11 } 12 } Figura 1 En el ejemplo anterior, vemos la declaración de la clase Counter (en java), esta clase seria funcional para la utilización de un solo proceso, sin embargo, al utilizar más de dos hilos sobre este segmento de código, esta implementación se vuelve inestable, ya que ambos procesos podrían acceder indiscriminadamente a la sección marcada con los comentarios // start of danger zone. En el siguiente segmento de código, se utilizará una implementación que soluciona este problema 1 public interface Lock { 2 public void lock(); // before entering critical 3 section
7 4 public void unlock(); // before leaving critical 5 section 6 } 1 public class Counter { 2 private long value; 3 private Lock lock; // to protect critical section 4 5 public long getandincrement() { 6 lock.lock(); // enter critical section 7 try { 8 long temp = value; // in critical section 9 value = temp + 1; // in critical section 10 } finally { 11 lock.unlock(); // leave critical section 12 } 13 return temp; 14 } 15 } Figura 2 El uso de los métodos lock y unlock, eliminan el problema sincronización presentado en el segmento anterior, dentro de las regiones criticas, solo un hilo podrá trabajar a la vez, cuando este finaliza su ejecución, sale de la región critica y esta queda abierta, para que otro proceso haga uso de ella. Sin embargo, para que este sistema tenga efecto, es necesario que cada uno de los hilos presentes tenga cierto formato, para ello, cada hilo debe obedecer a las siguientes reglas: 1. Cada sección critica debe estar asociada únicamente a un método lock() 2. El hilo debe invocar al método lock() cuando está tratando de ingresar a la zona critica y 3. El hilo debe llamar al método unlock() cuando abandone la zona critica. Las regiones condicionales nos aseguran éxito en los tres requisitos de la sincronización, ya que aseguran la exclusión mutua, están libres de deadlocks y no causan inanición. En las siguientes figuras, podremos apreciar un ejemplo del uso de semáforos para controlar el flujo de ejecución de 3 hilos. Lo que se requiere es que el hilo 1 y el 3 siempre ejecuten primero que los hilos 2 y 4. Sin el uso de una estructura de control como los semáforos, asegurar este comportamiento resultaría imposible, ya que el procesador repartiría los tiempos de ejecución a los hilos de manera aleatoria.
8 1 import java.util.concurrent.semaphore; 2 public class p1 extends Thread { 3 protected Semaphore ofinp1; 4 public p1(semaphore ofinp1) { 5 this.ofinp1 = ofinp1; 6 } 7 public void run() { 8 try { 9 sleep((int) Math.round(500 * Math.random() )); 11 } 12 catch (InterruptedException e) { 13 e.printstacktrace(); 14 } 15 System.out.println("P1"); 16 this.ofinp1.release(2); 17 } 18 } Figura 3: Segmento de Código para el hilo p1 Podemos apreciar en la figura 3 el uso de la variable ofinp1 de tipo Semaphore, que se establece con la propiedad protected, además, en la línea 16 vemos el llamado al método release(2), el cual permite liberar el semáforo una vez que la ejecución del hilo halla finalizado 1 import java.util.concurrent.semaphore; 2 public class p2 extends Thread { 3 protected Semaphore ofinp1; 4 protected Semaphore ofinp3; 5 public p2(semaphore ofinp1,semaphore ofinp3) { 6 this.ofinp3 = ofinp3; 7 this.ofinp1 = ofinp1; 8 } 9 public void run() { 10 try { 11 this.ofinp1.acquire(); 12 this.ofinp3.acquire(); 13 } catch(exception e) { 14 e.printstacktrace(); 15 } 16 try { 17 sleep((int) Math.round(500 * Math.random() )); 19 } catch (InterruptedException e) { 20 e.printstacktrace(); 21 } 22 System.out.println("P2"); 23 } 24} Figura 4: Segmento de Código para el hilo p2
9 Para el segmento de código correspondiente al hilo 2, resulta necesario implementar más variables de semáforo, ya que se debe controlar si tanto el proceso 1 como el proceso 3 ya fueron ejecutados, para así poder hacer uso del procesador. En el método run(), el programador hace llamados al método acquire() sobre los semáforos de los hilos 1 y 3, si este método tiene éxito, el proceso continuara su ejecución, sino, se detendrá a esperar que estos semáforos se marquen como libres. 1 import java.util.concurrent.semaphore; 2 public class p3 extends Thread { 3 protected Semaphore ofinp3; 4 public p3(semaphore ofinp3) { 5 this.ofinp3 = ofinp3; 6 } 7 public void run() { 8 try { 9 sleep((int) Math.round(500 * Math.random() )); 11 } catch (InterruptedException e) { 12 e.printstacktrace(); 13 } 14 System.out.println("P3"); 15 this.ofinp3.release(2); 16 } 17} Figura 5: Segmento de Código para el hilo p3 Los segmentos de código para el hilo 3 y 4 son semejantes a los respectivos 1 y 2. 1 import java.util.concurrent.semaphore; 2 Public class p4 extends Thread { 3 protected Semaphore ofinp1; 4 protected Semaphore ofinp3; 5 public p4(semaphore ofinp1,semaphore ofinp3) { 6 this.ofinp3 = ofinp3; 7 this.ofinp1 = ofinp1; 8 } 9 public void run() { 10 try { 11 this.ofinp1.acquire(); 12 this.ofinp3.acquire(); 13 } catch(exception e) { 14 e.printstacktrace(); 15 } 16 try { 17 sleep((int) Math.round(500 * Math.random() )); 19 } catch (InterruptedException e) { 20 e.printstacktrace(); 21 } 22 System.out.println("P4");
10 23 } 24} Figura 6: Segmento de Código para el hilo p4 1 import java.util.concurrent.semaphore; 2 public class UsoSemaforos { 3 protected static Semaphore ofinp1,ofinp3; 4 public static void main(string[] args) { 5 ofinp1 = new Semaphore(0,true); 6 ofinp3 = new Semaphore(0,true); 7 (new Thread(new p1(ofinp1))).start(); 8 (new Thread(new p2(ofinp1,ofinp3))).start(); 9 (new Thread(new p3(ofinp3))).start(); 10 (new Thread(new p4(ofinp1,ofinp3))).start(); 11 } 12} Figura 7: Segmento de Código que controla la ejecución de los hilos Para el caso de la figura 7, el método que inicia el proceso de todos los hilos pone en true los semáforos 1 y 3 y activa cada uno de los métodos, con los correspondientes semáforos y usando el método start().
Benemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 4 Profr: María del Carmen Cerón Garnica Alumno: Roberto
4. Programación Paralela
4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios
CDI Exclusión mutua a nivel alto. conceptos
conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
Benemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto
Java y JVM: programación concurrente
Java y JVM: programación concurrente Adolfo López Díaz Escuela de Ciencias de la Computación e Informática. Universidad de Costa Rica Resumen: El lenguaje de programación Java proporciona, sin necesidad
UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3
UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:
TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.
TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.
1 HILOS (THREADS) EN JAVA
1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los
Tema 1. Conceptos fundamentales de los Sistemas Operativos
Tema 1. Conceptos fundamentales de los Sistemas Operativos 1. Introducción a los Sistemas Operativos. 1. Concepto de Sistema Operativo. Niveles del software. 2. Funciones principales de un Sistema Operativo.
GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)
APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I
Introducción a la programación orientada a objetos
Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación
Sistemas Operativos. Curso 2014 Planificación
Sistemas Operativos Curso 2014 Planificación Agenda Introducción. Despachador. Clases de procesos. Esquemas de planificación. Criterios de planificación. Algoritmos de planificación. FCFS. SJF. Prioridad.
En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.
Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa
Sistemas Operativos. Curso 2015 Planificación
Sistemas Operativos Curso 2015 Planificación Agenda Introducción. Despachador. Clases de procesos. Esquemas de planificación. Criterios de planificación. Algoritmos de planificación. FCFS. SJF. Prioridad.
Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología
Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto
Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia
Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia
INTRODUCCION A LA PROGRAMACION DE PLC
INTRODUCCION A LA PROGRAMACION DE PLC Esta guía se utilizará para estudiar la estructura general de programación de um PLC Instrucciones y Programas Una instrucción u orden de trabajo consta de dos partes
Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código
Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación
SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008
SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008 1.- INTRODUCCIÓN A LOS PROCESOS 1.1.- Concepto 1.2.- Composición y estructura 1.3.- Estados y transiciones 2.- COMUNICACIÓN ENTRE PROCESOS
Mensajes. Interbloqueo
CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya ([email protected]) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose
Procesos. Planificación del Procesador.
Procesos. Planificación del Procesador. Sistemas Operativos. Tema 2. Concepto de Proceso. Una definición sencilla: Programa en ejecución. Entidad pasiva Programa RECURSOS CPU Memoria Ficheros Dispositivos
Práctica 2: El problema de la sección crítica
Práctica 2: El problema de la sección crítica Programación de Sistemas Concurrentes y Distribuidos Grado de Ingeniería Informática Dpto. de Informática e Ingeniería de Sistemas, Escuela de Ingeniería y
SEGURIDAD Y PROTECCION DE FICHEROS
SEGURIDAD Y PROTECCION DE FICHEROS INTEGRIDAD DEL SISTEMA DE ARCHIVOS ATAQUES AL SISTEMA PRINCIPIOS DE DISEÑO DE SISTEMAS SEGUROS IDENTIFICACIÓN DE USUARIOS MECANISMOS DE PROTECCIÓN Y CONTROL INTEGRIDAD
Multitarea en Java. Rafa Caballero - UCM
Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single
Unidad didáctica: Funcionamiento de un parking. Actividad: Funcionamiento de un parking de vehículos con entrada y salida automática con:
Unidad didáctica: Funcionamiento de un parking Descripción: Actividad: Funcionamiento de un parking de vehículos con entrada y salida automática con: Detección del vehiculo entrante Recogida de ticket
Estructuras de Sistemas Operativos
Estructuras de Sistemas Operativos Definicion de Sistema Operativos Un sistema operativo es un programa que actua como inter entre el usuario y el hardware de un computador y su proposito es proporcionar
Modulo 1 El lenguaje Java
Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto
Introducción a las redes de computadores
Introducción a las redes de computadores Contenido Descripción general 1 Beneficios de las redes 2 Papel de los equipos en una red 3 Tipos de redes 5 Sistemas operativos de red 7 Introducción a las redes
ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ
ELECTRÓNICA DIGITAL DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ IES TRINIDAD ARROYO DPTO. DE ELECTRÓNICA ÍNDICE ÍNDICE... 1 1. LIMITACIONES DE LOS CONTADORES ASÍNCRONOS... 2 2. CONTADORES SÍNCRONOS...
Base de datos en Excel
Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de
Programación Orientada a Objetos con Java
Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer [email protected] Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la
Anexo B. Comunicaciones entre mc y PC
Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación
Modelo de Objetos Distribuidos
Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo
EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:
EXCEPCIONES EN JAVA Uno de los problemas más importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecución del programa. Las excepciones de Java
Concurrencia. Bibliografía: Introducción a los Sistemas de Bases de Datos Date, C.J.
Concurrencia Bibliografía: Introducción a los Sistemas de Bases de Datos Date, C.J. Concurrencia La mayor parte de los DBMS son sistemas para múltiples usuarios Se permite a cualquier cantidad de transacciones
Interoperabilidad de Fieldbus
2002 Emerson Process Management. Todos los derechos reservados. Vea este y otros cursos en línea en www.plantwebuniversity.com. Fieldbus 201 Interoperabilidad de Fieldbus Generalidades Qué es interoperabilidad?
Gestión de Oportunidades
Gestión de Oportunidades Bizagi Suite Gestión de Oportunidades 1 Tabla de Contenido CRM Gestión de Oportunidades de Negocio... 4 Elementos del Proceso... 5 Registrar Oportunidad... 5 Habilitar Alarma y
Unidad II: Administración de Procesos y del procesador
Unidad II: Administración de Procesos y del procesador 2.1 Concepto de proceso Un proceso no es más que un programa en ejecución, e incluye los valores actuales del contador de programa, los registros
Creación y administración de grupos de dominio
Creación y administración de grupos de dominio Contenido Descripción general 1 a los grupos de Windows 2000 2 Tipos y ámbitos de los grupos 5 Grupos integrados y predefinidos en un dominio 7 Estrategia
Capitulo V Administración de memoria
Capitulo V Administración de memoria Introducción. Una de las tareas más importantes y complejas de un sistema operativo es la gestión de memoria. La gestión de memoria implica tratar la memoria principal
Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.
El primer paso en el diseño de una base de datos es la producción del esquema conceptual. Normalmente, se construyen varios esquemas conceptuales, cada uno para representar las distintas visiones que los
Resolución de problemas en paralelo
Resolución de problemas en paralelo Algoritmos Paralelos Tema 1. Introducción a la computación paralela (segunda parte) Vicente Cerverón Universitat de València Resolución de problemas en paralelo Descomposición
Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.
Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución
A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante
Modulo 2. Inicio con Java Muchas veces encontramos en nuestro entorno referencias sobre Java, bien sea como lenguaje de programación o como plataforma, pero, que es en realidad Java?, cual es su historia?,
Tema 4. Gestión de entrada/salida
Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada
Capitulo I. Introducción
Capitulo I. Introducción 1.1 Descripción del trabajo El ser humano, como todos sabemos tiene la necesidad de comunicarse, de ser escuchado y sobretodo interactuar con los demás seres vivos que lo rodean.
UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS
UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS CURSO: JAVA BASICO PROFESOR: EMERSON CASTAÑEDA SANABRIA TEMA: Programación Orientada a Objetos OBJETIVOS: Familiarizarse con la Programación
Tema 1: Introducción a los S.O. Ejercicios de Planificiación de Procesos
Tema 1: Introducción a los S.O. Ejercicios de Planificiación de Procesos 1.- Notas y criterios para los problemas de planificación NOTA GENERAL: Normalmente los enunciados no son rigurosamente completos,
PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE
PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,
Capítulo 6. Introducción a la POO
Capítulo 6. Introducción a la POO 6. 1. Clases, Objetos y Métodos Definición La Programación Orientada a Objetos (POO) es una forma especial de programar, más cercana a cómo expresaríamos las cosas en
Medias Móviles: Señales para invertir en la Bolsa
www.gacetafinanciera.com Medias Móviles: Señales para invertir en la Bolsa Juan P López..www.futuros.com Las medias móviles continúan siendo una herramienta básica en lo que se refiere a determinar tendencias
Árboles AVL. Laboratorio de Programación II
Árboles AVL Laboratorio de Programación II Definición Un árbol AVL es un árbol binario de búsqueda que cumple con la condición de que la diferencia entre las alturas de los subárboles de cada uno de sus
SIIGO PYME PLUS. Proceso de Recuperación. Cartilla I
SIIGO PYME PLUS Proceso de Recuperación Cartilla I Tabla de Contenido 1. Presentación 2. Qué es el Proceso de Recuperación? 3. Cuál es el Objetivo del Proceso de Recuperación? 4. Cuáles son los Pasos que
Unidad 1: Conceptos generales de Sistemas Operativos.
Unidad 1: Conceptos generales de Sistemas Operativos. Tema 2: Estructura de los sistemas de computación. 2.1 Funcionamiento de los sistemas de computación. 2.2 Ejecución de instrucciones e interrupciones
Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets
Uso de Sockets Este pequeño manual, le muestra cómo funciona el Socket Server para crear un pequeño servidor web que envía una página HTML a cualquier Navegador Web como Firefox, Internet Explorer, etc..
19. Packages o paquetes
Programación orientada a objetos con Java 201 19. Packages o paquetes Objetivos: a) Definir el concepto de paquete b) Interpretar el código fuente de una aplicación Java donde se utilicen paquetes c) Construir
3. GESTIÓN DE CONFIGURACIÓN DE SOFTWARE
3. GESTIÓN DE CONFIGURACIÓN DE SOFTWARE Software Configuration Management (SCM) es una disciplina de la Ingeniería de Software que se preocupa de [Ber92] [Ber84] [Bou98] [Mik97]: Identificar y documentar
Q-flow Patrones básicos de Workflow
How to Q-flow Patrones básicos de Workflow Versión: 2.0 Fecha de publicación 28-03-2011 Aplica a: Q-flow 3.0 y Q-flow 3.1 Índice Introducción... 3 Patrones de control... 4 Patrón: Secuencia... 4 Patrón:
SISTEMAS OPERATIVOS AVANZADOS
SISTEMAS OPERATIVOS AVANZADOS TEMA 3 CLAVE: MIS 204 PROFESOR: M.C. ALEJA DRO GUTIÉRREZ DÍAZ 3. PROCESOS CONCURRENTES 3.1 Conceptos de programación concurrente 3.2 El problema de la sección crítica 3.3
Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática
Tema 1 Introducción. Arquitectura básica y Sistemas Operativos Fundamentos de Informática Índice Descripción de un ordenador Concepto básico de Sistema Operativo Codificación de la información 2 1 Descripción
2.2.- Paradigmas de la POO
2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier
un programa concurrente
Introducción un programa concurrente asumimos que tengamos un programa concurrente que quiere realizar acciones con recursos: si los recursos de los diferentes procesos son diferentes no hay problema,
3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)
3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1.1 Introducción Este método proporciona un soporte para el diseño creativo de productos de software, inclusive a escala industrial.
ARQUITECTURA DE DISTRIBUCIÓN DE DATOS
4 ARQUITECTURA DE DISTRIBUCIÓN DE DATOS Contenido: Arquitectura de Distribución de Datos 4.1. Transparencia 4.1.1 Transparencia de Localización 4.1.2 Transparencia de Fragmentación 4.1.3 Transparencia
Clases y Objetos. Informática II Ingeniería Electrónica
Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),
GUIA PROGRAMACIÓN ORIENTADA A OBJETOS
GUIA PROGRAMACIÓN ORIENTADA A OBJETOS 1. Por qué la P.O.O? R= A medida que se van desarrollando los lenguajes, se va desarrollando también la posibilidad de resolver problemas más complejos. En la evolución
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...
18. Camino de datos y unidad de control
Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso 2006 2007 18. Camino de datos y unidad de control Un La versatilidad una característica deseable los Los
CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA
CRIPTOGRAFÍA SIMÉTRICA Y ASIMÉTRICA Para generar una transmisión segura de datos, debemos contar con un canal que sea seguro, esto es debemos emplear técnicas de forma que los datos que se envían de una
ESPACIOS DE COMUNICACIÓN VIRTUAL
1 ESPACIOS DE COMUNICACIÓN VIRTUAL La comunicación es la base de la formación en un entorno virtual que facilita las necesidades esenciales de un buen aprendizaje. El entorno virtual desarrolla la comunicación
Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:
SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas
Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010
Hilos, comunicación y competencia entre procesos Dr. Alonso Ramírez Manzanares 2-Sep-2010 Implementación de procesos Se mantiene una tabla de procesos con una entrada por cada proceso: Con lo cual tenemos
LiLa Portal Guía para profesores
Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista
1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:
Universidad de Las Palmas de Gran Canaria Escuela Universitaria de Informática Facultad de Informática Sistemas Operativos Examen parcial, 11 de mayo de 2002 SOLUCIONES Calificación 1 2 3 4 5 1 (2 5 puntos)
Receta general para resolver problemas de sincronización con semáforos
Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que
1. Manejo de memoria estática 2. Manejo de memoria dinámica
1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo
Elementos requeridos para crearlos (ejemplo: el compilador)
Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción
2) Tenemos un sistema informático con una sola CPU que está gestionada mediante una cola multinivel con realimentación.
EJERCICIOS DE PLANIFICACIÓN: 1) Un sistema informático posee los siguientes recursos: - una CPU - tres unidades de almacenamiento UAM1, UAM2 y UAM3. En nuestro sistema tenemos dos tipos de procesos: Tipo
Sistemas Operativos. Curso 2016 Procesos
Sistemas Operativos Curso 2016 Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor
Introducción a la Firma Electrónica en MIDAS
Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento
Curso de Java POO: Programación orientada a objetos
Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos
Modelos de Help Desk
biblioteca foro helpdesk Mejores prácticas Modelos de Help Desk HUGO VILLADA FHD / BIBLIOTECA / MEJORES PRÁCTICAS Pág. 02 Modelos de Help Desk Composición de la demanda En el ambiente informático los problemas
LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN
LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN Tabla de Contenidos LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN... 1 Tabla de Contenidos... 1 General... 2 Uso de los Lineamientos Estándares...
QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)
APRENDERAPROGRAMAR.COM QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A) Sección: Divulgación Categoría: Herramientas Informáticas Fecha
SistemA Regional de Información y Evaluación del SIDA (ARIES)
SistemA Regional de Información y Evaluación del SIDA (ARIES) Que es ARIES? El Sistema Regional de Información y Evaluación del SIDA (ARIES) es un sistema informático del VIH/SIDA basado en el internet
Arquitectura de sistema de alta disponibilidad
Mysql Introducción MySQL Cluster esta diseñado para tener una arquitectura distribuida de nodos sin punto único de fallo. MySQL Cluster consiste en 3 tipos de nodos: 1. Nodos de almacenamiento, son los
Manual del Protocolo XML-RPC de Mensajería Negocios
Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases
Práctica 5. Curso 2014-2015
Prácticas de Seguridad Informática Práctica 5 Grado Ingeniería Informática Curso 2014-2015 Universidad de Zaragoza Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas
1.4.1.2. Resumen... 1.4.2. ÁREA DE FACTURACIÓN::INFORMES::Pedidos...27 1.4.2.1. Detalle... 1.4.2.2. Resumen... 1.4.3. ÁREA DE
MANUAL DE USUARIO DE ABANQ 1 Índice de contenido 1 ÁREA DE FACTURACIÓN......4 1.1 ÁREA DE FACTURACIÓN::PRINCIPAL...4 1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA...4 1.1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA::General...4
Pruebas de unidad con JUnit
Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro
Ejercicio 1 (3 puntos).-
URJC Ingeniería Técnica de Gestión Abril 2011 Asignatura: SOFTWARE AVANZADO Normas: La prueba consta de 2 ejercicios. La máxima nota del examen es un 8. Siendo la práctica la que añade los 2 puntos que
EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET
1 EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET La familia de protocolos TCP/IP fue diseñada para permitir la interconexión entre distintas redes. El mejor ejemplo es Internet: se trata
CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS
CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS 4.1 Antecedentes históricos El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code)
Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual
Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los
Concurrencia: Exclusión mutua y Sincronización
Concurrencia: Exclusión mutua y Sincronización Prof. Carlos Figueira Basado en materiales de Yudith Cardinale (USB) Williams Stallings, Eugene Styer Concurrencia Múltiples aplicaciones Aplicaciones estructuradas
Procesos. Bibliografía. Threads y procesos. Definiciones
Procesos Prof. Mariela Curiel Bibliografía A. Tanembaum & M. Van Steen. Sistemas Distribuidos. Principios y Paradigmas. 2da. Edición. Smith & Nair. The Architecture of Virtual Machines. IEEE Computer.
INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++
5.- Herencia Múltiple. Un hecho natural es que una persona tenga más de un pariente mayor, esta situación también se puede dar en la herencia de clases, naturalmente este tipo de herencia involucra un
http://www.statum.biz http://www.statum.info http://www.statum.org
ApiaMonitor Monitor de Infraestructura BPMS Por: Ing. Manuel Cabanelas Product Manager de Apia [email protected] http://www.statum.biz http://www.statum.info http://www.statum.org Abstract A
