miércoles, 13 de julio de 2011

UNIDAD I LOS SISTEMAS OPERATIVOS EN SISTEMAS DISTRIBUIDOS

1.1 SISTEMAS DISTRIBUIDOS

Sistemas cuyos componentes hardware y software, están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor.
Concurrencia.- Esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.

Carencia de reloj global.- Las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, está más bien distribuida a los componentes.

Fallos independientes de los componentes.- Cada componente del sistema puede fallar independientemente, con lo cual los demás pueden continuar ejecutando sus acciones. Esto permite el logro de las tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.

Procesamiento central (Host).- Uno de los primeros modelos de ordenadores interconectados, llamados centralizados, donde todo el procesamiento de la organización se llevaba a cabo en una sola computadora, normalmente un Mainframe, y los usuarios empleaban sencillos ordenadores personales.

Grupo de Servidores.- Otro modelo que entró a competir con el anterior, también un tanto centralizado, son un grupo de ordenadores actuando como servidores, normalmente de archivos o de impresión, poco inteligentes para un número de Minicomputadores que hacen el procesamiento conectados a una red de área local.

La Computación Cliente Servidor.- Este modelo, que predomina en la actualidad, permite descentralizar el procesamiento y recursos, sobre todo, de cada uno de los servicios y de la visualización de la Interfaz Gráfica de Usuario. Esto hace que ciertos servidores estén dedicados solo a una aplicación determinada y por lo tanto ejecutarla en forma eficiente.


1.1.2 Modelo Cliente-Servidor
Sistema donde el cliente es una máquina que solicita un determinado servicio y se denomina servidor a la máquina que lo proporciona. Los servicios pueden ser:

·         Ejecución de un determinado programa.

·         Acceso a un determinado banco de información.

·         Acceso a un dispositivo de hardware.
  1.       1.1.1 Ventajas Desventajas contra Sistemas Centralizados

Ventajas

* Aumento de la disponibilidad

* Mejora del desempeño

* Balanceo en la carga de trabajo

* Compartición de recursos

* Compartición de información

* Confiabilidad, disponibilidad y tolerancia a fallas

* Modularidad en el desarrollo

* Flexibilidad

* Crecimiento incremental
* Reducción de costos

* Mayor capacidad de modelar estructuras organizacionales

Desventajas

* Uso ineficiente de los recursos distribuidos

* Capacidad reducida para administrar apropiadamente  grupos de procesadores y memoria localizada en distintos sitios

* Enorme dependencia del desempeño de la red y de la confiabilidad de la misma.

* Debilitamiento de la seguridad.

* Mayor complejidad en la administración y mantenimiento.

* Mayor complejidad en su construcción.

1.1.2 MODELO CLIENTE SERVIDOR


Desde el punto de vista funcional, se puede definir la computación Cliente/Servidor como una arquitectura distribuida que permite a los usuarios finales obtener acceso a la información en forma transparente aún en entornos multiplataforma.
En el modelo cliente servidor, el cliente envía un mensaje solicitando un determinado servicio a un servidor (hace una petición), y este envía uno o varios mensajes con la respuesta (provee el servicio). En un sistema distribuido cada máquina puede cumplir el rol de servidor para algunas tareas y el rol de cliente para otras.

La idea es tratar a una computadora como un instrumento, que por sí sola pueda realizar muchas tareas, pero con la consideración de que realice aquellas que son mas adecuadas a sus características. Si esto se aplica tanto a clientes como servidores se entiende que la forma más estándar de aplicación y uso de sistemas Cliente/Servidor es mediante la explotación de las PC’s a través de interfaces gráficas de usuario; mientras que la administración de datos y su seguridad e integridad se deja a cargo de computadoras centrales tipo mainframe. Usualmente la mayoría del trabajo pesado se hace en el proceso llamado servidor y el o los procesos cliente sólo se ocupan de la interacción con el usuario (aunque esto puede variar). En otras palabras la arquitectura Cliente/Servidor es una extensión de programación modular en la que la base fundamental es separar una gran pieza de software en módulos con el fin de hacer más fácil el desarrollo y mejorar su mantenimiento.
Esta arquitectura permite distribuir físicamente los procesos y los datos en forma más eficiente lo que en computación distribuida afecta directamente el tráfico de la red, reduciéndolo grandemente.
.

Unidad II Comunicación en los sistemas operativos distribuidos

2.1 Comunicación Sod
Llamada a procedimiento remoto (RPC)

