Archive for the ‘Paralelo B’ Category

CODA File Systems

Miércoles, Julio 16th, 2008

Coda es un sistema de ficheros distribuido, desarrollado en la Universidad Carnegie Mellon. Coda está basado en una arquitectura cliente/servidor, y ha sido diseñado para proporcionar funcionalidades no existentes en otros sistemas de ficheros distribuidos – por ejemplo NFS – como es el soporte para la movilidad de los clientes.

Las características principales de Coda (según describen los propios desarrolladores) son:

* Permite operar a los clientes offline, esto es, desconectados del sistema, de manera que pueden realizar cambios locales en los ficheros que se propagan a todo el sistema de ficheros una vez que el cliente en cuestión se reconecta al mismo.

* Facilita características para mejorar la resistencia a fallos en el sistema, mediante la posibilidad de incluir servidores con réplicas de los datos del sistema, y mecanismos para manejar conflictos entre servidores, para manejar fallos en la red, y para controlar la desconexión de los clientes y los posibles conflictos e inconsistencias que ello puede acarrear. También incorpora mecanismos de backup de los datos del sistema.

* Proporciona mejoras en el rendimiento, con respecto a otros sistemas de ficheros distribuidos, mediante la utilización de caches locales en los clientes y para la escritura de datos en los servidores.

* Incorpora características de seguridad basadas fundamentalmente en la autenticación de usuarios, mediante la utilización de listas de control de acceso (ACL’s).

* El código está disponible de forma libre.

De esta forma, el objetivo principal perseguido con Coda es obtener un sistema de ficheros distribuido con un rendimiento mejorado, menos sensible a posibles indisponibilidades en los servidores o a sobrecargas de la red. Relacionada con esta meta está la provisión de cierto grado de movilidad a los clientes del sistema.

Actualmente existen versiones de Coda para diferentes variantes de Unix (incluido Linux Debian y RedHat) y Windows 95/98 y XP.

Protocolos de Redes

Miércoles, Julio 9th, 2008
Protocolo TCP/IP

Este protocolo es el que todos usamos indirectamente, la mayoría sin saberlo, pero grande fue la sorpresa al enterarme de que este son un solo protocolo (:-O) sino que la realidad es que es un conjunto de protocolos que se ha convertido en el motor principal de la gran red (Internet)

Pero cual es la causa para que este protocolo haya alcanzado tanta expansión y sea haya convertido en un estándar? Pues se debe a que posee características como:

  • Es independiente del fabricante
  • Soporta múltiples tecnologías
  • Puede funcionar en maquinas de cualquier tamaño

Su desarrollo y nacimiento se dio en el año de 1972 por el informático estadounidense Vinton Cerf como parte de la primer red Arpanet (una red de defensa de los Estados Unidos) Este protocolo fue implementado pensando en que cumpla los siguientes objetivos:

  • La independencia de la tecnología usada en la conexión a bajo nivel y la arquitectura del ordenador.
  • Una conectividad universal a través de la red.
  • Fomentar las bases de un protocolo estandarizado.

Como el TCP/IP es un conjunto de protocolos, está definido en niveles bajo un modelo conocido como OSI que se estructura de la siguiente manera:

  1. Nivel de Aplicación
  2. Nivel de Transporte
  3. Nivel de Internet
  4. Nivel de Red
  5. Nivel Físico


FTP: Usado en la transferencia de archivos.

SMTP: Aplicación para el correo electrónico.

TELNET: Conexión a una aplicación remota.

RPC: Uso de procedimientos situados remotamente como si fuesen procedimientos locales.

SNMP: Es una aplicación para el control de la red.

NFS: Permite la utilización de archivos distribuidos por los programas de la red.

X-Windows: Es un protocolo para el manejo de ventanas e interfaces de usuario.

Protocolo HTTP

