sábado, 18 de octubre de 2014


REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD ALEJANDRO DE HUMBOLT
CÁTEDRA: SISTEMAS OPERATIVOS II





Comunicación y sincronización de los sistemas operativos





Autores:
Baldan Juan
Chirinos Mervin
_____________________________________________________________________________________________


INTRODUCCIÓN
La comunicación entre procesos; es la comunicación necesaria, sí se desea que varios procesos puedan colaborar para realizar una misma tarea. La sincronización de procesos; es el funcionamiento coordinado en la resolución de una tarea encomendada.

Los sistemas operativos ofrecen mecanismos básicos de comunicación, que permiten transferir cadenas de bytes. Deben ser los procesos que se comunican quienes interpreten el significado de las cadenas transferidas para su labor coordinada.

Los mecanismos de comunicación y sincronización son dinámicos, es decir, cuando se necesita un mecanismo de este estilo, se crea, se usa y se destruye, de forma que no se establezca de manera definitiva ningún mecanismo de comunicación, ya que ellos podrían producir efectos indeseados. En pocas palabras la comunicación es algo puntual. Los servicios básicos de comunicación son:

  • Crear: el proceso solicita la creación del mecanismo.
  • Enviar o escribir: el proceso emisor envía información al proceso receptor.
  • Recibir o leer: el proceso receptor recibe información.
  • Destruir: el proceso solicita la destrucción del mecanismo de comunicación.

La comunicación puede ser síncrona; donde los dos procesos han de ejecutar servicios de forma simultánea. El emisor ha de ejecutar el servicio enviar mientras el receptor ejecuta el servicio recibir. La comunicación también puede ser asíncrona; donde el emisor hace el envío y prosigue su ejecución. El sistema operativo ofrece un almacenamiento intermedio para guardar la información enviada, hasta que el receptor la solicite.
_____________________________________________________________________________________________


Comunicación y sincronización de los sistemas operativos
Los procesos que se ejecutan de forma concurrente en un sistema se pueden clasificar como procesos independientes o cooperantes. Un proceso independiente es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes intérpretes de mandatos que se ejecutan de forma simultánea en un sistema. Los procesos son cooperantes cuando están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.

 Tanto si los procesos son independientes como cooperantes, pueden producirse una serie de interacciones entre ellos. Estas interacciones pueden ser de dos tipos:

  • Interacciones motivadas porque los procesos que comparten o compiten por el acceso a recursos físicos o lógicos. Esta situación aparece en los distintos tipos de procesos anteriormente comentados. Como ejemplo; dos procesos totalmente independientes pueden competir por el acceso a disco. En este caso, el sistema operativo deberá encargarse de que los dos procesos accedan ordenadamente sin que se cree ningún conflicto. Esta situación también aparece cuando varios procesos desean modificar el contenido de un registro de una base de datos. Aquí es el gestor de la base de datos el que se tendrá que encargar de ordenar los distintos accesos al registro.

  • Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común. Por ejemplo; un compilador se puede construir mediante dos procesos: el compilador propiamente dicho, que se encarga de generar código ensamblador, y el proceso ensamblador, que obtiene código en lenguaje máquina a partir del ensamblador. En este ejemplo puede apreciarse la necesidad de comunicar y sincronizar a los dos procesos.

Estos dos tipos de interacciones obligan al sistema operativo a incluir mecanismo y servicios que permitan la comunicación y la sincronización entre procesos.


Indicadores de eventos más comunes
Haciendo enfoque sobre los sistemas, los indicadores de eventos pueden ser cualquier aviso, advertencia, informe, señal o notificación, con la cual el sistema proporcione alguna información útil para el usuario final o para su propio beneficio. Entre estos indicadores podemos mencionar:

Avisos: son los que proporcionan alertas sobre situaciones en la cual pueden ocurrir sucesos perjudiciales para el sistema o archivos del usuario.

Alertas: proporcionan información sobre estados críticos del sistema o de las aplicaciones.

Ayuda: proporcionan tips, consejos y guías para el uso correcto y eficaz del sistema.

Información: son los que muestran información de acontecimientos del sistema o algún hecho relevante.

Solicitudes: notifican al usuario que alguna aplicación requiere información delicada o permisos adicionales y requiere una respuesta de afirmación o rechazo ante dicho suceso.


Buzones (mailboxes)
Son mecanismos que permiten a los procesos intercambiar información durante su ejecución, mediante el envió de mensajes entre procesos. Se basa en la utilización de una zona de memoria compartida que gestiona el sistema operativo directamente y que por tanto, permanecerá oculta a los procesos. De esta manera el proceso que tiene la necesidad de enviar un mensaje a otro, deposita la información en esta zona de memoria compartida y el receptor lo lee posteriormente.

Las llamadas al sistema operativo para enviar o recibir mensajes sincronizan los procesos, ya que éstos tendrán que esperar por los mismos antes de continuar su ejecución y procesamiento. Existen dos posibles tipos de comunicación:

Directa: los procesos envían y reciben los mensajes directamente entres sí, de manera que se asocia un enlace bidireccional único entre cada dos procesos. La principal desventaja de este esquema es que cada proceso debe conocer exactamente el nombre del destinatario o el remitente de los mensajes.

Indirecta: los mensajes se envían y reciben a través de los mailboxes o buzones de correo, cada uno de estos buzones tiene un único identificativo que le distingue de los demás. Con este método cada proceso puede estar conectado al número de buzones que desee, consiguiendo comunicarse con cualquier número de procesos.

Hay que destacar que la comunicación entre dos procesos sólo se podrá realizar si comparten un buzón, que puede ser unidireccional o bidireccional. Cada buzón puede ser compartido por varios procesos y cada proceso puede tener varios buzones asociados.

Con los buzones se pueden emplear cuatro formas diferentes de comunicación:

Buzón limitado: de un proceso a otro.

Buzón de entrada: de varios a uno.

Buzón de salida: de uno a varios.

Buzón múltiple: varios procesos entre sí con el mismo buzón.


Almacenamiento y archivos compartidos
Un archivo o fichero informático es una entidad lógica compuesta por una secuencia finita de bytes, almacenada en un sistema de archivos ubicada en la memoria secundaria de un ordenador. Los archivos son agrupados en directorios dentro del sistema de archivos y son identificados por un nombre de archivo. El nombre forma la identificación única en relación a los otros archivos en el mismo directorio.

Los archivos se utilizan cuando se desea almacenar datos de manera persistente, o para guardarlos en memoria secundaria con el fin de no utilizar memoria primaria, dado que esta última es normalmente más escasa que la anterior.

Dependiendo de cada sistema de archivos, los ficheros pueden tener atributos particulares como, por ejemplo, fecha de creación, fecha de última modificación, dueño y permisos de acceso. El tipo de un archivo es caracterizado por la organización de los datos contenidos y la interpretación que realiza el software que los escribe o los lee.

Para cualquier sistema ordenado, las unidades de almacenamiento son aquellas que permiten guardar física o virtualmente archivos de datos de todo tipo. Específicamente en la informática, las unidades de almacenamiento serán todos aquellos dispositivos, internos o externos, que almacenan la información de un sistema dado. Los dispositivos diferirán entre sí en forma, tamaño y uso, pero en conjunto todos contribuyen a la conservación de datos relevantes.

Los aspectos claves para elegir la tecnología de almacenamiento incluyen: confiabilidad, capacidad, rendimiento, complejidad, facilidad de administración y costo.

El uso compartido de archivos permite que los usuarios puedan compartir cualquier tipo de archivos, aplicaciones o información en línea, mediante una red informal de computadoras que operan el mismo software.

Los archivos de uso compartido son una propiedad de un archivo informático que tiene la característica de ser accedido o manipulado por múltiples personas, computadoras, sesiones o programas.

Los archivos pueden compartirse entre distintas computadoras de una red, con diferentes permisos para cada una de ellas, entre distintas computadoras por internet con programas especiales, entre ellos el peer to peer, entre distintas sesiones de usuarios de un sistema operativo o entre distintos programas que utilizan iguales archivos.

En los sistemas operativos no solo se decide quién puede ver un archivo, sino también que puede hacer con dicho archivo el destinatario, estos permisos son llamados permisos de uso compartido, en los cuales se dispone de dos opciones:

Lectura: con esta opción los usuarios pueden abrir un archivo, pero no modificarlo ni eliminarlo.

Lectura y escritura: con esta opción los usuarios pueden abrir, modificar o eliminar un archivo.


Primitivas enviar y recibir - Formatos de los mensajes (encabezado, cuerpo)
Un mensaje es un contenedor que se emplea para intercambiar información entre dos o más procesos. Los mensajes tienen un cierto formato generalmente compuesto por una cabecera, que contiene información sobre la fuente y el destinatario, y un cuerpo, que contiene información específica.

Los mecanismos de mensajería se refieren al conjunto de funcionalidades que permiten al sistema operativo realizar la entrega de un mensaje a uno o varios procesos. Mediante dicho mecanismo también es posible resolver problemas de concurrencia.

Los sistemas operativos generalmente ofrecen dos llamadas al sistema para que un proceso pueda enviar y recibir mensajes:

send(destino – mensaje): Envía un mensaje a un destino.

receive(fuente – mensaje): Recibe un mensaje de una fuente.

La primera llamada envía un mensaje a un destino dado, y la segunda recibe un mensaje de un origen dado (o de cualquiera si al receptor no le importa). Si no hay un mensaje disponible, el receptor podría bloquearse hasta que uno llegue. Como alternativa, podría regresar de inmediato con un código de error.

Los sistemas de transferencia de mensajes tienen muchos problemas y aspectos de diseño complicados que no se presentan con otros sistemas de transferencia como lo son los semáforos ni con los monitores, sobre todo si los procesos en comunicación están en diferentes máquinas conectadas por una red. Como ejemplo; se pueden perder mensajes en la red, para protegerse contra la pérdida de mensajes, el emisor y el receptor pueden convenir que, tan pronto como se reciba un mensaje, el receptor enviará de regreso un mensaje especial de acuse de recibo o confirmación. Si el emisor no recibe el acuse dentro de cierto intervalo de tiempo, retransmitirá el mensaje.