En el anterior epígrafe hemos estudiado un modelo de interacción entre los procesos de un sistema distribuido que es el modelo cliente-servidor. Para implementarlo, el sistema dispone de dos llamadas al sistema, send y receive, que las aplicaciones utilizan de forma conveniente. Estas primitivas, a pesar de constituir la base de la construcción de los sistemas distribuidos, pertenecen a un nivel demasiado bajo como para programar de forma eficiente aplicaciones distribuidas.

2.1.1 Comunicacion Cliente Servidor Sockets

Cliente-Servidor es el modelo que actualmente domina el ámbito de comunicación, ya que descentraliza los procesos y los recursos. Es un Sistema donde el cliente es una aplicación, en un equipo, que solicita un determinado servicio y existe un software, en otro equipo, que lo proporciona.

Los servicios pueden ser;

a)      Ejecución de un programa. b)Acceso a una Base de Datos. c)Acceso a un dispositivo de hardware.

Solo se requiere un medio físico de comunicación entre las maquinas y dependerá de ala naturaleza de este medio la vialidad del sistema.

Definición de Socket: designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.

Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy versátiles y son un componente básico de comunicación entre interprocesos e intersistemas. Un socket es un punto final de comunicación al cual se puede asociar un nombre.

Para lograr tener un socket es necesario que se cumplan ciertos requisitos

1.Que un programa sea capaz de localizar al otro.
 2.Que ambos programas sean capaces de intercambiarse información.

Por lo que son necesarios tres recursos que originan el concepto de socket

a) Un protocolo de comunicaciones, que permite el intercambio de octetos.

b) Una dirección del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que identifica una computadora.

c) Un número de puerto, que identifica a un programa dentro de una computadora. Con un socket se logra implementar una arquitectura cliente-servidor. la comunicación es iniciada por uno de los programas (cliente). Mientras el segundo programa espera a que el otro inicie la comunicación (servidor). Un Socket es un archivo existente en el cliente y en el servidor.

Si un socket es un punto final de un puente de comunicaron de dos vías entre dos programas que se comunican a través de la red, ¿Cómo funciona?. Normalmente, un servidor funciona en una computadora específica usando un socket con un número de puerto específico. El cliente conoce el nombre de la maquina (hostname) o el IP, en la cual el servidor está funcionando y el número del puerto con el servidor está conectado.

Si el cliente lanza una demanda de conexión y el servidor acepta la conexión, este abre un socket en un puerto diferente, para que pueda continuar escuchando en el puerto original nuevas peticiones de conexión, mientras que atiende a las peticiones del cliente conectado. El cliente y el servidor pu8eden ahora comunicarse escribiendo o leyendo en sus respectivos sockets.


Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen cinco tipos de sockets.

El Cliente actúa de la siguiente forma.

1)      Establece una conexión con el servidor (Crea un socket con el servidor).

2)      Mandar mensajes al servidor o Esperar un mensaje de él. 

3)      Esperar su respuesta o contestarle (existen casos en que este paso no es necesario).

4)      Repetir los pasos 2 y 3 mientras sea necesario.

5)      Cerrar la conexión con el servidor.
2.1.2 Comunicacion con Rpc

RCP (REMOTE PROCEDURE CALL)

El mecanismo general para las aplicaciones cliente-servidor se proporciona por el paquete Remote Procedure Call (RPC). RPC fue desarrollado por Sun Microsystems y es una colección de herramientas y funciones de biblioteca. Aplicaciones importantes construidas sobre RPC son NIS, Sistema de Información de Red y NFS, Sistema de Ficheros de Red.

Un servidor RPC consiste en una colección de procedimientos que un cliente puede solicitar por el envío de una petición RPC al servidor junto con los parámetros del procedimiento. El servidor invocará el procedimiento indicado en nombre del cliente, entregando el valor de retorno, si hay alguno. Para ser independiente de la máquina, todos los datos intercambiados entre el cliente y el servidor se convierten al formato External Data Representation (XDR) por el emisor, y son reconvertidos a la representación local por el receptor. RPC confía en sockets estandard UDP y TCP para transportar los datos en formato XDR hacia el host remoto. Sun amablemente a puesto RPC en el dominio público; se describe en una serie de RFCs.

La comunicación entre servidores RPC y clientes es un tanto peculiar. Un servidor RPC ofrece una o más colecciones de procedimientos; cada conjunto se llama un programa y es idenficado de forma única por un número de programa. Una lista que relaciona nombres de servicio con números de programa se mantiene usualmente en /etc/rpc.

