miércoles, 22 de octubre de 2014

Primitivas Enviar y Recibir

Primitivas enviar y Recibir
Algunos kernel tienen operaciones específicas ajustadas a la invocación remota. Amoeba, por ejemplo, tiene DoOperation/GetRequest--SendReply. Es más eficiente que el simple Send-Receive (y más fiable y legible). Amoeba y otros sistemas tienen también comunicación con grupos o radiado (parcial) (broadcast). Es importante para tolerancia de fallos, mejora de rendimiento y reconfigurabilidad. Diversas variantes: como mensajes, como múltiples RPCs, con un sólo valor devuelto, con varios valores devueltos (todos juntos o pidiendo uno a uno), etc. En la práctica, mecanismos de comunicación de alto nivel tales como RPC/RMI, radiado y notificación de sucesos (parecido a los manejadores de interrupciones), se implementan en middleware y no en el kernel.  Normalmente, sobre un nivel TCP/IP, por razones de transportabilidad, (aunque resulta ``caro")
La IPC ofrece un mecanismo que permite a los procesos comunicarse y sincronizar sus acciones. La mejor forma de proveer la comunicación entre procesos es mediante un sistema de mensajes. La función de un sistema de mensaje es permitir a los procesos comunicarse entre sí sin tener que recurrir a variables compartidas. Un recurso IPC ofrece por los menos 2 operaciones: - enviar (mensaje) (send) y recibir (mensaje) (receive). Sea P y Q dos procesos que requieren comunicarse deberán enviarse mensajes; para ello debe existir un enlace de comunicación entre ellos. Este enlace puede implementarse de diversas maneras. Los métodos para implementar lógicamente un enlace y las operaciones de enviar / recibir son:
Comunicación directa o indirecta
Uso de buffer automático o explícito
Envío por copia o envío por referencia

Mensajes de tamaño fijo o variables

Buzones (Mailboxes)


Los Buzones o Mailboxes 

     Se trata de un espacio físico, perteneciente a una unidad de disco, en la que se almacenan los mensajes del usuario. Dichos mensajes albergan todo tipo de información como documentos comprimidos, música, fotos y videos. Entre ellos tenemos muy utilizados hoy en día:

Buzones (Mailboxes)

Un mailbox es una forma de intercomunicación indirecta, los mensajes son enviados y recibidos desde el mismo. Un mailbox puede ser visto en forma abstracta como un objeto en el cual los mensajes son colocados por los procesos y desde el cual los mensajes son leídos. Cada mailbox tiene una identificación única. Dos procesos pueden comunicarse solamente si acceden ambos a un mailbox compartido. Conceptualmente las primitivas fundamentales son Send (mailbox, mensaje) y Receive (mailbox, mensaje).
En el contexto del sistema operativo Open/VMS, un mailbox es un dispositivo virtual usado para la comunicación entre procesos. Usando las llamadas a sistema para abrir, leer, escribir y cerrar archivos de entrada/salida, podemos acceder al mismo. El primer paso para utilizar un mailbox es crearlo, el sistema provee servicios para hacerlo.
Los mailbox pueden ser temporarios o permanentes. Por defecto son temporarios y eliminados cuando no existe un canal de entrada/salida asociado a él, si el mailbox es permanente se debe eliminar con una llamada a sistema. Para escribir y leer datos de un mailbox, tenemos varias opciones:
  • En forma sincrónica: se lee o escribe al mailbox y se espera hasta que el proceso que coopera ejecute la operación opuesta. Se utilizan sentencias convencionales de entrada/salida en el lenguaje de programación.
  • En forma inmediata: el proceso lee o escribe el mensaje en la cola del mailbox y continúa su ejecución normal después que la operación se completa. Es decir si al intentar leer un mensaje desde la cola no existe ninguno, queda en estado de espera, hasta que lea uno.
  • Asincrónico: se deja la solicitud de lectura o escritura en la cola y sé continua la ejecución del programa mientras el pedido se ejecuta. Cuando la lectura o escritura completa, el bloque donde van los datos es llenado en caso de lectura, un flag cambia de estado, y ejecuta una rutina asincrónica, en caso de haberse especificado.
Para la comunicación entre los servidores y el monitor transaccional, se utilizan los mailbox de tipo inmediato.
Cada servidor crea un mailbox, y publica un nombre lógico accesible desde cualquier proceso que pertenezca al grupo de la aplicación transaccional. Cuando un mensaje requiere el procesamiento de la transacción, en un campo de la transacción esta incluido el nombre del servidor que lo debe atender. El monitor transaccional extrae el nombre, ubica el nombre lógico del mailbox del servidor correspondiente y deja en la cola el mensaje con la transacción a procesar, el monitor transaccional luego de dejar el mensaje continúa su ejecución normal.
Los mailbox de acceso inmediato, se utilizan para enviar un mensaje a otro proceso sin esperar por una respuesta del mismo.
Es posible que un mailbox inmediato contenga mas de uno o ningún mensaje cuando un proceso lee. Si el mailbox contiene mas que un mensaje, la operación de lectura recupera los mensajes uno a la vez en el orden que ellos fueron escritos. Si el mailbox no contiene mensajes, la lectura genera un error de fin de archivo. Es responsabilidad de los procesos coordinar la entrada y salida de mensajes del mailbox. Un proceso podría leer un mensaje dejado en el mailbox por él mismo. Normalmente dos mailboxes se utilizan para la intercomunicación entre procesos, uno para enviar datos desde el monitor transacional al servidor y otro para enviar datos desde el servidor al monitor transaccional. En el modelo de implementación, cada servidor tiene su propio mailbox para recibir mensajes del monitor transaccional, y el monitor transaccional tiene un mailbox para recibir mensajes desde todos los servidores transaccionales.

Interfaces del usuario, administración de recursos, archivos y tareas

Interfaces del usuario
Es la parte del sistema operativo que permite comunicarse con él, de tal manera que se puedan cargar programas, acceder archivos y realizar otras tareas. Existen tres tipos básicos de interfaces: las que se basan en comandos, las que utilizan menús y las interfaces gráficas de usuario.
Administración de recursos
Sirven para administrar los recursos de hardware y de redes de un sistema informático, como la CPU, memoria, dispositivos de almacenamiento secundario y periféricos de entrada y de salida.
Administración de archivos

Un sistema de información contiene programas de administración de archivos que controlan la creación, borrado y acceso de archivos de datos y de programas. También implica mantener el registro de la ubicación física de los archivos en los discos magnéticos y en otros dispositivos de almacenamiento secundarios.
Administración de tareas
Los programas de administración de tareas de un sistema operativo administran la realización de las tareas informáticas de los usuarios finales. Los programas controlan que áreas tiene acceso al CPU y por cuánto tiempo. Las funciones de administración de tareas pueden distribuir una parte específica del tiempo del CPU para una tarea en particular, e interrumpir al CPU en cualquier momento para sustituirla con una tarea de mayor prioridad.
Servicio de soporte
Los servicios de soporte de cada sistema operativo dependerán de la implementación particular de éste con la que estemos trabajando. Entre las más conocidas se pueden destacar las implementaciones de Unix, desarrolladas por diferentes empresas de software, los sistemas operativos de Apple Inc., como Mac OS X para las computadoras de Apple Inc., los sistemas operativos de Microsoft, y las implementaciones de software libre, como GNU/Linux o BSD producidas por empresas, universidades, administraciones públicas, organizaciones sin fines de lucro y/o comunidades de desarrollo. Estos servicios de soporte suelen consistir en:
  • Actualización de versiones.
  • Mejoras de seguridad.
  • Inclusión de alguna nueva utilidad (un nuevo entorno gráfico, un asistente para administrar alguna determinada función, etc).
  • Controladores para manejar nuevos periféricos (este servicio debe coordinarse a veces con el fabricante del hardware).
  • Corrección de errores de software.

Comunicación y sincronización de los Sistemas Operativos

Un Sistema Operativo es un software básico que controla una computadora. El sistema operativo tiene tres grandes funciones: coordina y manipula el hardware del ordenador o computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el mouse; organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnéticas, y gestiona los errores de hardware y la pérdida de datos. Un sistema operativo es un programa que controla la ejecución de los programas de aplicación y que actúa como interfaz entre el usuario de un computador y el hardware de la misma.
La comunicación y la sincronización como herramientas, se han ido desarrollando y optimizando con la evolución de los SO. Desde los inicios de la era de la computación y la informática, La comunicación ha permitido el libre compartimiento de información entre diferentes casas de software, por la sencilla razón de permitir al usuario final tener la libertad de explorar a través de redes, www y otros medios de enlaces. Llevando estas palabras a términos un poco mas técnicos debemos mencionar los siguiente mecanismo comunicación que han sido pionero en este tema.

Comunicación y sincronización  de los Sistemas Operativos
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 computo. La sincronización entre procesos es necesaria para prevenir y/o corregir errores de sincronización debidos al acceso concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos contendientes. La sincronización entre procesos también permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones especificas de precedencia impuestas por el problema que se resuelve.
Si hay una de comunicación y 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 mas un proceso entre a la vez en la sección critica de código en la que se actualiza una variable compartida o estructura de datos en particular.
Los sistemas operativos, en su condición de capa software que posibilitan y simplifica el manejo de la computadora, desempeñan una serie de funciones básicas esenciales para la gestión del equipo. Entre las más destacables, cada una ejercida por un componente interno (módulo en núcleos monolíticos y servidor en micronúcleos), podemos reseñar las siguientes:

  • Proporcionar más comodidad en el uso de un computador. 
  • Gestionar de manera eficiente los recursos del equipo, ejecutando servicios para los procesos (programas)
  • Brindar una interfaz al usuario, ejecutando instrucciones (comandos). 
  • Permitir que los cambios debidos al desarrollo del propio SO se puedan realizar sin interferir con los servicios que ya se prestaban (evolutividad).
  • Un sistema operativo desempeña 5 funciones básicas en la operación de un sistema informático: suministro de interfaz al usuario, administración de recursos, administración de archivos, administración de tareas y servicio de soporte y utilidades.