Por otro lado, si el mensaje en sí se recibe correctamente, pero se pierde el acuse de recibo, el emisor retransmitirá el mensaje, de modo que el receptor lo recibirá dos veces. Es indispensable que el receptor pueda distinguir un mensaje nuevo de la retransmisión de uno viejo. Por lo general, este problema se resuelve incluyendo números de secuencias consecutivas en cada mensaje original. Si el receptor recibe un mensaje que tiene el mismo número de secuencia que uno anterior, sabrá que el mensaje es un duplicado y podrá ignorarlo.

La verificación de autenticidad es otro problema en los sistemas de mensajes: ¿Cómo puede el cliente saber que se está comunicando con el verdadero servidor de archivos y no con un impostor?

En el otro extremo del espectro, hay aspectos de diseño que son importantes cuando el emisor y el receptor están en la misma máquina. Uno de éstos es el rendimiento. El copiado de mensajes de un proceso a otro siempre es más lento que efectuar una operación de semáforo o entrar en un monitor.


Aplicación a partir de un sistema operativo
Son programas que utilizan los servicios básicos del sistema operativo (por eso dependen de él) y realizan una gestión concreta y especializada, entre las aplicaciones más comunes tenemos:

Procesadores de texto: aplicaciones diseñadas para editar y/o procesar texto, logrando documentos de alta calidad.

Hojas de cálculo: aplicaciones especialmente diseñadas para introducir, calcular, manipular y analizar conjuntos de números.

Presentaciones automatizadas: aplicaciones que permiten al usuario crear y editar presentaciones atractivas, incluyendo imágenes y sonidos.

Navegadores de Internet: aplicaciones diseñadas para proveer acceso a Internet, sus servicios y sus recursos.

Administradores de bases de datos: aplicaciones diseñadas para acceder, almacenar y procesar grandes colecciones de datos, en una forma eficiente.

Desarrolladores de sitios web: aplicaciones que brindan al usuario las herramientas necesarias para diseñar, crear, editar y publicar páginas y sitios Web.

Multimedia: Programas orientados a la creación de material donde usted podrá combinar imágenes, sonido y texto para desarrollar material atractivoen la computadora.

Antivirus: Programas orientados a la protección de las computadoras que hayan sido infectadas por virus. Los virus son programas introducidos imprevistamente en la memoria de una computadora que al activarse, destruye total o parcialmente la información almacenada.

Programas de comunicación: Programas orientados a la comunicación entre computadoras. Por lo general son utilizados cuando se maneja una red de computadoras, o se quiere dar soporte a distancia de una computadora a otra.

Suelen ir unidos al hardware que soporta el tipo de interconexión requerido: red de área local, conexión a fax, a módem, entre otros. Este software tiene un carácter básico en los grandes ordenadores, puesto que su forma de trabajo normal requiere el enlace permanente con un gran número de usuarios y periféricos.

Lenguajes de programación: Los lenguajes de programación nos permiten crear aplicaciones para resolver problemas específicos de empresas o personas a través de la computadora. Un lenguaje de programación está formado por un conjunto de palabras (Instrucciones) y una serie de reglas para escribir adecuadamente estas palabras (sintaxis) con la finalidad de que sean entendibles por la computadora. Aclarando que un programa es un conjunto de instrucciones con secuencia lógica para realizar una tarea específica en la computadora.

Estos programas son los que emplean más frecuentemente los usuarios y su variedad está limitada sólo por los que los crean. Algunos programas o aplicaciones pueden realizar tareas amplias y variadas, otros están específicamente diseñados para solucionar problemas muy concretos.
_____________________________________________________________________________________________


CONCLUSIÓN
Finalmente podemos decir que en muchos casos, los procesos se reúnen para realizar tareas en conjunto, a este tipo de relación se le llama procesos cooperativos. Para lograr la comunicación, los procesos deben sincronizarse, de no ser así pueden ocurrir problemas no deseados. La sincronización es la transmisión y recepción de señales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos cooperativos.

Es la coordinación y cooperación de un conjunto de procesos para asegurar la comparación de recursos de cómputo. La sincronización entre procesos es necesaria para prevenir y corregir errores de sincronización debidos al acceso concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de entrada/salida, de procesos contendientes. La sincronización entre procesos también permite intercambiar señales de tiempo entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve.

Sin una sincronización adecuada entre procesos, la actualización de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles de depurar. Una de las causas principales de este problema es que procesos concurrentes puedan observar valores temporalmente inconsistentes de una variable compartida mientras se actualizan. Una aproximación para resolver este problema es realizar actualizaciones de variables compartidas de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo más un proceso entre a la vez en la sección crítica de código en la que se actualiza una variable compartida o estructura de datos en particular.
Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o suspender bajo determinadas circunstancias la ejecución de un proceso.