El stub cliente reúne luego los parámetros y los empaqueta en un mensaje. Esta operación se conoce como reunión de argumentos (parameter marshalling). Después que se ha construido el mensaje, se lo pasa a la capa de transporte para su transmisión (paso 2). En un sistema LAN con un servicio sin conexiones, la entidad de transporte probablemente sólo le agrega al mensaje un encabezamiento y lo coloca en la subred sin mayor trabajo (paso 3). En una WAN, la transmisión real puede ser más complicada.
2.1.3 Comunicacion en Grupo

La comunicación se clasifica deacuerdo al numero de usuarios alos que se le a enviado el mensaje.

-broadcast o difusion forzada un nodo emite todos los escuchan y solo contesta a quien va dirigido el mensaje

-multicast se entrega el msj a todos los anfitriones host que están compuestos de ciertas características.

-unicast o pointcast un nodo emite y otro recibe, solo escucha aquel a quien se dirigió el msj.

una clasificación adicional es la realizada en base a grupos

-listas de destinarios se tiene una lista de aquellos alos que se les enviara el mensaje.

-identificador de grupo se forman grupos y el msj es dirigido solo a los miembros de ese grupo.

-predicador de pertenencia se envía y otro recibe, solo escucha aquel a quien se dirigió el mensaje.

2.1.4 Tolerancia a Fallos
  1. Una caracteristica de los sistemas distribuidos, quelos difiere de los sistemas singulares, es la nocion para errores parciales. Un error parcial puede ocurrir cuando algun componente del sistema distrbuido falla, el fallo puede afectar el correcto funcionamiento de algunos componentes, pero a la vez dejar otros componentes sin afectarlos. A contrario de un sistema monousuario , el cual puede afectar a todo el sistema, apagandolo. Un punto importante en los sistemas distrbuidos , es contruirlos de tal forma que puede recupersarse automaticamente de fallos sin afectar el rendimiento Cuando un error ocurre el sistema deberia seguir operando de forma aceptable mientras se hacen las reparaciones.
  2. Para que un sistema distribuido pueda ser tolerante a fallos, se ocupan las siguientes caracteristicas: Disponibilidad Confiabilidad Seguridad Mantenimiento.
  3. Es definida por la propiedad de que el sistema esta listo para ser usado, en otras palabras se endiende que el sistema esta operando correctamente. Un sistema con alta disponibilidad es quel que puede trabajar en cualquier tiempo Se refiere a la propiedad de que el sistema puede trabajar continuamente sin fallos, en contraste a la disponibilidad, la confiabilidad se refiere en lapsos de tiempo, en vez de momentos instantaneos. Un sistema con alta confiabilidad, es quel que funciona por largos periodos de tiempo sin fallo algiuno.
  4. Se refiere a la situacion en la que un sistema falla temporalmente, no pasa nada grave, ejemplo son algunos sistemas que controlan plantas nucleares, si algunos de esos sitemas fallan, pueden traer consecuencias catastroficas. Se refiere a que tan rapido puede ser repadao un sitema . Un sistema con alto grado de mantenimiento es quel, que puede evitar o reparar fallas automaticamente.
  5. Transientales Intermitentes Permantes
  6. Son aquellos fallos que aparecen una vez y despues desaperecen aun cuando la misma operacion se repite. Son aquellos fallos que aparecen una vez y despues desaperecen y despues vuelven a aparecer y continua el siclo. Son aquellos fallos que aparecen y no desaparecen hasta que el componente erroneo es reemplazado o es arreglado el problema.
  7. TIPO DE FALLO DESCRIPCION FALLO CRASH El servidor se detiene, pero estaba operando correctamente. Fallo por Omision Omision de recibido Omision de envio Un servidor falla en responder a las peticiones El servidor falla en recibir mensajes El servidor falla en mandar mensajes Fallo de tiempo La respuesta del servidor no esta en el intervalo de tiempo especificado. Fallo de respuesta Fallo de valor Fallo de estado de transicion La respuesta del servidor es incorrecta El valor de la respuesta es incorrecto El servidor se desvia del flujo de control Fallo arbitriario El servidor produce fallos arbitrarios en tiempo indefinidos.
  8. Ocurre cuando el servidor se detiene prematuramente aun cuando instantes antes estaba funcionando correctamente, un aspecto importante de estos errores es que una vez que ocurren ya no responde el servidor. Ocurre cuando el servidor no responde y se puede deber a varias razones, una de las principales es que no se establecio correctamente la conexion con el servidor.
  9. Ocurren cuando se da la respuesta fuera del intervalo de tiempo Cuando ocurren este tipo de fallos, usualmente el servidor lanza respuestas incorrectas y que son dificiles de detectar
  10. Si un sistema debe ser tolerante a fallos, lo mejor que puede hacer es esconder esos errores de otros procesos. La tecnicla clave es usando la Redundancia. Los tipos de redundancia a usar: Redundancia de tiempo Redundancia de Informacion Redundancia fisica
