Receta general para resolver problemas de sincronización con semáforos

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Receta general para resolver problemas de sincronización con semáforos"

Transcripción

1 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 te parezca algo inabordable y que no sepas por dónde empezar. Tal vez ya conoces y entiendes las soluciones a algunos problemas tipo, como el búfer cinito o los cilósofos, pero no sabes cómo aplicar estos algoritmos a nuevos problemas que aparentemente no tienen nada que ver con lo que has aprendido hasta ahora. Te invaden el desconcierto y la parálisis. Afortunadamente, existen técnicas sistemáticas (y simples) para construir algoritmos de sincronización entre procesos y que son útiles en una gran variedad de casos. En este artículo explicaremos una técnica que para resolver problemas de sincronización entre procesos utilizando semáforos. La técnica puede servir como receta general para abordar situaciones en las que hay necesidad de sincronizar procesos y no se tiene muy claro por dónde empezar. La técnica descrita también tiene sus limitaciones. Hay problemas socisticados que son dicíciles de modelar con ella. Por otro lado, no siempre da lugar a una solución eciciente. Pero al menos decine un camino seguro para elaborar soluciones sin necesidad de recurrir a la inspiración. Contenido 1 La receta: descripción teórica... 2 Patrones de código: bloqueo condicional y desbloqueo... 2 Los pasos de la receta La técnica en acción... 5 Paso 1. Esquema básico del algoritmo... 5 Paso 2. Localizar los puntos de bloqueo y las condiciones... 5 Paso 3. Escribir las condiciones de bloqueo de manera formal... 6 Paso 4. Localizar los puntos de desbloqueo... 6 Paso 5. Aplicar los patrones de código... 7 Paso 6. Optimizar el código Cerrojos y variables condición Versión simplicicada: cola de espera única Conclusión J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 1

2 1 La receta: descripción teórica La receta se basa en reducir todos los problemas de sincronización a dos clases: accesos a datos compartidos y esperas condicionales. Los primeros los resolveremos con un semáforo de tipo mutex, que es un semáforo inicializado a uno. Las esperas condicionales las trataremos mediante semáforos de tipo cola de espera, que son semáforos inicializados a cero y se usarán para bloquear a los procesos que deben esperar a que se cumpla una condición lógica. Para solucionar un problema genérico de sincronización, nos bastará con decinir un solo semáforo de tipo mutex. Por cada situación de bloqueo que identiciquemos, normalmente declararemos un semáforo de tipo cola de espera, aunque si no nos queremos complicar, podemos utilizar una sola cola de espera para todo el sistema: es menos eciciente, pero funciona. Nuestra receta consiste en analizar el algoritmo que queremos sincronizar y localizar en él todos los puntos donde se pueden producir bloqueos. Cada uno de los bloqueos estará condicionado a que se cumpla una expresión lógica (booleana), que tendremos que averiguar. Una vez decinidas esas condiciones, se aplicarán unas plantillas de código universales que resuelven los bloqueos y desbloqueos. Patrones de código: bloqueo condicional y desbloqueo Para implementar un bloqueo, se utilizarán siempre los mismos patrones de código, que están basados en operar con una cola de espera de procesos. El punto de partida es que hemos identicicado puntos de bloqueo dentro del código, vinculados al cumplimiento de condiciones lógicas. El código alrededor de esos puntos de bloqueo tiene que tener esta estructura:... bloquearse mientras se cumpla COND... código que sólo se puede ejecutar si no se cumple COND Un ejemplo puede ser lo que le ocurre a un cilósofo en el problema la cena de los cilósofos:... bloquearse mientras el palillo(i) y el palillo(i+1) estén ocupados... tomar el palillo(i) y el palillo(i+1)... comer O al productor en el problema del búfer cinito:... bloquearse mientras el búfer está lleno... insertar un elemento en el búfer Cada situación de bloqueo (en los ejemplos, el código que empieza por «bloquearse mientras...») estará asociada con una cola de espera, que a su vez se implementará mediante dos objetos: un semáforo inicializado a cero y una variable entera. El semáforo se usará para bloquear a los procesos que deban mantenerse en espera, y la variable entera llevará la cuenta de cuántos procesos esperan en cada momento. En todos los problemas de sincronización que resolveremos con esta receta, existirán datos compartidos: como mínimo, los contadores enteros relacionados con las colas de espera. Para regular el acceso a los datos compartidos siempre habrá que declarar un semáforo de tipo mutex. Hay que utilizar el mutex para envolver TODOS los usos de variables compartidas en el código J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 2