Este protocolo de transferencia de hipertexto HyperText Transfer Protocol, sus creadores fueron la W3C y IETF. Es usado tanto para que el navegador pida una página a un servidor, como para que éste envíe la página solicitada al navegador. Está basado en el envío de comandos y respuestas en texto ASCII.

Con esto el protocolo HTTP es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. En base a este a la información transmitida se la llama recurso y se la identifica mediante un URL(Uniform Resource Locator). Determinándose los recursos como archivos, el resultado de la ejecución de un programa en fin, etc

Una de las características del HTTP es que no guarda ninguna información sobre conexiones anteriores, para lo cual es frecuente el uso de cookies, que es información que un servidor puede almacenar en el sistema cliente. Con esto las aplicaciones web pueden formular una noción de –sesión–, y también permite rastrear usuarios ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.

Protocolo FTP

El Protocolo de transferencia de archivos (File Transfer Protocol) es uno de los protocolos con mayor antigüedad y popularidad en la Internet hoy día.

Su implementación data del año 1971 cuando se desarrolló un sistema de transferencia de archivos entre equipos del Instituto Tecnológico de Massachussets. Desde entonces, se ha venido mejorando el protocolo básico.

El protocolo FTP usa TCP como protocolo de transporte para proporcionar conexiones fiables entre los extremos (cliente/servidor). Para esto se emplean dos conexiones: la primera es para el login y sigue el protocolo TELNET y la segunda es para gestionar la transferencia de datos. Con esto el usuario que inicia la conexión asume la función de cliente, mientras que el host remoto adopta la función de servidor

En definitiva puedo decir que el uno de los principales protocolos que se utiliza y facilita la comunicación es el TCP/IP, que fue acogido como un estándar lo que contribuyó a que la expansión del Internet verdaderamente fuera masiva, involucrando además para esto otros protocolos como los descritos anteriormente(http, ftp).

Saludos,

TCP/IP

Miércoles, Julio 2nd, 2008
Navegando un poco en busca de información sobre los protocolos de comunicación y transferencia (para mi próximo post ;-)) me encontré con estos vídeos sobre le protocolo TCP/IP que podrían ser de mucha ayuda para entenderlo.

se los dejo…

y uno en entorno animado….

Saludos,

Sistemas Distribuidos

Miércoles, Julio 2nd, 2008

Se define a los Sistemas Distribuidos como un conjunto de dispositivos de procesamiento que comparten información mediante medios conocidos como redes de comunicación o incluso Internet, estos pueden implementarse en diversas plataformas(linux, windows… etc) y compartir recursos lógicos o tangibles(hardware).

Este concepto además involucra la distribución de los procesos en las varias unidades de procesamiento, su reintegración, la resolución de problemas de concurrencia y paralelismo, el recuperarse de fallas de algunos recursos distribuidos y una de las partes más importantes la protección y seguridad entre los diferentes componentes del sistema y los clientes.

Entre las aplicaciones que se pueden desplegar dentro de estos sistemas se encuentran los sistemas bancarios y todas las aplicaciones comerciales que involucran la utilización de recursos remotos(multimedia u otros).

Características:

  • Cada elemento de computo tiene su propia memoria y corre bajo su propio SO
  • Permiten el control control de recursos locales y remotos.
  • Utilizan diferentes SO como plataformas. ( Linux, windows, Mac).
  • Su comunicación es mediante medios como Redes, Protocolos y dispositivos de hardware.
  • Otorgan una capacidad de procesamiento en paralelo.

Pero, porque construir sistemas distribuidos???

Aquí algunas razones:

  • Compartir Recursos: Permite a un usuario utilizar recursos de varios sitios conectados entre sí.
  • Velocidad en Cálculos: Presenta la opción de dividir un calculo(proceso) en varios procesadores o sitos para que se realice con mayor velocidad.
  • Confiabilidad: Permite que si un sitio vinculado al sistema cae se pueda recuperar y reintegrar luego, mientras los demás siguen funcionando.
  • Comunicación: Permite que los usuarios intercambien contenidos de diversos tipos mediante protocolos utilizados como puente de comunicación.