2.2 Sincronizacion Sistemas Distribuidos

En sistemas con una única CPU las regiones críticas, la exclusión mutua y otros problemas de sincronización son resueltos generalmente utilizando métodos como semáforos y monitores. Estos métodos no se ajustan para ser usados en sistemas distribuidos ya que invariablemente se basan en la existencia de una memoria compartida.

No es posible reunir toda la información sobre el sistema en un punto y que luego algún proceso la examine y tome las decisiones.

En general los algoritmos distribuidos tienen las siguientes propiedades:

1)- la información relevante está repartida entre muchas máquinas

2)- los procesos toman decisiones basadas solamente en la información local disponible

3) - debería poder evitarse un solo punto que falle en el sistema

4)- no existe un reloj común u otro tiempo global exacto

Si para asignar un recurso de E/S un proceso debe recolectar información de todos los procesos para tomar la decisión esto implica una gran carga para este proceso y su caída afectaría en mucho al sistema.

2.2.1 Relojes Fisicos

Los valores de tiempo asignados a los eventos no tienen porqué ser cercanos a los tiempos reales en los que ocurren. En ciertos sistemas (ej.: sistemas de tiempo real ), es importante la hora real del reloj: Se precisan relojes físicos externos (más de uno). Se deben sincronizar: Con los relojes del mundo real. Entre sí. La medición del tiempo real con alta precisión no es sencilla. Desde antiguo el tiempo se ha medido astronómicamente.

Se considera el día solar al intervalo entre dos tránsitos consecutivos del sol, donde el tránsito del sol es el evento en que el sol alcanza su punto aparentemente más alto en el cielo.

El segundo solar se define como 1 / 86.400 de un día solar.

Como el período de rotación de la tierra no es constante, se considera el segundo solar promedio de un gran número de días.

Los físicos definieron al segundo como el tiempo que tarda el átomo de cesio 133 para hacer 9.192.631.770 transiciones:

Se tomó este número para que el segundo atómico coincida con el segundo solar promedio de 1958. La Oficina Internacional de la Hora en París (BIH) recibe las indicaciones de cerca de 50 relojes atómicos en el mundo y calcula el tiempo atómico internacional (TAI). Como consecuencia de que el día solar promedio (DSP) es cada vez mayor, un día TAI es 3 mseg menor que un DSP:

La BIH introduce segundos de salto para hacer las correcciones necesarias para que permanezcan en fase: El sistema de tiempo basado en los segundos TAI. El movimiento aparente del sol. Surge el tiempo coordenado universal (UTC). El Instituto Nacional del Tiempo Estándar (NIST) de EE. UU. y de otros países: Operan estaciones de radio de onda corta o satélites de comunicaciones. Transmiten pulsos UTC con cierta regularidad establecida (cada segundo, cada 0,5 mseg, etc.). Se deben conocer con precisión la posición relativa del emisor y del receptor: Se debe compensar el retraso de propagación de la señal. Si la señal se recibe por módem también se debe compensar por la ruta de la señal y la velocidad del módem. Se dificulta la obtención del tiempo con una precisión extremadamente alta.


2.2.2 Relojes Logicos

Las computadoras poseen un circuito para el registro del tiempo conocido como dispositivo reloj.

Es un cronómetro consistente en un cristal de cuarzo de precisión sometido a una tensión eléctrica que:

·         Oscila con una frecuencia bien definida que depende de:

ü  Al forma en que se corte el cristal.

ü  El tipo de cristal.

ü  La magnitud de la tensión.

·         A cada cristal se le asocian dos registros:

ü  Registro contador.

ü  Registro mantenedor.

·         Cada oscilación del cristal decrementa en “1” al contador.

·         Cuando el contador llega a “0”:

ü  Se genera una interrupción.

ü  El contador se vuelve a cargar mediante el registro mantenedor.

·         Se puede programar un cronómetro para que genere una interrupción “x” veces por segundo.

·         Cada interrupción se denomina marca de reloj.

Para una computadora y un reloj:

·         No interesan pequeños desfasajes del reloj porque:

ü  Todos los procesos de la máquina usan el mismo reloj y tendrán consistencia interna.

ü  Importan los tiempos relativos. 
2.3 Nominacion caracteristicas y Estructuras

La nominación es una correspondencia entre objetos de datos lógicos y físicos. Por ejemplo, los usuarios tratan con objetos de datos lógicos representados por nombre de archivos, mientras que el sistema manipula bloques de datos físicos almacenados en las pistas de los discos. Generalmente un usuario se refiere a un archivo utilizando un nombre , el cual se transforma en un identificador numérico de bajo nivel, que a su vez se corresponde con bloques en disco. Esta correspondencia multinivel ofrece a los usuarios la abstracción de un archivo, que oculta los detalles de cómo y donde se almacena el archivo en disco.

En un SAD transparente se agrega una nueva dimensión de abstracción ..: la ocultación de la ubicación de los archivos de la red. En un sistema de archivos convencionales la función de nominación produce como resultado un intervalo de direcciones en disco, en un SAD este intervalo crece para incluir la máquina especifica en cuyo disco se almacena el archivo. Si se extiende un poco mas el tratamiento de los archivos como abstracciones, llegamos a la posibilidad de replicas de archivos. Dado un nombre de archivo, la correspondencia devuelve un conjunto de posiciones de las replicas de este archivo. En esta abstracción se ocultan tanto la experiencia de copias como su ubicación.

Estructuras de Nominación ..:

Existen dos conceptos que hay que distinguir en relación con al correspondencia de nombres en un SAD.

Transparencia de Nominación, El nombre de archivo no revela ningún indicio sobre de la ubicación del almacenamiento físico del archivo.

Independencia de Ubicación, No es necesario modificar el nombre de un archivo cuando cambia su ubicación en el almacenamiento físico.

Esquema de Nominación ..:

Hay tres enfoques principales para los esquemas de nominación en un SAD. En el enfoque mas sencillo, los archivos se nombran con una combinación del nombre de su anfitrión y su nombre local , lo que garantiza un nombre único dentro de todo el sistema. Por ejemplo, en Ibis, un archivo se identifica de manera única con el Nombre Anfitrión Local, donde nombre local es una ruta semejante a las de UNIX.


Para poder ejecutar instrucciones, si no sabemos en qué parte de la memoria estarán cargadas, debemos tener un mecanismo de traducción de direcciones virtuales a reales. Para ello, se necesitan dos cosas. Primero, el compilador manejará una dirección base más un desplazamiento al referirse a las instrucciones. Segundo, el sistema operativo asignará como dirección base el número de página, al paginar al proceso. De esta manera, puede buscarse el inicio de una página en memoria, sumarle el desplazamiento y así obtener la dirección real de una instrucción.

Nótese que en el diagrama se tiene una tabla de proceso y ahí mismo se maneja la dirección inicial de la tabla de páginas. En algunos sistemas operativos, estas dos tablas se manejan por separado.

La traducción de direcciones virtuales para segmentos se maneja de manera similar.

Existe un esquema adicional, paginación/segmentación, que es la combinación de ambos. La memoria se divide en marcos de página, idealmente más pequeños que el tamaño del marco de página en un sistema de paginación tradicional. Cada segmento está compuesto por cierto número de páginas. Es decir, el tamaño del segmento es un múltiplo del tamaño de página. Este esquema pretende sacar ventaja de los beneficios de los otros dos. Este mismo mecanismo de traducción de direcciones virtuales puede aplicarse en paginación/segmentación.

Recordemos que este mapeo debe efectuarse siempre, instrucción por instrucción ejecutada. Por ello, entre más rápido sea el mecanismo, mejor. Existe una manera de mejorar dicho mecanismo mediante hardware.

Una memoria asociativa es muy cara, pero permite buscar en toda la memoria en un mismo pulso de reloj. Implementando memoria asociativa, podemos traducir direcciones para páginas o segmentos.

Sin embargo, el utilizar memoria asociativa implica que el número de marcos de página y/o el número de segmentos, se ve limitado por el tamaño de la memoria asociativa. Es decir, no puede haber más marcos de página que número de celdas en la memoria asociativa. Por ello, hay sistemas operativos que manejan una combinación de ambos. Se cargan a memoria las páginas/segmentos más utilizados, y la traducción se utiliza de manera normal. Solamente en aquellos casos en los que no encontrara la página/segmento en la memoria asociativa, efectuaría la traducción directa. Para esa instrucción, haría un doble mapeo. Sin embargo, el principio de localidad nos asegura que esto no sucederá con frecuencia.