3 Los patrones de código que resuelven los bloqueos y desbloqueos son exactamente tres: bloqueo de un proceso desbloqueo de un proceso desbloqueo de todos los procesos que están en cola En los siguientes apartados describimos esos tres patrones. Variables compar=das Esta receta se basa en dos semáforos y una variable entera. Semáforo mutex = 1; Semáforo colacond = 0; int contadorcond = 0; La variable contadorcond contendrá en todo momento el número de procesos que están bloqueados en el semáforo colacond. Código de bloqueo Este código se debe escribir en cada punto donde detectemos que debe existir un bloqueo condicional. El código debe insertarse justo antes del código original que sólo puede ejecutarse cuando se cumpla la condición lógica del bloqueo. // esperar hasta que se cumpla una condición lógica «COND» while ( COND ) { contadorcond++; // registra que hay alguien en espera V (mutex); // libera el mutex para no provocar interbloqueos P (colacond); // bloquea al proceso P (mutex); // vuelve a adquirir el mutex para reevaluar COND // Colocar aquí el código que toque variables de estado. // Este código se ejecuta en exclusión mutua (mutex está adquirido). Código para desbloquear a un solo proceso Este código se escribirá cuando en nuestro programa debe desbloquearse a uno solo de los procesos que están en espera. // desbloquear UN SOLO proceso if ( contadorcond > 0 ) { // hay alguien esperando? contadorcond- - ; // entonces, anota que hay uno menos V ( colacond ); // y desbloquéalo Justo después de la operación P(mutex) podría haber otras instrucciones, por ejemplo para J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 3

4 actualizar variables de estado. Esto dependerá de cada sistema que estemos desarrollando. Código para desbloquear a todos los procesos A veces nos interesará desbloquear a todos los procesos que se encuentran en la cola. El único cambio sobre el algoritmo anterior es sustituir el if del desbloqueo por un bucle while. El número de iteraciones viene determinado por la variable contadorcond, que contiene el número de procesos que actualmente están en cola. // desbloquear a todos los procesos while ( contadorcond > 0 ) { contadorcond- - ; V ( colacond ); Los pasos de la receta Estos son los pasos que hay que seguir para resolver el problema de sincronización. 1. Escribir el esquema básico del algoritmo, sin instrucciones de sincronización. 2. Localizar los puntos de bloqueo: marcar las zonas del algoritmo donde los procesos se pueden bloquear y escribir las condiciones de bloqueo en lenguaje natural. 3. Formalizar las condiciones de bloqueo: reescribirlas usando variables, expresiones booleanas, etc. «variables de estado» 4. Localizar los puntos de desbloqueo: marcarlos en el código y distinguir si se desbloquea a un solo proceso o a todos los procesos que esperan. 5. Sustituir los bloqueos y desbloqueos por plantillas de código universales, siguiendo estas reglas: a) Cada situación de bloqueo y desbloqueo se resuelve con operaciones P y V de un semáforo «cola de espera», inicializado a cero. b) Usamos las variables contadoras para saber cuántos procesos hay esperando en cada cola. c) Usamos un mutex (un semáforo inicializado a uno) para proteger las zonas de código donde están las sincronizaciones y los accesos a variables compartidas, incluyendo las variables de estado. 6. Optimizar el código resultante, si se desea J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 4

5 2 La técnica en acción Ahora que se ha presentado la receta, la aplicaremos a un ejemplo simple y conocido: el primer problema de los lectores y escritores. Recordemos que en este problema hay dos tipos de procesos que acceden a una base de datos: lectores y escritores. Se debe permitir el acceso concurrente de los lectores; y mientras un proceso escritor está accediendo a la base de datos, no puede haber ningún otro proceso (ni escritor ni lector). En el llamado «primer problema», los lectores tienen preferencia sobre los escritores. Vamos a aplicar los pasos de la receta a este problema y ver cómo evoluciona el programa que vamos escribiendo. Paso 1. Esquema básico del algoritmo Este paso es el más importante: si no modelamos correctamente el sistema, el resto del trabajo será inútil. En nuestro ejemplo, tenemos dos algoritmos: el del proceso lector, y el del escritor. // Proceso lector Lector() {... leer de la base de datos... // Proceso escritor Escritor() {... escribir en la base de datos... No ha sido muy complicado... Paso 2. Localizar los puntos de bloqueo y las condiciones Ahora tenemos que ubicar las zonas del código donde los lectores y escritores deberían bloquearse y escribir las condiciones de bloqueo, en lenguaje natural: // Proceso lector Lector() { bloquearse si hay algún escritor trabajando... leer de la base de datos... // Proceso escritor Escritor() { bloquearse si hay otro proceso trabajando (lector o escritor)... escribir en la base de datos J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 5

6 Paso 3. Escribir las condiciones de bloqueo de manera formal Escribir las condiciones de bloqueo ha sido fácil, porque lo hemos hecho en lenguaje natural. El siguiente paso es delicado, porque hay que reescribir estas condiciones de manera que lo pueda entender un compilador. Por tanto, tendremos que crear variables de estado que nos permitan conocer si hay lectores o escritores trabajando. No sólo se trata de reescribir las condiciones, sino también de escribir el código necesario para que las variables de estado se mantengan siempre con un valor correcto. En nuestro ejemplo, crearemos dos variables nlectores y nescritores que mantendrán la cantidad de procesos lectores y escritores que están operando con la base de datos. // Variables de estado int nlectores = 0; int nescritores = 0; // Proceso lector Lector() { // bloquearse si hay algún escritor trabajando bloquearse si: nescritores > 0 nlectores++;... leer de la base de datos nlectores- - ; // Proceso escritor Escritor() { // bloquearse si hay otro proceso trabajando (lector o escritor) bloquearse si: nlectores>0 or nescritores>0 nescritores++;... escribir en la base de datos nescritores- - ; Paso 4. Localizar los puntos de desbloqueo Ahora ya podemos identicicar los puntos en el código en los que deberían ir los desbloqueos. Cómo localizamos estos puntos? Tenemos que ver dónde cambian las variables de estado y en qué puntos podrían cambiar de manera que varíen las condiciones de bloqueo que mantienen detenidos a otros procesos. Es importante marcar si el desbloqueo se hace sobre un solo proceso en espera, o bien hay que desbloquear a todos los procesos. Si no tenemos claro cuál es el caso, optaremos por desbloquearlos a todos: la solución será menos eciciente, pero por lo menos será correcta. En nuestro caso, podemos observar que hay dos puntos de desbloqueo: cuando un lector cinaliza (podría desbloquearse un escritor) y cuando un escritor cinaliza (podrían desbloquearse todos los lectores en espera, o bien un escritor) J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 6