Tipos de Redes sobre las cuales se despliegan los sistemas distribuidos.


Red LAN(Local Area Network)

La conocida red de Area Local es un grupo de equipos de diferentes magnitudes, conectados en una área geográficamente pequeña, uno de estos ejemplos y el más utilizado es el Ethernet.

Cada uno de los usuarios conectados dentro de esta red forma un nodo y puede acceder a compartir dispositivos como impresoras, datos y utilizarlo como medio de comunicación (mail, chat).

Red WAN(Wide Area Network)

La red de Área Amplia, es capaz de cubrir distancias muy grandes(más que la LAN), uno de estos ejemplos es el internet.
Estas redes están compuetas por líneas de transmisión de grandes prestaciones, de grandes velocidades y de gran ancho de banda en la mayoría de los casos. Estas líneas de transmisión son las encargadas de mover información entre los diferentes nodos de la red.

Topologías utilizadas para la creación de una RED:

  • Bus.- Se emplea un solo cable como columna principal de comunicación entre los nodos (backbone) . Aquí todos los nodos se conectan directamente. El daño del backbone supondría el colapso total de la red
  • Anillo.- En esta se conecta un host con el siguiente y al último host con el primero., formando así una forma de estrella con el cable de conexión.
  • Estrella.- Se utiliza un punto central al cual se conectan todos los cables, se caracteriza porque ninguno de los nodos se conecta directamente a otro nodo.

Protocolos de Comunicación

A continuación solomente me limitaré a enunciar los distintos protocolos de comunicación para en post siguiente hablar detalladamente de ellos.

Entre los protocolos de comunicación más utilizados se tiene:

  • TCP/IP
  • HTTP
  • FTP