UNIDAD III PROCESOS Y PROCESADORES EN SISTEMAS DISTRIBUIDOS

3.1 Procesos procesadores
No existe  un acuerdo universal  sobre una definición  de proceso.
  Un programa que se está  ejecutando
  Una  actividad  asíncrona
  El emplazamiento del control de un procedimiento que esta  siendo  ejecutado.
  Aquello que se manifiesta por existencia en el sistema  operativo de un bloque de control de procesos.
El modelo de procesos posee las siguientes características:
  Todo el software ejecutable, inclusive el Sistema Operativo, se organiza en varios procesos secuenciales o procesos.
  Un proceso incluye al programa en ejecución y a los valores activos del contador, registros y variables del mismo.
  Conceptualmente cada proceso tiene su propia CPU virtual.
  Si la CPU alterna entre los procesos, la velocidad a la que ejecuta un proceso no será uniforme, por lo que es necesario aclarar lo siguiente:
  Que los procesos no deben programarse con hipótesis implícitas acerca del tiempo.
  Que normalmente la mayoría de los procesos no son afectados por la multiprogramación subyacente de la CPU o las velocidades relativas de procesos distintos.
  Un proceso es una actividad de un cierto tipo, que tiene un programa, entrada, salida y estado.


3.2  Hilos y Multihilos

Un hilo de ejecución, en sistemas operativos, es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.

Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden e ese dato modificado inmediatamente.

Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros).

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso es terminado, todos sus hilos de ejecución también lo son. Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.

Algunos lenguajes de programación tienen características de diseño expresamente creadas para permitir a los programadores lidiar con hilos de ejecución (como Java). Otros (la mayoría) desconocen la existencia de hilos de ejecución y éstos deben ser creados mediante llamadas de biblioteca especiales que dependen del sistema operativo en el que estos lenguajes están siendo utilizados (como es el caso del C y del C++).

Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde de manera más ágil a la interacción con el usuario. También pueden ser utilizados por una aplicación servidora para dar servicio a múltiples clientes.

Sincronización de hilos

Todos los hilos comparten el mismo espacio de direcciones y otros recursos como pueden ser archivos abiertos. Cualquier modificación de un recurso desde un hilo afecta al entorno del resto de los hilos del mismo proceso. Por lo tanto, es necesario sincronizar la actividad de los distintos hilos para que no interfieran unos con otros o corrompan estructuras de datos.

Una ventaja de la programación multihilo es que los programas operan con mayor velocidad en sistemas de computadores con múltiples CPUs (sistemas multiprocesador o a través de grupo de máquinas) ya que los hilos del programa se prestan verdaderamente para la ejecución concurrente. En tal caso el programador necesita ser cuidadoso para evitar condiciones de carrera (problema que sucede cuando diferentes hilos o procesos alteran datos que otros también están usando), y otros comportamientos no intuitivos. Los hilos generalmente requieren reunirse para procesar los datos en el orden correcto. Es posible que los hilos requieran de operaciones atómicas para impedir que los datos comunes sean cambiados o leídos mientras estén siendo modificados, para lo que usualmente se utilizan los semáforos. El descuido de esto puede generar interbloqueo.

Formas de multi-hilos

Los sistemas operativos generalmente implementan hilos de dos maneras:

Multi-hilo apropiativo: permite al sistema operativo determinar cuándo debe haber un cambio de contexto. La desventaja de esto es que el sistema puede hacer un cambio de contexto en un momento inadecuado, causando un fenómeno conocido como inversión de prioridades y otros problemas.

Multi-hilo cooperativo: depende del mismo hilo abandonar el control cuando llega a un punto de detención, lo cual puede traer problemas cuando el hilo espera la disponibilidad de un recurso.

El soporte de hardware para multi-hilo desde hace poco se encuentra disponible. Esta característica fue introducida por Intel en el Pentium 4, bajo el nombre de Hyper Threading?.

Usos más comunes

Trabajo interactivo y en segundo plano

Por ejemplo, en un programa de hoja de cálculo un hilo puede estar visualizando los menús y leer la entrada del usuario mientras que otro hilo ejecuta las órdenes y actualiza la hoja de calculo. Esta medida suele aumentar la velocidad que se percibe en la aplicación, permitiendo que el programa pida la orden siguiente antes de terminar la anterior.

Procesamiento asíncrono