7 El segundo punto de desbloqueo es interesante, porque puede dar lugar a dos clases de desbloqueos (a los lectores o al escritor). Hay que anotar esos dos posibles desbloqueos, porque cada uno generará código diferente. Marcaremos los puntos de desbloqueo en el código de esta forma: // Variables de estado int nlectores = 0; int nescritores = 0; // Proceso lector Lector() { // bloquearse si hay algún escritor trabajando bloquearse si: nescritores > 0 nlectores++;... leer de la base de datos nlectores- - ; si nlectores == 0 desbloquear a un escritor // Proceso escritor Escritor() { // bloquearse si hay otro proceso trabajando (lector o escritor) bloquearse si: nlectores>0 or nescritores>0 nescritores++;... escribir en la base de datos nescritores- - ; si hay lectores esperando desbloquear a todos los lectores si no hay lectores y hay escritores esperando desbloquear a un escritor No hay que preocuparse mucho por decinir las condiciones que preceden a los desbloqueos. Si no se tiene muy claro cuáles pueden ser esas condiciones, se puede indicar que el desbloqueo ocurra siempre. En ese caso el algoritmo seguirá siendo correcto, aunque algo menos eciciente, ya que se harán desbloqueos de más. En caso de duda, mejor forzar al desbloqueo siempre. Paso 5. Aplicar los patrones de código En este punto se acabó la parte creativa de la receta. Todo lo que viene a continuación es pura rutina. De hecho, el código que vamos a escribir se podría generar automáticamente. Hay que transformar las acciones de bloqueo en operaciones P de semáforos utilizados como colas de espera. Por cada condición de bloqueo, crearemos un semáforo inicializado a cero y un contador. En cada situación de bloqueo insertaremos la plantilla genérica de código de bloqueo. Las acciones de desbloqueo se transformarán en operaciones V en esas colas de espera. Todo ello, siguiendo los patrones de código presentados anteriormente J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 7

8 Siguiendo las reglas generales, para nuestro ejemplo tenemos que crear estos objetos: Un mutex, que siempre es necesario. Dos colas de espera, una para gestionar el bloqueo de los lectores ( colalectores) y otra para gestionar el bloqueo de los escritores (colaescritores). Dos contadores enteros, uno para cada cola. También es importante colocar el código que actualiza las variables de estado dentro de la protección del mutex. En nuestro caso, se trata de la manipulación de las variables nlectores y nescritores. Código de inicialización // Variables de estado int nlectores = 0; int nescritores = 0; // Control de la exclusión mutua Semáforo mutex = 1; // Cola de espera de los lectores Semáforo colalectores = 0; int contadorlectores = 0; // Cola de espera de los escritores Semáforo colaescritores = 0; int contadorescritores = 0; Proceso lector Lector() { // bloquearse si hay algún escritor trabajando // bloquearse si: nescritores > 0 while ( nescritores > 0 ) { contadorlectores++; P ( colalectores ); nlectores++;... leer de la base de datos... // actualización de variables de estado y desbloqueo J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 8