Saludos,

  • Ubuntu 8.04 Hardy Heron

    Viernes, Junio 27th, 2008

    Ubuntu 8.04

    Esta mejor que la versión 7.10 se las recomiendo… les dejo un videito para que puedan ver todo lo que es posible con Ubuntu 8.04.

    Estructura del Almacenamiento Masivo

    Sábado, Junio 21st, 2008
    El almacenamiento constituye una de las partes principales dentro de los sistemas computacionales, ya que es en dispositivos de gran capacidad donde la información es guardada para luego ser accedida o recuperada. Uno de los mayores dispositivos que se utiliza para este propósito son los conocidos díscos duros (discos rígidos) a continuación detallaré algunos de sus aspectos más importantes como su distribución y la manera en que se accede a los datos.

    La estructura física de un disco rígido esta compuesta por:

    • Cabezas lectoras que recorren la superficie del disco
    • Platos que son pequeños discos que se encuentra uno sobre otro y compuestos por caras.
    • Las pistas que son circuferencias ubicadas en una cara.
    • Y cilindros definidos como la unión de pistas alineadas verticalmente.

    Esta es la distribución física de un disco, ahora analizare brevemente las distintas planificaciones que se utilizan para acceder a los datos de un disco.

    Una correcta planificación trae con sigo un aumento en la velocidad de acceso a datos, es decir hace que la cabeza de lectura efectúa un trabajo eficiente en menor tiempo, entre las planificiones se pueden encontrar:

    Planificación FCFS
    Conocido como first-come-fist-served es un algoritmo que atiende las peticiones en orden de llegada sin importar si se encuentran en ragos muy dispersos. No es muy eficiente pues el cabezal de lectura recorre la superficie de una manera irregular.

    Planificación SSTF
    Basada en el principio de short-seek-time-first estable las peticiones de dirección de tal manera que será atendida aquella que se encuentre más cerca de la cabeza de lectura. Este algoritmo reduce considerablemente el tiempo, pero como desventaja puede provocar que inanición por la presencia de solicitudes siempre menores.

    Planificación SCAN
    También conocido como algoritmo del elevador, pues recorre toda la longitud de los platos de un lado a otro buscando en su camino las solicitudes que se encuentren pendientes. Uno de sus inconvenientes es el que las solicitudes de acceso no tienen un tiempo de espera uniforme, es decir, las de un extremo serán atendidas luego de un tiempo mayor.

    Planificación C-SCAN
    Esta planificación es una variación del anterior que resuelve la espera de tiempo para cada solicitud, haciendo un recorrido uniforme en cuanto ha atender pedidos lo que hace que la cabeza lectora recorra el plato de inicio a fin y retorne.

    Planificación LOOK
    En la práctica los dos algoritmos anteriores, que recorren todo el plato no son implementados, si no que se usa más la forma de detectar la última petición y regresar nuevamente al principio, es decir no hay razón de seguir recorriendo si ya no existen solicitudes.

    Algunos de estos algoritmos son similares a los que usa el sistema operativo para planificar sus procesos, y la elección o implementación de cada uno debería ser tomada de acuerdo al flujo de información que transitará por ese medio.

    Otro aspecto importante en el almacenamiento masivo:

    Espacio de Intercambio
    Este es un concepto importante pues su implementación es conocida como memoría virtual. Y que es lo que hace? pues permite aumentar la cantidad de memoría de tal manera que el SO moverá al disco todo o parte de un proceso sin mucha actividad, permitiendo liberar recursos.
    Para ubicar el espacion de intercambio existen dos formas, la primera como un fichero de intercambio que puede reducir o ampliar su tamaño pero que puede ser afectado por la paginación y la segunda una Partición de intercambio, que es basicamente especificar una partición del disco para utilizar, y en diferencia a la anterior no puede ser modificado su tamaño.

    Luego de revisar todos estos aspectos, puedo decir que el almacenamiento masivo es uno de los aspectos que el sistema operativo toma en cuenta pues la información y su localización inmediata es muy importante, además, existen algunos otros medios que permiten almacenar información de alguna u otra manera como los discos removibles, los magnéticos, las memorias flash y otros muchos que aún estan en desarrollo.

    Saludos,

    Sistemas de Entrada y/o Salida (E/S)

    Jueves, Junio 12th, 2008

    Si bien es cierto que un ordenador o computador proporcia y permite realizar procesos que al mas veloz de los mortales le tomaría un tiempo muy grande(si lo logra terminar ;-)) para que pueda trabajar con ellos o procesarlos en necesario primero darselos(entrada) y para poder utilizarlos talvez sea necesario tener una constancia de lo que se hizo(salida).

    Y es aquí donde los dispositivos de entrada y salida forma una de las partes más esenciales, esto son capaces de enviar información entre diversas unidades(i/o)

    Entre los dispositivos que pueden realizar estas operaciones su gama es muy variada van desde periféricos como impresoras, monitores y otros, hasta los más pequeños como el canal de transmisión entre la cpu y la memoria del computador(buses).

    Pero bueno, la pregunta es como interactúan entre sí dos o más componentes para realizar estos procesos????
    Si bien cada dispositivo(hardware) es capaz de funcionar y realizar operaciones de una manera diferente y a intervalos de tiempo variados y propios de cada uno, el kernel del SO debe conocerlos o tener una referencia de como funcionan y la manera en que se planifica su uso.

    A esto se conoce como el Sistema de E/S el mismo que proporciona la interfaz de acceso, los controladres de cada dispositivo también conocidos como “drivers” y un control básico para la correcion de errores frecuentes, toda esta información es almacenada y utilizada por el kernel dependiendo de cada dispositivo.

    Bien, pero como se transmite la información? Pues cada dispostivo dependiendo de su naturaleza podrá comunicarse, transferir o recibir las señales electrónicas de diversas formas, algunos de ellos(lo más común) utilizan cables, otros circuitos integrados(placas impresas) y los más avanzados tecnología inalambrica.

    Cada uno de estos enviará y recibira las señales en lugares conocidos como “puertos” que el SO deberá registrar y manejar dependiendo del dispositivo y la solicitud enviada.

    Además, la información(señales) podrá variar en la forma que llega/sale, es decir se diferencian basicamente dos tipos:

    Por Bloques: Donde cada ‘bloque’ contiene un tamaño fijo y es etiquetado con una dirección única, para ser administrado, esta transmisión es utilizada mayoritariamente en los dispostivos de almacenamiento como discos y cd.

    Por Caracter: La información se recibe o se envia mediante flujos secuenciales de longitud no fija(muy pequeños) es decir, es necesario seguir su orden de llegada/salida para su correcto funcionamiento, uno de los dispositivos más conocidos es el teclado o el mouse.

    Además, este sistema de E/S utiliza mecanismos(tanto hardware como software) que permiten que los dispositivos puedan interactuar. Algunos de ellos son:

    Interrupciones:
    Permiten que el dispositivo emita su estado al S.O ya sea que este listo para recibir/transmitir datos o realizando una operación.

    Buffer: Secciones de memoria que permiten almacenar datos mientras son transferidos

    Cache: Son secciones de memoria que contienen copias de datos lo que permite mayor velocidad en su acceso.

    Todo esto con la ayuda de algoritmos de planificación para el uso de los dispositivos hacen que los sistemas de E/S sean un factor importante, ya que una mala utilización podría provocar perdida no solo de tiempo de procesamiento sino de información que no puediera llegar desde o a los dispositivos.

    Saludos,

    LINUX VS MICROSOFT

    Viernes, Mayo 16th, 2008

    Lo que se ve para el futuro

    Esta quizá sea la una de las batallas informáticas de nunca terminar, pero se ve un futuro prometedor para Linux.

    En estos meses, Linux a sido el foco de informaciones, más allá del campo de la informática, para adentrarse, incluso, en una lucha de criterios ideológicos. Entre aquellos que se oponen al monopolio de Microsoft y el software libre representado por Linux.

    Pero en cuanto a esta guerra veamos una breve descripción de lo que se ha hecho en estos últimos tiempos.

    - Microsoft ha decidido comprar la licencia del sistema operativo Unix, propiedad de la   compañía SCO y rival de su propio sistema Windows. Con esta compra, Microsoft trata de evitar problemas en los tribunales.

    - “El  pingüino perderá frente a Microsoft” sostienen una y otra vez, en los cinco continentes, los máximos ejecutivos de la compañía presidida por el multimillonario Bill Gates. El pingüino es el símbolo de Linux, principal competencia de Windows y que tiene en ascuas a la todavía monopólica empresa, creadora del popular sistema operativo (SO), que usan más de 350 millones de Pcs en todo el mundo. Fue IBM quien convirtió a Windows en el estándar de los  SO, cuando al lanzar el primer personal computer se decidió por el software (entonces DOS) de Microsoft, confiando en que la modesta empresa fundada por un inquieto Bill Gates, no supondría un problema para ellos. Craso error, el campo cedido por IBM se ha transformado a lo largo de la última década, en el mayor campo de batalla del software y un particular calvario para IBM.

    - Así como Microsoft vive ese particular calvario con IBM debido a Linux, IBM ve venir las amenazas por parte de SCO (propietaria de Unix) que demandó al gigante azul por utilizar Linux en sus servidores. Según SCO, el código fuente de la creación de Torvalds contiene fragmentos copiados de Unix, por los que nadie pagó derechos.  Kieran O´Shaugnessy, alto ejecutivo de SCO sostiene que “Linux no existe, es simplemente una versión sin licencia de Unix. Nuestra compañía es víctima de una campaña de odio emprendida por los medios de comunicación e iniciada por IBM, como parte del litigio que enfrenta a nuestras compañías respecto del código fuente de Linux”.

    - Varias cosas se han dicho para distorcionar la verdad, y para acabar con linux como:

    -  MS descalifica Linux porque es un sistema operativo basado en Unix (sistema operativo con más de 30 años de historia) y no está diseñado “para soportar procesos paralelos simétricos, interfaces gráficos de usuario, entrada/salida asíncrona, y seguridad máxima”. Quizás convendría refrescar la memoria a alguno de los ingenieros de MS porque los primeros interfaces gráficos no provienen de MS, sino de Unix con el conocido sistema de ventanas X-Window. Es más, el primer intento de acercar los interfaces gráficos a los usuarios no técnicos proviene de Apple, con sus conocidos Mac, descaradamente copiados en las primeras versiones de Windows. En cuanto a los procesos paralelos, la mayoría de los super-ordenadores que trabajan con procesamiento paralelo, trabajan con sistemas operativos tipo-Unix. Y para cerrar, el tema de la seguridad. Provoca sorpresa que hablen de seguridad los creadores de los primeros sistemas operativos para los que los virus son el pan nuestro de cada día.

    Ahora la dicisión la toma usted….

    Por: Argenis Riofrío

    COMANDOS BÁSICOS EN LINUX

    Viernes, Mayo 16th, 2008

    Cuando uno comienza a utilizar linux, por lo general no se sabe por donde comenzar, pues ahora espero que esto les sea de mucha ayuda para que ustedes tengan una breve pero muy buena ayuda para tener un buen comienzo.

    1. hostname

    Imprime el nombre del local host en donde estás trabajando.

    2. whoami

    Imprime el nombre de usuario en la pantalla, y puede resultar extremandamente útil cuando se cambia de usuario con su.

    3. id username
    Imprime el UID del usuario y su GID, effective ID y grupos suplementarios.

    4. date

    Imprime o cambia la fecha y la hora del sistema operativo. También se podria utilizar un servidor ntp para tener todos los sistemas con el mismo horario cada vez que se encienden.

    5. time

    Determina la cantidad de tiempo que le toma a un proceso completarse + otra información. El ejemplo que se dá es:

    • time ls

    Para ver el tiempo que toma hacer un listado con ls.

    6. who
    Determina los usuarios logueados en el sistema.

    7. rwho -a

    Determina todos los usuarios logueados en la red. El servicio debe estar activado para ejecutar el comando o se debe ser usuario root.

    8. finger user_name
    Información del sistema sobre un usuario.

    9. last
    Muestra un listado de los últimos usuarios logueados en el sistema.

    10. history | more
    Muestra los últimos ( 1000 aprox ) comandos ejecutados desde la línea de comandos. El “| more” hace que pare la salida por pantalla cada vez que se completa la salida. Redireccionar un comando hacia “more” resulta sumamente útil para diferentes propósitos, como se explica, para listados largos y para otras actividades corrientes en cualquier Gnu/Linux o Un*x.
    11. ps uptime
    Muestra el tiempo que pasó desde el último reboot.

    12. ps
    Lista los procesos actualmente ejecutados por un usuario.

    13. ps axu | more

    Lista todos los procesos actualmente corriendo, incluso aquellos que no son controlados por la terminal, junto con el nombre del usuario que es dueño del proceso.

    Agrego a lo anterior:

    • ps aux | grep nombredelprograma
    • kill -9 PID ( el pid correspondiente al nombre del programa que se busca terminar )

    Para que se reinicie un proceso, útil parar reiniciar un servicio y que éste lea otra vez su archivo de configuración:

    • kill -hup PID
    • killall nombredelprograma

    Este último comando termina todas las instancias de un programa indicando su nombre. No siempre funciona, y a veces es necesario recurrir a ps y grep para obtener el pid.

    14. top

    Muestra una lista de los procesos que estan corriendo actualmente, listados en orden según su consumo del cpu. Muy útil.

    15. uname -a

    Información sobre el servidor local. Versión del kernel, de Linux si es un sistema Gnu/Linux, o lo mismo para otros Un*x o BSD, además de información sobre el procesador.

    16. free
    Información sobre la memoria ( en kb ), libre y consumida, además de datos sobre la swap.

    17. df -h

    Muestra el espacio libre en Mb de una partición. El formato es df -h /dev/hda1 si queremos saber la cantidad de espacio en Mb libre en /dev/hda1. Agrego yo:

    • du -h

    Para saber, también en Mb, la cantidad de Mb que ocupa un directorio o un archivo.

    18. du / -bh | more
    Similar a lo anterior, pero mas específico y detallado. No tan útil como el df -h archivo o directorio.

    19. cat /proc/cpuinfo

    Para ver ( cat ) el contenido de la entrada cpuinfo del pseudofilesystem proc, en éste caso con información sobre el cpu.

    20. cat /proc/interrupts
    Lista las interrupciones en uso.

    21. cat /proc/version
    Lista la versión de Linux.

    22. cat /proc/filesystems
    Muestra los filesystem habilitados en el kernel. Muy útil.

    23. cat /etc/printcap
    Muestra la configuración de las impresoras.

    24. lsmod
    Muestra los módulos cargados en el sistema.

    25. echo $PATH
    Muestra el contenido de la variable $PATH.

    26. mount -o loop imagen.iso directorio/

    Para montar una imagen iso en un directorio sin necesidad de grabarla a CD o DVD. Deben ser root.

    27. cp -rv directorio/ /otrodirectorio/

    Copia un directorio entero manteniendo los permisos, dueños, links, y cualquier cualquier otra característica del directorio.

    28. netstat -putan | grep aplicación

    Información sobre el estado de una aplicación servidor o que trabaja con tráfico de red. También deberán ser root.

    29. w

    Muestra quien está logueado y qué está haciendo

    30. comando > archivo

    Redirecciona el contenido de un comando hacia archivo, por ejemplo:

    Por: Argenis Riofrío

    Productor Consumidor

    Jueves, Mayo 8th, 2008

    Se ha hablado mucho sobre sincronización y su implementación en varios lenguajes, como C, Pascal o C++ entre otros.

    En post anteriores detalle algunos procesos de sincronización dentro de Java, solo con la implementación de objetos y emulando el uso de los mismos con la detención del hilo principal de la aplicación, (en java por cada aplicaciones existe al menos un Thread principal), pero ahora pongo a su consideración el siguiente ejemplo basado en el problema de “Productor consumidor”.
    La aplicación resuelve el siguiente problema, existen dos procesos(un consumidor y un productor) que tienen como recurso compartido una sección de memoria(en mi caso un buffer) y deberían funcionar de tal manera que el consumidor solo pueda recoger la información si el productor ya ha colocado algo dentro y viceversa.
    Bueno, mi aplicación utiliza dos Thread uno para consumidor y otro para productor y como recurso compartido se creará un pequeño objeto que me permita almacenar un número entero que el consumidor irá sumando 5 veces.
    Para controlar el acceso a sus métodos utilizaré para cada uno el atributo Synchronized que implementa java en su API y que permite que solamente un hilo a la vez ingrese a este método.
    Ahora bien, el control de acceso tiene que ser en orden, para implementar esto en código utilizo una variable entera cuyo valor determinará cual de los hilos podrá acceder para leer/escribir el valor.
    Además se utilizan las sentencias wait() para indicar a cualquiera de los hilos que deberá esperar si el buffer esta ocupado y también la sentencia notify() para indicar que el buffer ha sido desocupado. Recuerda que en este caso la sentencia notify() es válida pues solo utilizamos dos hilos, si necesitáramos más tendríamos que hacer uso de notifyAll().

    A continuación una captura de la ejecución,

    Ejecución

    Todo indica que la aplicación puede controlar la ejecución de dos hilos que manejan recursos compartidos, verdad? Si deseas descargarla puedes acceder aquí, la aplicación esta en java y bajo el IDE NetBeans 6.0

    Saludos,