Los elementos asíncronos de un programa se pueden implementar como hilos. Un ejemplo es como los software de procesamiento de texto guardan archivos temporales cuando se está trabajando en dicho programa. Se crea un hilo que tiene como función guardar una copia de respaldo mientras se continúa con la operación de escritura por el usuario sin interferir en la misma.

Aceleración de la ejecución

Se pueden ejecutar, por ejemplo, un lote mientras otro hilo lee el lote siguiente de un dispositivo.

Implementaciones

Hay dos grandes categorías en la implementación de hilos:

Hilos a nivel de usuario

Hilos a nivel de Kernel

También conocidos como ULT (User Level Thread) y KLT (Kernel Level Thread)

Hilos a nivel de usuario (ULT) En una aplicación ULT pura, todo el trabajo de gestión de hilos lo realiza la aplicación y el núcleo o kernel no es consciente de la existencia de hilos. Es posible programar una aplicación como multihilo mediante una biblioteca de hilos. La misma contiene el código para crear y destruir hilos, intercambiar mensajes y datos entre hilos, para planificar la ejecución de hilos y para salvar y restaurar el contexto de los hilos.

Todas las operaciones descritas se llevan a cabo en el espacio de usuario de un mismo proceso. El kernel continua planificando el proceso como una unidad y asignándole un único estado (Listo, bloqueado, etc.).

Ventajas de los ULT

El intercambio de los hilos no necesita los privilegios del modo kernel, por que todas las estructuras de datos están en el espacio de direcciones de usuario de un mismo proceso. Por lo tanto, el proceso no debe cambiar a modo kernel para gestionar hilos. Se evita la sobrecarga de cambio de modo y con esto el sobrecoste.

Se puede realizar una planificación específica. Dependiendo de que aplicación sea, se puede decidir por una u otra planificación según sus ventajas.

Los ULT pueden ejecutar en cualquier sistema operativo. La biblioteca de hilos es un conjunto compartido. Desventajas de los ULT

En la mayoría de los sistemas operativos las llamadas al sistema (System calls) son bloqueantes. Cuando un hilo realiza una llamada al sistema, se bloquea el mismo y también el resto de los hilos del proceso.

En una estrategia ULT pura, una aplicación multihilo no puede aprovechar las ventajas de los multiprocesadores. El núcleo asigna un solo proceso a un solo procesador, ya que como el núcleo no interviene, ve al conjunto de hilos como un solo proceso.

Hilos a nivel de núcleo (KLT)

En una aplicación KLT pura, todo el trabajo de gestión de hilos lo realiza el kernel. En el área de la aplicación no hay código de gestión de hilos, únicamente un API (interfaz de programas de aplicación) para la gestión de hilos en el núcleo. Windows 2000, Linux y OS/2 utilizan este método. Linux utiliza un método muy particular en que no hace diferencia entre procesos e hilos, para linux si varios proceso creados con la llamada al sistema “clone” comparten el mismo espacio de direcciones virtuales el sistema operativo los trata como hilos y lógicamente son manejados por el kernel.


El Modelo de Estación de Trabajo

El sistema consta de estaciones de trabajo (PC) dispersas conectadas entre sí mediante una red de área local (LAN).

Pueden contar o no con disco rígido en cada una de ellas.

Los usuarios tienen:

·         Una cantidad fija de poder de cómputo exclusiva.

·         Un alto grado de autonomía para asignar los recursos de su estación de trabajo.

Uso de los discos en las estaciones de trabajo:

ü  Sin disco:

·         Bajo costo, fácil mantenimiento del hardware y del software, simetría y flexibilidad.

·         Gran uso de la red, los servidores de archivos se pueden convertir en cuellos de botella.

ü  Disco para paginación y archivos de tipo borrador:

·         Reduce la carga de la red respecto del caso anterior.

·         Alto costo debido al gran número de discos necesarios.

ü  Disco para paginación, archivos de tipo borrador y archivos binarios (ejecutables):

·         Reduce aún más la carga sobre la red.

·         Alto costo y complejidad adicional para actualizar los binarios.

ü  Disco para paginación, borrador, binarios y ocultamiento de archivos:

·         Reduce aún más la carga de red y de los servidores de archivos.

·         Alto costo.

·         Problemas de consistencia del caché.

ü  Sistema local de archivos completo:

·         Escasa carga en la red.

·         Elimina la necesidad de los servidores de archivos.

·         Pérdida de transparencia.


El Modelo de la Pila de Procesadores

Se dispone de un conjunto de cpu que se pueden asignar dinámicamente a los usuarios según la demanda.

Los usuarios no disponen de estaciones de trabajo sino de terminales gráficas de alto rendimiento.