9 nlectores- - ; if ( nlectores == 0 ) { if ( contadorescritores > 0 ) { contadorescritores- - ; V ( colaescritores ); Proceso escritor Escritor() { // bloquearse si hay otro proceso trabajando (lector o escritor) // bloquearse si: nlectores>0 or nescritores>0 while ( nlectores>0 or nescritores > 0 ) { contadorescritores++; P ( colaescritores ); nescritores++;... escribir en la base de datos... // actualización de variables de estado y desbloqueo nescritores- - ; if ( contadorlectores > 0 ) { // desbloqueamos a todos los lectores while ( contadorlectores > 0 ) { contadorlectores- - ; V ( colalectores ); else { // desbloqueamos a un escritor if ( contadorescritores > 0 ) { contadorescritores- - ; V ( colaescritores ); J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 9

10 Paso 6. Op:mizar el código El algoritmo anterior ya es una solución correcta al problema de los lectores y escritores. No obstante, se puede mejorar de muchas formas. Por ejemplo, la variable nescritores podría ser un booleano. 3 Cerrojos y variables condición Los patrones de código aquí presentados son tan rutinarios que se pueden encapsular en un tipo abstracto de datos que ofrezca unas operaciones de alto nivel de «bloquear» y «desbloquear». De hecho, muchos lenguajes y frameworks de programación concurrente ofrecen estos servicios. Por ejemplo, la biblioteca pthreads ofrece los llamados cerrojos (mutex) y variables condición. Los cerrojos tienen sendas operaciones de bloqueo y desbloqueo (lock/unlock) y equivalen al semáforo mutex de nuestra receta. Una variable condición equivale al conjunto de semáforo+contador utilizado en la receta para mantener una cola de espera. Normalmente ofrece tres operaciones: bloqueo, desbloqueo a un proceso y desbloqueo a toda la cola (wait/signal/broadcast). En el caso del lenguaje Java, los objetos pueden invocar a varias operaciones similares: una operación de bloqueo en cola (wait), una operación de desbloqueo individual (notify) y una operación de desbloqueo general a todos los hilos en espera (notifyall). Cada objeto en Java tiene su propio cerrojo o mutex, que se adquiere y libera cuando se invoca a un método de forma exclusiva (los métodos se pueden declarar como de acceso exclusivo utilizando la palabra reservada synchronized). 4 Versión simplificada: cola de espera única La receta aquí descrita utiliza una cola por cada bloqueo encontrado en el código. En realidad, el problema se puede resolver con una sola cola para todos los procesos. En algunos algoritmos esto podría llegar a ser bastante ineciciente, pero por lo menos funciona. La receta para la cola única es más sencilla: todos los bloqueos van al mismo semáforo cola y en todos los puntos de desbloqueo se deben reactivar todos los procesos de la cola. A continuación mostramos el código de los lectores y escritores que hace uso de una cola única. Como el código de bloqueo y desbloqueo ahora es único para todas las situaciones, se ha empaquetado en sendas funciones bloqueo() y desbloqueogeneral(). Estas funciones serían los equivalentes de las operaciones wait() y broadcast() de las variables condición, o las operaciones wait() y notifyall() de Java. Puede apreciarse que el código queda mucho más compacto que el que obtuvimos en el apartado anterior, aunque se paga el precio de más desbloqueos innecesarios. Por ejemplo, cuando un escritor termina, se desbloquea a todos los procesos, tanto lectores como escritores, a pesar de que sólo un tipo de procesos puede proseguir. Código de inicialización // Variables de estado int nlectores = 0; int nescritores = 0; J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 10

11 Control de bloqueos y desbloqueos (cola única) // Variables globales Semáforo mutex = 1; Semáforo cola = 0; int procesosencola = 0; // Rutinas de bloqueo y desbloqueo void bloqueo() { procesosencola++; V(mutex); P(cola); P(mutex); void desbloqueogeneral() { while ( procesosencola > 0 ) { procesosencola- - ; V (cola); Proceso lector Lector() { // bloquearse si hay algún escritor trabajando while ( nescritores > 0 ) { bloqueo(); nlectores++;... leer de la base de datos... // actualización de variables de estado y desbloqueo general nlectores- - ; desbloqueogeneral(); J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 11

12 Proceso escritor Escritor() { // bloquearse si hay otro proceso trabajando (lector o escritor) while ( nlectores>0 or nescritores > 0 ) { bloqueo(); nescritores++;... escribir en la base de datos... // actualización de variables de estado y desbloqueo general nescritores- - ; desbloqueogeneral(); 5 Conclusión Hemos presentado una técnica general para resolver problemas de sincronización a través de semáforos. La técnica no garantiza una solución óptima, pero sí da la seguridad de que el código es correcto y que el procedimiento de resolución siempre es el mismo, sin necesidad de requerir ingenio, creatividad o inspiración. La estrategia más simple requiere sólo tres variables globales: un mutex, una cola y un contador de esperas. Es la recomendable cuando lo que se quiere es obtener una solución correcta sin que preocupe la eciciencia. Esta técnica general es la que ha dado lugar a la creación de herramientas de programación concurrente presentes en los actuales entornos de programación. La técnica nos puede servir para aplicarla en cualquiera de esos entornos (pthreads, Java, etc.) J.M. Santos Espino, A. Quesada, E. Rodríguez, F. Santana 12

Implementación de monitores POSIX

Implementación de monitores POSIX Implementación de monitores POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Programación concurrente: Problemática Presencia de condiciones de

Más detalles

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores PROGRAMACIÓN CONCURRENTE Tema 5 Monitores 1 Indice Definición de los monitores Sincronización condicional usando monitores Algunos problemas con monitores 2 Problemas de las regiones críticas condicionales

Más detalles

CDI Exclusión mutua a nivel alto. conceptos

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

Más detalles

Object 1. Threads en Java

Object 1. Threads en Java Object 1 Threads en Java Introducción En este artículo voy a explicar cómo se usan los threads en Java (también traducidos como "hilos de ejecución"). La intención no es solamente explicar cuáles son las

Más detalles

Concurrencia. Primitivas IPC con bloqueo

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

Más detalles

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un

Más detalles

Tema 3. Monitores Programación Concurrente

Tema 3. Monitores Programación Concurrente Tema 3. Monitores Programación Concurrente Depto. de Lenguajes y Sistemas Informáticos Universidad de Granada Contenidos 1. Concepto de Monitor 1.1. Fundamento teórico de los monitores 1.2. Sintaxis de

Más detalles

Mensajes. (versión preliminar)

Mensajes. (versión preliminar) Mensajes (versión preliminar) Ejemplo: productor/consumidor con buffer de tamaño 0 void produce(item *p_it); void consume(item *p_it); int nmain() { ntask cons= nemittask(consproc); ntask prod= nemittask(prodproc,

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

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

Más detalles

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

Programación Concurrente y Paralela. P(S) ; sección crítica P(S); 2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles

Más detalles

Concurrencia entre Procesos.

Concurrencia entre Procesos. Concurrencia entre Procesos. Sistemas Operativos Tema 3. 1 Procesamiento concurrente. Procesamiento concurrente: base de los sistemas operativos modernos (multiprogramados): Un conjunto de procesos que

Más detalles

Mensajes. Interbloqueo

Mensajes. Interbloqueo CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya (angelchata@hotmail.com) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE II.3 Sincronización basada en memoria compartida: Semáforos J.M. Drake 1 Procesos concurrentes y memoria compartida. Si los diferentes procesos de un programa concurrente tienen

Más detalles

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 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

Más detalles

Universidad Nacional del Santa F A C U L T A D D E I N G E N I E R I A E.A.P. Ingeniería de Sistemas e Informática NETBEANS 7.0

Universidad Nacional del Santa F A C U L T A D D E I N G E N I E R I A E.A.P. Ingeniería de Sistemas e Informática NETBEANS 7.0 Universidad Nacional del Santa F A C U L T A D D E I N G E N I E R I A E.A.P. Ingeniería de Sistemas e Informática NETBEANS 7.0 PROYECTO DE ESTRUCTURA REPETITIVA DO WHILE A c o n t i n u a c i ó n r e

Más detalles

Hilos en Java. Crear un Hilo. Detener un hilo. Fuente: http://www.chuidiang.com/java/hilos/hilos_java.php

Hilos en Java. Crear un Hilo. Detener un hilo. Fuente: http://www.chuidiang.com/java/hilos/hilos_java.php Fuente: http://www.chuidiang.com/java/hilos/hilos_java.php Hilos en Java A veces necesitamos que nuestro programa Java realice varias cosas simultáneamente. Otras veces tiene que realizar una tarea muy

Más detalles

Concurrencia: Exclusión mutua y Sincronización

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

Más detalles

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

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

Más detalles

1 HILOS (THREADS) EN JAVA

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

Más detalles

Límites. Definición de derivada.

Límites. Definición de derivada. Capítulo 4 Límites. Definición de derivada. 4.1. Límites e indeterminaciones Hemos visto en el capítulo anterior que para resolver el problema de la recta tangente tenemos que enfrentarnos a expresiones

Más detalles

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas 8 Comunicación y sincronización basada en variables compartidas...2 8.1 Exclusión mutua y condición de sincronización....2 8.2

Más detalles

Práctica de programación concurrente 2013-2014 ETSI Informática, UNED David Fernández-Amorós programacion.concurrente@lsi.uned.es. 1.

Práctica de programación concurrente 2013-2014 ETSI Informática, UNED David Fernández-Amorós programacion.concurrente@lsi.uned.es. 1. 1. Enunciado En el bingo hay un presentador y varios jugadores. Antes de comenzar el juego, cada jugador se genera aleatoriamente una cantidad de cartones entre 1 y 10. Obviamente, todos los números de

Más detalles

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. II.5 Sincronización basada en memoria compartida: Monitores

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. II.5 Sincronización basada en memoria compartida: Monitores PROGRAMACION CONCURRENTE Y DISTRIBUIDA II.5 Sincronización basada en memoria compartida: Monitores J.M. Drake 1 Monitor Son módulos que encierran los recursos o variables compartidas como componentes internos

Más detalles

TEMA 5: Control de la Concurrencia en Java (API Estándar)

TEMA 5: Control de la Concurrencia en Java (API Estándar) TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos

Más detalles

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 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

Más detalles

Mi primer proyecto en Dev-C++

Mi primer proyecto en Dev-C++ Mi primer proyecto en Dev-C++ Para realizar esta actividad deberás disponer de un ordenador en el que esté instalado el Dev-C++. Debes ir realizando cada uno de los pasos indicados, en el mismo orden en

Más detalles

Sistemas Operativos Práctica 4

Sistemas Operativos Práctica 4 Sistemas Operativos Práctica 4 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Ejemplos de conversión de reales a enteros

Ejemplos de conversión de reales a enteros Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print

Más detalles

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html

Enlaces relacionados: http://otn.oracle.com/tech/pl_sql/index.html 1.INTRODUCCION PL/SQL (Procedural Language ó Programming Language, según distintas fuentes, aunque la oficial es la primera) es el lenguaje utilizado por Oracle como extensión al SQL, y que nos va a permitir

Más detalles

Monitores. Implementación de un Buffer con monitores

Monitores. Implementación de un Buffer con monitores Monitores Los monitores corresponden a la segunda herramienta de sincronización que veremos en el curso. Se usan para garantizar la exclusión mutua en secciones críticas y para esperar la ocurrencia de

Más detalles

Tutorial Básico de vbscript

Tutorial Básico de vbscript Tutorial Básico de vbscript Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

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

Más detalles

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

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

Más detalles

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS Especificación algebraica ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS Un tipo abstracto de datos se determina por las operaciones asociadas, incluyendo constantes que se consideran como operaciones sin

Más detalles

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

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)

Más detalles

Configurar protección infantil en Windows XP

Configurar protección infantil en Windows XP Configurar protección infantil en Windows XP Web de la asociación española de pediatría En la web de la asociación española de pediatría podemos encontrar un link al site que han montado junto a Microsoft

Más detalles

7 consejos para prepararse para las NIIF

7 consejos para prepararse para las NIIF 7 consejos para prepararse para las NIIF Consejos prácticos para los contadores colombianos, que los prepararán para el cambio a las NIIF Consejo 1: Entiende la situación Hoy en día Colombia ha determinado

Más detalles

Introducción a la programación orientada a objetos

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

Más detalles

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

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

Más detalles

4. Programación Paralela

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

Más detalles

El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática de problemas por medio de las computadoras.

El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática de problemas por medio de las computadoras. 1 Conceptos Generales 1.1 Definición de Informática Una posible definición de informática podría ser: El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Variables y Tipos de Datos PRÁCTICA NÚM. [ 1 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

Tema 3: Concurrencia de procesos

Tema 3: Concurrencia de procesos Tema 3: Concurrencia de procesos Yolanda Blanco Fernández yolanda@det.uvigo.es Concurrencia, Tiempo Real y Paralelismo Concurrencia: Convivencia de un conjunto de procesos en un mismo ordenador. Sistemas

Más detalles

Ecuaciones de primer grado con dos incógnitas

Ecuaciones de primer grado con dos incógnitas Ecuaciones de primer grado con dos incógnitas Si decimos: "las edades de mis padres suman 120 años", podemos expresar esta frase algebraicamente de la siguiente forma: Entonces, Denominamos x a la edad

Más detalles

Refactorizar (v) Reestructurar el software aplicando una secuencia de refactorizaciones.

Refactorizar (v) Reestructurar el software aplicando una secuencia de refactorizaciones. Refactorización Definición Refactorización (n) Cambio realizado a la estructura interna del software para hacerlo más fácil de comprender y más fácil de modificar sin cambiar su comportamiento observable.

Más detalles

Sistemas Operativos. Características de la Multiprogramación. Interacción entre Procesos. Características de la Multiprogramación

Sistemas Operativos. Características de la Multiprogramación. Interacción entre Procesos. Características de la Multiprogramación Universidad Simón Bolívar Departamento de Electrónica y Circuitos EC3731 Arquitectura del Computador II Prof. Osberth De Castro Prof. Juan C. Regidor Sistemas Operativos Concurrencia y Sincronización de

Más detalles

Práctica 8: Barreras

Práctica 8: Barreras Arquitectura y Tecnología de Computadores 14 de febrero de 2014 Objetivos Aprender a utilizar las variables condición y las barreras de la biblioteca Pthreads. Diseñar e implementar una barrera: Barrera

Más detalles

Java y JVM: programación concurrente

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

Más detalles

Threads o Hilos. Marco Besteiro y Miguel Rodríguez

Threads o Hilos. Marco Besteiro y Miguel Rodríguez En.NET, cuando se lanza una aplicación se crea un proceso y dentro de este proceso un hilo de ejecución o thread para el método Main. Es posible, a la vez que se ejecuta el método Main, que la aplicación

Más detalles

Framework para el desarrollo ágil de aplicaciones

Framework para el desarrollo ágil de aplicaciones Framework para el desarrollo ágil de aplicaciones 1 Índice INTRODUCCIÓN... 3 QUÉ ES UN FRAMEWORK?... 3 VENTAJAS DE UTILIZAR UN FRAMEWORK... 4 DESVENTAJAS DE UTILIZAR UN FRAMEWORK... 5 CARACTERÍSTICAS DE

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Operadores y Expresiones PRÁCTICA NÚM. [ 3 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

Universidad de la Frontera

Universidad de la Frontera Universidad de la Frontera Facultad de Ingeniería, Ciencias y Admistración Departamento de Matemática Actividad Didáctica: El Abaco TALLER # 2 - Sistema Decimal El ábaco es uno de los recursos más antiguos

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()

Más detalles

Q-flow 3.1: Introducción a Q-flow

Q-flow 3.1: Introducción a Q-flow Q-flow 3.1: Introducción a Q-flow Código del manual: Qf310001ESP Versión: 1.1 Se aplica a: Q-flow 3.1 Última revisión: 13/12/2010 i Q f 3 1 0 0 0 1 E S P v 1. 1 Q - f l o w 3.1 Introducción a Q-flow Urudata

Más detalles

1 Agencia de viajes: enunciado

1 Agencia de viajes: enunciado 1 AGENCIA DE VIAJES: ENUNCIADO 1 1 Agencia de viajes: enunciado Una agencia de viajes mantiene una base de datos con exactamente N clientes y M destinos turísticos. En una situación real, estos valores

Más detalles

Tema 4. Gestión de entrada/salida

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

Más detalles

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) aprenderaprogramar.com Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029

Más detalles

SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE

SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE SOLUCIÓN CASO CÁLCULO DE GASTOS DE VIAJE La cumplimentación del parte de dietas requerirá de la introducción de algunos datos como: el nombre del empleado, la fecha de inicio del viaje, la fecha de finalización,

Más detalles

07 << Acceso en exclusiva al recurso compartido >>

07 << Acceso en exclusiva al recurso compartido >> Sistemas Operativos 4º Semestre. Grados II y MI Cuarto Parcial. Sistema de Ficheros. 2 de Junio de 2014. Dispone de 50 minutos. Publicación de notas el Jueves 5 de Junio 2014. Revisión el Viernes 6 de

Más detalles

Arreglos. // Incluir E/S y Librerías Standard #include #include

Arreglos. // Incluir E/S y Librerías Standard #include <stdlib.h> #include <stdio.h> Arreglos Introducción. En los temas anteriores se han estudiado los diferentes tipos de datos simples de C++, usados para representar valores simples como enteros, reales o caracteres. Sin embargo, en

Más detalles

Programación: QBASIC

Programación: QBASIC 1. QBASIC Programación: QBASIC Guía del alumno Qbasic es una versión moderna del lenguaje BASIC. Se trata de un lenguaje de alto nivel. En un lenguaje de alto nivel las instrucciones tienen un formato

Más detalles

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos. Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00 Sistemas Operativos Temas 4, 5 y 6 Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00 Índice Tema 4: Herramientas de Sincronización de Alto Nivel. Regiones Críticas. Monitores.

Más detalles

Tema 2. Procesos. 1. Concepto de proceso

Tema 2. Procesos. 1. Concepto de proceso Tema 2. Procesos 1. Concepto de proceso. 2. Principios de la Programación concurrente. 1. Concurrencia. Programación concurrente. 2. Áreas de comunicación entre procesos. 1. Exclusión mutua. 2. Sincronización.

Más detalles

Práctica 2: El problema de la sección crítica

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

Más detalles

Concurrencia en.net David Jesús Horat Flotats

Concurrencia en.net David Jesús Horat Flotats Concurrencia en.net David Jesús Horat Flotats ÍNDICE 1. Introducción n a.net 2. Sincronización n en.net 2.1 Contextos sincronizados 2.2 Método M Synchronized 2.3 Regiones de código c sincronizado 2.4 Sincronización

Más detalles

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras. Actividades de Divulgación del Centro Atómico Bariloche Qué hay detrás de un programa de computadora? Expositores: Daniela Arnica Pablo E. Argañaras División Mecánica Computacional Gerencia de Investigación

Más detalles

Aproximación local. Plano tangente. Derivadas parciales.

Aproximación local. Plano tangente. Derivadas parciales. Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 004-005 Aproximación local. Plano tangente. Derivadas parciales. 1. Plano tangente 1.1. El problema de la aproximación

Más detalles

un programa concurrente

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,

Más detalles

Comunicación y Sincronización con Monitores Resumen del Tema

Comunicación y Sincronización con Monitores Resumen del Tema Notas de clase de Programación Concurrente Comunicación y Sincronización con Monitores Resumen del Tema Dpto de Lenguajes y Ciencias de la Computación Universidad de Málaga María del Mar Gallardo Melgarejo

Más detalles

MatemásTIC. Estudio y práctica del álgebra matricial con una aplicación TIC didáctica y sencilla. 65 Noviembre 2010, pp. 57-67

MatemásTIC. Estudio y práctica del álgebra matricial con una aplicación TIC didáctica y sencilla. 65 Noviembre 2010, pp. 57-67 65, pp. 57-67 Estudio y práctica del álgebra matricial con una aplicación TIC didáctica y sencilla MatemásTIC A lo largo de los distintos números de Suma nos planteamos en esta sección descubrir distintas

Más detalles

Es Visual Basic un buen lenguaje de programación para aprender a programar? Qué es VB? Versiones de Visual Basic. (CU00303A)

Es Visual Basic un buen lenguaje de programación para aprender a programar? Qué es VB? Versiones de Visual Basic. (CU00303A) aprenderaprogramar.com Es Visual Basic un buen lenguaje de programación para aprender a programar? Qué es VB? Versiones de Visual Basic. (CU00303A) Sección: Cursos Categoría: Curso Visual Basic Nivel I

Más detalles

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

Tema 5 Sentencias de control de flujo. Fundamentos de Informática Tema 5 Fundamentos de Informática Sentencias de Control Tipos de sentencias de control: Comprobación lógica para bifurcar el flujo de un programa. Sentencias de control condicional o alternativo Comprobación

Más detalles

Si bien Pascal-FC no trae algunas de las características de Pascal como:

Si bien Pascal-FC no trae algunas de las características de Pascal como: PROCESOS VS. HILOS: Ciclo de vida de un proceso: es prácticamente un estándar en todos los sistemas operativos. En principio el proceso no existe, es creado, luego pasa a listo (el proceso esta en condiciones

Más detalles

Unidad 1: Conceptos generales de Sistemas Operativos.

Unidad 1: Conceptos generales de Sistemas Operativos. Unidad 1: Conceptos generales de Sistemas Operativos. Tema 3: Estructura del sistema operativo. 3.1 Componentes del sistema. 3.2 Servicios del sistema operativo. 3.3 Llamadas al sistema. 3.4 Programas

Más detalles

UNIDAD DE APRENDIZAJE IV

UNIDAD DE APRENDIZAJE IV UNIDAD DE APRENDIZAJE IV Saberes procedimentales 1. Interpreta y utiliza correctamente el lenguaje simbólico ara el manejo de expresiones algebraicas. 2. Identifica operaciones básicas con expresiones

Más detalles

8.1 Un primer bucle FOR... 5 8.2 Varias formas de utilizar el bucle FOR... 5 8.3 Calcular el factorial de un número mediante un bucle FOR...

8.1 Un primer bucle FOR... 5 8.2 Varias formas de utilizar el bucle FOR... 5 8.3 Calcular el factorial de un número mediante un bucle FOR... PROGRAMACIÓN EN C++ PRÁCTICA 08 INTRODUCCIÓN A C++ SENTENCIAS DE CONTROL DEL FLUJO DE UN PROGRAMA: Ejercicio 1. Un primer programa en C++....1 Ejercicio 2. Una conversación en C++....2 Ejercicio 3. Una

Más detalles

7 Pasos Sencillos para Encontrar El Nicho de Mercado Adecuado para tu Negocio.

7 Pasos Sencillos para Encontrar El Nicho de Mercado Adecuado para tu Negocio. 7 Pasos Sencillos para Encontrar El Nicho de Mercado Adecuado para tu Negocio. Por Roberto Marroquín COPYRIGHT Copyright 2008 Todos los Derechos Reservados. Marketing-Integral.com La información contenida

Más detalles

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas cruellas@ac.upc.es Objetos y clases Concepto de objeto. Concepto de clase. Clases, objetos y programas. Clases

Más detalles

Bienvenidos a la presentación: Introducción a conceptos básicos de programación.

Bienvenidos a la presentación: Introducción a conceptos básicos de programación. Bienvenidos a la presentación: Introducción a conceptos básicos de programación. 1 Los programas de computadora son una serie de instrucciones que le dicen a una computadora qué hacer exactamente. Los

Más detalles

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR UNIDAD 3: ARITMÉTICA DEL COMPUTADOR Señor estudiante, es un gusto iniciar nuevamente con usted el desarrollo de esta tercera unidad. En esta ocasión, haremos una explicación más detallada de la representación

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

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

Más detalles

Distinguir las diferentes estructuras de repetición utilizadas en problemas con ciclos: mientras, haga-mientras, repita-hasta, para.

Distinguir las diferentes estructuras de repetición utilizadas en problemas con ciclos: mientras, haga-mientras, repita-hasta, para. ESTRUCTURAS DE REPETICIÓN OBJETIVOS Aprender a construir grandes y complejos problemas a través de la ejecución repetida de una secuencia de proposiciones llamados ciclos o estructuras repetitivas. Distinguir

Más detalles

Guía de Uso Básico de Prolog

Guía de Uso Básico de Prolog Guía de Uso Básico de Prolog 1. Prolog es un lenguaje conversacional Al contrario que la mayoría de los lenguajes de programación, Prolog es un lenguaje conversacional; es decir, el sistema Prolog mantiene

Más detalles

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas 3.4.2014 http://jungla.dit.upm.es/~pepe/doc/adsw/index.

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas 3.4.2014 http://jungla.dit.upm.es/~pepe/doc/adsw/index. Análisis y diseño de software dit UPM Tema 3: Concurrencia /ejercicios José A. Mañas http://jungla.dit.upm.es/~pepe/doc/adsw/index.html 3.4.2014 ejercicio 1.1 programar una cuenta bancaria compartida 1.

Más detalles

Java: Programación Multithread

Java: Programación Multithread Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto

Más detalles

Introducción a los Tipos Abstractos de Datos

Introducción a los Tipos Abstractos de Datos Página 1 de 8 Introducción a los Tipos Abstractos de Datos Introducción: Concepto de abstracción Abstracción funcional y abstracción de datos Construcción de tipos abstractos de datos Especificación de

Más detalles

Secretos de la Programación Concurrente

Secretos de la Programación Concurrente 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 jstuartp@gmail.com

Más detalles

Software Criptográfico FNMT-RCM

Software Criptográfico FNMT-RCM Software Criptográfico FNMT-RCM ÍNDICE 1. DESCARGA E INSTALACIÓN DEL SOFTWARE 2. EXPORTACIÓN DE CERTIFICADOS EN MICROSOFT INTERNET EXPLORER 3. IMPORTACIÓN DEL CERTIFICADO A LA TARJETA CRIPTOGRÁFICA -2-

Más detalles

Modulo 1 El lenguaje Java

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

Más detalles

Capítulo 0. Introducción.

Capítulo 0. Introducción. Capítulo 0. Introducción. Bueno, por fin está aquí el esperado (espero!!) Capítulo Cero del Tutorial de Assembler. En él estableceremos algunos conceptos que nos serán de utilidad a lo largo del Tutorial.

Más detalles

A partir de este capítulo se introducen términos, probablemente nuevos para el

A partir de este capítulo se introducen términos, probablemente nuevos para el CAPITULO 3. PSP 0 Y PSP 0.1 A partir de este capítulo se introducen términos, probablemente nuevos para el lector que tienen que ver en su totalidad con PSP. También se dan a conocer los formatos, "scripts

Más detalles

Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor.

Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor. Paso de mensajes Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons

Más detalles

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz Compiladores y Lenguajes de Programación Maria de Guadalupe Cota Ortiz Organizaciones que rigen las normas para estandarización de Lenguajes de Programación IEEE (Instituto de Ingenieros Eléctricos y Electrónicos)

Más detalles