Archivos de la categoría ‘Programación Concurrente’
Publicado por tomassi en 20 octubre 2009
Definición de Región Crítica Condicional
En Pascal-fc podemos declarar una región crítica condicional (RCC) de la siguiente forma:
- resource SC: i, j; → Lo que significa que se declara la RCC SC compuesta por las variables i y j. Estas dos variables no podrán pertenecer a otra RCC distinta a SC.
Así las variables que componen una RCC solo podrán ser referenciadas dentro de la construcción region. De esta forma resolvemos el problema de la exclusión mutua.
Leer el resto de esta entrada »
Publicado en Programación Concurrente | Etiquetado: condición de sincronización, exclusión mutua, Pascal-fc, problema de la comida de filósofos, problema de los lectores y escritores, problema del productor consumidor, regiones críticas condicionales, sección crítica | Deja un Comentario »
Publicado por tomassi en 13 octubre 2009
Definición de Semáforo
Los semáforos pueden realizar tres operaciones: wait, signal y initial. Estas operaciones son atómicas, de modo que sólo un proceso podrá estar ejecutándolas sobre un semáforo en determinado momento.
- wait(s): Decrementa el valor del semáforo s. Si s es 0 bloquea el proceso que realiza la llamada. Es importante saber que, según la implementación, cuando un proceso realiza esta llamada puede, decrementar s sin importar su valor o decrementarlo sólo si es mayor que 0. Así s podrá tener valores negativos o no según como se haya implementado.
- signal(s): Si hay algún proceso bloqueado lo desbloquea y si s permite valores negativos lo incrementa. Si no hay procesos bloqueados solamente incrementará el valor de s.
- initial(s, v): Inicializa el valor de s a v. Esta operación es específica de Pascal-fc, donde la implementación de los semáforos no permite valores negativos.
Se asume que los procesos bloqueados se insertan en una cola FIFO (First In First Out), así el primero en ser bloqueado es el primero que se desbloquea.
Leer el resto de esta entrada »
Publicado en Programación Concurrente | Etiquetado: Pascal-fc, problema de la comida de filósofos, problema de los lectores y escritores, problema del productor consumidor, semáforos | Deja un Comentario »
Publicado por tomassi en 7 octubre 2009
Tipos de Sincronización y su Solución
Los dos tipos de sincronización necesarios entre procesos concurrentes son la exclusión mutua y la condición de sincronización definidos en el capítulo 1. Cuando se hable de procesos se asume que también se habla sobre los hilos.
Exclusión Mutua
Cuando un proceso se encuentra en su sección crítica, el resto de procesos no podrá estar en esa misma sección y si quisieran acceder a ella deberán esperar a que quede libre. Cuando un proceso termina de ejecutar su sección crítica se deberá permitir que otro proceso en espera entre en la sección.
Leer el resto de esta entrada »
Publicado en Programación Concurrente | Etiquetado: algoritmo de Dekker, algoritmo de Peterson, algoritmo incorrecto de Hyman, condición de sincronización, espera ocupada, exclusión mutua, sección crítica | Deja un Comentario »
Publicado por tomassi en 14 septiembre 2009
Procesos
Una forma de programar concurrentemente es dividir un programa en procesos ya que por lo general, los sistemas operativos proveen de un sistema de ejecución concurrente para éstos. Para hacer una comparación entre procesos e hilos aquí se presentan una serie de características de los procesos:
- Poseen espacios de memoria independientes. Algunos sistemas operativos permiten que distintos procesos compartan memoria.
- Pueden encontrarse en diferentes estados. Los cambios de estado (cambios de contexto) son relativamente costosos en términos de tiempo.
- La estructura de los procesos se encuentra en la memoria del núcleo. Esto causa que sea necesario realizar costosas llamadas al sistema para acceder a ella.
Leer el resto de esta entrada »
Publicado en Programación Concurrente | Etiquetado: cambio de contexto, hilos, hilos daemon, Java, procesos, Runnable, Thread, threads | Deja un Comentario »
Publicado por tomassi en 4 septiembre 2009
Programa: Un programa es un conjunto de instrucciones. Se trata de algo estático. Para que el programa pueda hacer algo hay que ponerlo en ejecución.
Proceso: A grandes rasgos, un proceso es un programa o parte de él en ejecución. Una mejor definición es la de una actividad asíncrona susceptible de ser asignada a un procesador.
Concurrencia: Dos procesos serán concurrentes cuando la primera instrucción de uno de ellos se ejecuta después de la primera y antes de la última del otro.
Leer el resto de esta entrada »
Publicado en Programación Concurrente | Etiquetado: concurrencia, condición de sincronización, exclusión mutua, inanición, interbloqueo, multiprogramación, programación paralela, sección crítica | Deja un Comentario »