No existe el concepto de propiedad de los procesadores, los que pertenecen a todos y se utilizan compartidamente.

El principal argumento para la centralización del poder de cómputo como una pila de procesadores proviene de la teoría de colas:

·         Llamamos “l” a la tasa de entradas totales de solicitudes por segundo de todos los usuarios combinados.

·         Llamamos “m” a la tasa de procesamiento de solicitudes por parte del servidor.

3.3.3 Hibrido

• Modelo Híbrido:

– Los trabajos interactivos se ejecutan en las estaciones de trabajo mientras que los no interactivos se ejecutan en la pila de procesadores.

• El Modelo de las Estaciones de trabajo suele coincidir en la actualidad con la mayoría de las organizaciones.

ü  –Cuando se utiliza este modelo hay una serie de aspectos a tener en cuenta:

• La asignación de Procesos a los Procesadores.

• Los Algoritmos de Distribución de la Carga.

ü  La Planificación de los Procesos en un Sistema Distribuido.



Asignación de Procesadores

Son necesarios algoritmos para decidir cuál proceso hay que ejecutar y en qué máquina [25, Tanenbaum].

Para el modelo de estaciones de trabajo:

·         Decidir cuándo ejecutar el proceso de manera local y cuándo es necesario buscar estaciones inactivas o no locales que tienen una conexión a la misma red pero fuera de ella.

Para el modelo de la pila de procesadores:

·         Decidir dónde ejecutar cada nuevo proceso respecto de la misma maquina que es la tabla(lista) de los procesos que se crean dentro de la maquina.


Aspectos del Diseño de Algoritmos de Asignación de Procesadores

Los principales aspectos son los siguientes:

Algoritmos deterministas vs. heurísticos.

Algoritmos centralizados vs. distribuidos.

Algoritmos óptimos vs. subóptimos.

Algoritmos locales vs. globales.

Algoritmos iniciados por el emisor vs. iniciados por el receptor.

Los algoritmos deterministas son adecuados cuando se sabe anticipadamente todo acerca del comportamiento de los procesos, pero esto generalmente no se da, aunque puede haber en ciertos casos aproximaciones estadísticas. Los algoritmos heurísticos son adecuados cuando la carga es impredecible.

Los diseños centralizados permiten reunir toda la información en un lugar y tomar una mejor decisión; la desventaja es que la máquina central se puede sobrecargar y se pierde robustez ante su posible falla.

Generalmente los algoritmos óptimos consumen más recursos que los subóptimos, además, en la mayoría de los sistemas reales se buscan soluciones subóptimas, heurísticas y distribuidas.

Cuando se va a crear un proceso se debe decidir si se ejecutará en la máquina que lo genera o en otra (política de transferencia):

La decisión se puede tomar “solo con información local” o “con información global”.

Los algoritmos locales son sencillos pero no óptimos.

Los algoritmos globales son mejores pero consumen muchos recursos.




El concepto de coplanificacion:

ü  toma en cuenta los patrones de comunicación entre los procesos durante la planificación.

ü  debe garantizar que todos los miembros del grupo se ejecuten al mismo tiempo.

ü  se emplea una matriz conceptual donde:

·         las filas son espacios de tiempo.

·         las columnas son las tablas de procesos de los procesadores.

ü  cada procesador debe utilizar un algoritmo de planificacion round robin:

·         todos los procesadores ejecutan el proceso en el espacio “0” durante un cierto periodo fijo.

·         todos los procesadores ejecutan el proceso en el espacio “1” durante un cierto periodo fijo, etc.

ü  se deben mantener sincronizados los intervalos de tiempo.

ü  todos los miembros de un grupo se deben colocar en el mismo n° de espacio de tiempo pero en procesadores distintos.




·         La capacidad de procesamiento está distribuida entre varios computadores interconectados.

·         Las actividades del sistema tienen requisitos de tiempo.

·         Necesidad de sistemas distribuidos:

·         /Requisitos de procesamiento.

·         /Distribución física del sistema.

·         /Fiabilidad: Tolerancia a fallos.

·         Los sistemas distribuidos de tiempo real (SDTR) son complicados de realizar.

·         Se consideran sistemas débilmente acoplados.

·         Comunicación mediante mensajes

·         El tiempo de comunicación es significativo.

·         Ej. Sistemas multimedia, SCADA, aviónica, fabricación integrada, robótica.

·         Distintos tipos de requisitos temporales

·         Se consideran, fundamentalmente, sistemas críticos