Sistemas Operativos
Sistemas Operativos
Sistemas Operativos
Interbloqueos
Para estos casos (donde varios procesos comparten recursos) se suele definir una
región fatal, es un área en la que una vez que los procesos entran en ella, estos se
verán involucrados en un interbloqueo.
Recursos:
Se pueden distinguir 2 categorías de recursos: los reutilizables y los consumibles. Los
recursos reutilizables son aquellos que solo pueden ser utilizados de manera segura
por un proceso y no son destruidos después de su uso (por ejemplo la memoria,
dispositivos, etc). Cuando un proceso los necesita, estos obtienen una unidad del
recurso, cuando deja de ser usado el proceso lo libera.
Un caso de interbloqueo con recursos de este tipo podría ser:
“La memoria principal tiene un espacio de 200 kbytes disponibles para reservar y se
produce la siguiente secuencia de ejecución:
Los recursos consumibles son aquellos que pueden crearse y destruirse (por ejemplo
señales, interrupciones, etc). Un proceso productor desbloqueado puede crear una
cantidad ilimitada de estos recursos. Cuando un proceso consumidor toma uno de
estos recursos, este deja de existir. Un ejemplo de interbloqueos con este tipo de
recursos sería:
“Hay 2 procesos y cada uno intenta recibir un mensaje del otro de la siguiente
manera:
No existe una estrategia efectiva que pueda tratar con todos los tipos de
interbloqueos. Existen varias estrategias:
Grafo de Asignación de recursos:
Es una herramienta útil para la graficar la asignación de recursos a los procesos. Este
es un grafo dirigido que representa el estado del sistema en cuanto a los recursos y
procesos, de tal manera que cada proceso y cada recurso se representa por un
nodo. Una arista del grafo dirigida desde un proceso a un recurso indica que este lo
ha solicitado pero que todavía no se lo ha conferido. El caso contrario donde la
arista apunta del recurso hacia el proceso indica que este se le ha sido asignado.
Por ciertas razones es necesario que estas condiciones se encuentran. Por ejemplo
se necesita la exclusión mutua para la coherencia e integridad de la base de
datos. Del mismo modo la expropiación no se deberá hacer de manera arbitraria.
Sí se cumplen las primeras 3 condiciones se puede producir un interbloqueo, pero
no siempre que se cumplan sucederá. Para que realmente suceda deben darse las
4 condiciones.
La 4ta condición es una consecuencia potencial de las 3 primeras. Osea si se
cumplen las 3 primeras condiciones, es probable que conduzca a una espera
circular irresoluble.
Entonces para que se produzca un interbloqueo es necesario que exista una región
fatal (es decir la culminación de las 3 primeras condiciones), sino también una
secuencia de peticiones de recursos que conduzcan hacia esta. Sí se cumple la 4ta
condición, podemos asumir que se ha entrado en la región fatal.
Existen 3 estrategias para tratar con los interbloqueos: Prevenir, predecir y detectar.
● Espera Circular: Esta se puede evitar definiendo un orden lineal entre los
distintos tipos de recursos. Sí a un proceso le han asignado recursos de tipo x,
sólo podrá pedir aquellos que tengan un orden posterior a X. (Ineficiente).
Esta estrategia no limita el acceso a los recursos ni restringe las acciones de los
procesos. Los recursos pedidos se conceden a los procesos siempre que sea posible.
Periódicamente, el sistema operativo realiza un algoritmo que permite detectar la
condición de espera circular. La comprobación de si hay interbloqueo se puede
hacer una vez por cada petición de recursos o con menos frecuencia.
El algoritmo para la detección utiliza la matriz de asignación y el vector de
disponibles (los mismos que los de la técnica anterior) junto a una matriz de solicitud
S tal que esta representa la cantidad de recursos de tipo X solicitados por un
proceso Y. El algoritmo actúa marcando los procesos que no están en un
interbloqueo, por lo tanto todos los procesos que estén en la matriz sin marcar están
en deadLock. El objetivo de esto es el de encontrar procesos cuyas peticiones
pueden ser resueltas con los recursos disponibles, de esta manera le concede los
recursos y el proceso se ejecuta hasta terminar para así liberar todos sus recursos.
Recuperación de Interbloqueos:
Una vez que se detecta un interbloqueo es necesaria alguna estrategia para poder
recuperarse, dentro de las más usadas están:
1. Abortar todos los procesos involucrados en el interbloqueo (Es la más usada).
2. Retroceder los procesos a un punto previo (checkpoint) y volver a empezar
desde ahí (puede volver a suceder el deadlock, no usada).
3. Abortar los procesos de a poco hasta que ya no haya deadlock.
4. Expropiar sucesivamente los recursos hasta que ya no exista un interbloqueo.
Obviamente para los métodos 3 y 4 es necesario algún criterio para determinar qué
criterio seleccionó para abortar o expropiar los recursos. Lo que generalmente se
suele hacer es elegir al proceso con:
● La menor cantidad de procesamiento.
● La menor cantidad de salida producida.
● El mayor tiempo restante (estimación).
● El menor número de recursos asignados.
● La menor prioridad.
Virtualización:
Esta tecnología permite que una sola computadora contenga varias máquinas
virtuales, c/d una de ellas podrá tener un sistema operativo, distinto o no. La ventaja
de este método es que al fallar una máquina virtual no fallan el resto, por lo tanto
de esta manera ya no es necesario tener diversas computadoras con distintos
servidores.
Aun así la esta no es aprueba de fallas, ya que estamos poniendo todos los
servidores en un mismo lugar. Si falla el servidor que mantiene a todas las máquinas
virtuales, el resultado sería mortal. Aun así la virtualización se sigue utilizando ya que
la mayoría de las fallas en los servicios no son por un problema de hardware, sino
por uno de software.
Otra de las ventajas de virtualizar es que al no tener tantas máquinas físicas nos
ahorramos en hardware y en electricidad (Esto es realmente importante para las
grandes compañías como google). Además cuando se utilizan máquinas virtuales
es mucho más fácil migrar datos entre distintas máquinas, todo lo que hay que
hacer es mover la imagen de memoria y ya está.
Las máquinas virtuales no sólo se utilizan para los servidores, también se pueden
utilizar para ejecutar aplicaciones heredadas en los sistemas operativos que ya no
tienen soporte o que no funcionan con el hardware actual. Incluso podrían
aprovecharse para asegurarse que software actual funcione en distintos sistemas
operativos a los cuales no tenemos acceso o no poseemos el hardware para poder
correrlos.
Hipervisor de tipo 1:
En este tipo de hipervisor la máquina virtual se ejecuta como un proceso de modo
usuario, por lo tanto no podrá ejecutar instrucciones sensibles, aun así ella piensa
que está ejecutando en modo kernel. Esto se conoce como modo kernel virtual
(obviamente los procesos en modo usuario están en modo usuario).
Cuando se ejecuta una instrucción sensible en una cpu sin virtualización, la
instrucción falla, lo que conlleva a una falla del SO.
En aquellos SO que tienen Virtualización, se produce una interrupción en el kernel,
de esta manera el hipervisor puede inspeccionar la instrucción para ver si fue el SO
original o el el Anfitrión el que género la interrupción. En el primer caso hace lo
necesario para ejecutar la instrucción, en el segundo, emula lo que haría el
hardware real al encontrarse con una instrucción sensible que se ejecuta en modo
usuario.
Hipervisor de tipo 2:
Esta técnica nace como una respuesta al problema generado por la intel 386
(obviamente porque existía la necesidad de virtualizar). El primer hipervisor de este
tipo fue el VMware. Este se ejecuta como un programa de usuario común sobre un
sistema operativo anfitrión. Al iniciar por primera vez actúa como si fuese una
computadora que se enciende por primera vez, esperando encontrar un cd que
contenga un SO. Una vez instalado el SO en el disco virtual, este se puede inicial al
ejecutar la VM.
Como VMware es un hipervisor de tipo 2, escanea el código en busca de bloques
básicos (un conjunto de instrucciones que terminan en una instrucción que
modifica el flujo de control) que contengan instrucciones instrucciones sensibles. En
caso de encontrarlas, las sustituirá por llamadas a un procedimiento de VMware
que las manejara.
Una vez que se sustituyeron las instrucciones sensibles, coloca el resto del bloque
básico en la caché del VMware y después las ejecuta. Esta técnica de encontrar
atrapar las instrucciones sensibles y emularlas (las suplanta por código que emulara
su comportamiento) se conoce como traducción binaria.
Una vez que se completó la ejecución de un bloque básico, el control regresa a
VMware que busca al siguiente bloque. Si ya fue traducido, se ejecuta de
inmediato, si no, se realiza el mismo proceso que se describió antes con el nuevo
bloque, y así.
La gran ventaja de este tipo de hipervisores es que se puede virtualizar en hardware
que no lo permite. Esto es posible gracias a la traducción binaria. Además esta
técnica de virtualización posee un rendimiento mucho mayor que la técnica del
hipervisor de tipo 1.
Paravirtualización:
Virtualización de la Memoria:
Virtualización de la E/S:
Motivación:
Ofrecer un mayor poder de computo, entendiendo que ya no alcanza con
hacer que el reloj opere a mayor velocidad, debido a que se han alcanzado
ciertos limites físicos en cuanto a la velocidad del reloj.
Por lo tanto la metodología utilizada para alcanzar este objetivo es a través
de las computadoras masivamente en paralelo. Estas máquinas consisten en
muchas CPUs, cada una de las cuales opera a una velocidad “normal” (lo que eso
signifique en cierto año específico), pero que en conjunto tienen mucho más poder
de cómputo que una sola CPU.
Distintos Esquemas:
◦ Multiprocesadores con Memoria Compartida
◦ Multicomputadora con paso de mensajes
▪ fuertemente acoplados.
◦ Sistemas Distribuidos
▪ débilmente acoplados
◦ Sistemas Distribuidos
Conecta sistemas de cómputo completos a través de una red de área
amplia como Internet, para formar un sistema distribuido.
Cada uno de estos sistemas tiene su propia memoria, y los sistemas se
comunican mediante el paso de mensajes.
La única diferencia real con las multicomputadoras es que en los sistemas
distribuidos se urilizan computadoras completas, y los tiempos de los mensajes son
comúnmente entre 10 y 100 mseg. Este largo retraso obliga a que estos sistemas
débilmente acoplados se utilicen de maneras distintas a los sistemas fuertemente
acoplados(multicomputadoras).
Los tres tipos de sistemas difieren en sus retrasos por una cantidad
aproximada a los tres órdenes de magnitud. Ésa es la diferencia entre un día y tres
años.
MULTIPROCESADORES
(Multiprocesadores con Memoria Compartida)
Hardware de multiprocesador
Todos los multiprocesadores tienen la propiedad de que cada CPU
puede direccionar toda la
memoria.
Las maquinas se clasifican en cuanto a la velocidad de acceso en:
UMA (Uniform Memory Access, Acceso uniforme a la memoria),
donde cada palabra de memoria se puede leer con la misma
velocidad que cualquier otra palabra de memoria.
NUMA (Non-uniform Memory Access, Acceso no uniforme a la
memoria), donde no se tiene la propiedad anterior.
Otra posibilidad es que cada CPU tenga no sólo una caché, sino
también una memoria privada local que utiliza mediante un bus dedicado
(privado). Para utilizar esta configuración de manera óptima, el compilador
debe colocar todo el texto del programa, las cadenas, constantes y demás
datos de sólo lectura, las pilas y las variables locales en las memorias
privadas. De esta forma, la memoria compartida se utiliza sólo para escribir
variables compartidas.
En la mayoría de los casos, esta cuidadosa colocación reducirá de
manera considerable el tráfico en el bus, pero requiere de una cooperación
activa por parte del compilador.
Ventajas:
◦ es una red sin bloqueos, lo cual significa que a ninguna CPU se le
niega nunca la conexión que necesita, debido a que algún punto
de cruce o una línea ya estén ocupados (suponiendo que el
módulo de memoria en sí esté disponible).
◦ no se necesita una planeación por adelantado. Aun si ya hay siete
conexiones arbitrarias establecidas, siempre es posible conectar la
CPU restante a la memoria restante.
◦ también es posible la contención de memoria, si dos CPUs desean
acceder al mismo módulo, al mismo tiempo. Sin embargo, al
particionar la memoria en n unidades, la contención se reduce por
un factor de n en comparación con el modelo anterior.
Desventajas:
◦ el número de puntos de cruce aumenta con base en n2. Con 1000
CPUs y 1000 módulos de memoria, necesitamos un millón de puntos
de cruce por lo tanto no es factible un interruptor de barras
cruzadas de este tamaño. Sin embargo, para los sistemas de
tamaño mediano, se puede utilizar el diseño de las barras cruzadas.
Formato de un mensaje:
Para nuestros fines, los mensajes deben contener hasta cuatro partes.
- El campo Módulo indica qué memoria utilizar.
- Dirección especifica una dirección dentro de un módulo.
- CódigoOp proporciona la operación, como READ o WRITE.
- El campo Valor opcional puede contener un operando, como
una palabra de 32 bits a escribir mediante una operación WRITE.
El interruptor inspecciona el campo Módulo y lo utiliza para determinar
si el mensaje se debe enviar en X o en Y.
- Multiprocesadores NUMA
Al igual que sus parientes UMA, proveen un solo espacio de
direcciones a través de todas
las CPUs, pero a diferencia éstas, el acceso a los módulos de memoria
locales es más rápido que el acceso a los remotos. Por ende, todos los
programas UMA se ejecutarán sin cambios en las máquinas NUMA, pero el
rendimiento será peor a la misma velocidad de reloj.
Poseen tres características clave que, en conjunto, las distinguen de
otros
multiprocesadores:
1. Hay un solo espacio de direcciones visible para todas las CPUs.
2. El acceso a la memoria remota es mediante instrucciones LOAD y
STORE.
3. El acceso a la memoria remota es más lento que el acceso a la
memoria local.
Vale la pena mencionar cuatro aspectos de este diseño que tal vez no sean
obvios.
En primer lugar, cuando un proceso realiza una llamada al sistema,
ésta se atrapa y maneja en su propia CPU, usando las estructuras de datos
en las tablas de ese sistema operativo.
En segundo lugar, como cada sistema operativo tiene sus propias
tablas, también tiene su propio conjunto de procesos que programa por su
cuenta. No hay compartición de procesos. Si un usuario se conecta a la CPU
1, todos sus procesos se ejecutan en la CPU 1. Como consecuencia, puede
ocurrir que la CPU 1 esté inactiva mientras la CPU 2 está cargada de trabajo.
En tercer lugar, no hay compartición de páginas. Puede ocurrir que la
CPU 1 tenga páginas de sobra, mientras que la CPU 2 esté paginando en
forma continua. No hay forma de que la CPU 2 pida prestadas algunas
páginas a la CPU 1, ya que la asignación de memoria es fija.
En cuarto lugar (y lo que es peor), si el sistema operativo mantiene una
caché en búfer de los bloques de disco de uso reciente, cada sistema
operativo hace esto de manera independiente a los demás. Por ende,
puede ocurrir que haya cierto bloque de disco presente y sucio en varias Commented [1]: waaa
cachés de búfer al mismo tiempo, con lo cual se producirán resultados
inconsistentes. La única forma de evitar este problema es eliminar las cachés
del búfer. Eso no es tan difícil, pero daña el rendimiento en forma
considerable.
Por estas razones, es muy raro que se utilice este modelo hoy en día.
-Multiprocesadores maestro-esclavo
En la figura se muestra un segundo modelo, donde, hay una copia del
sistema operativo y sus tablas presente en la CPU1, y nada más ahí. Todas las
llamadas al sistema se redirigen a la CPU1 para procesarlas ahí. La CPU1
también puede ejecutar proceso de usuario si tiene tiempo de sobra. A este
modelo se le conoce como maestro-esclavo, ya que la CPU 1 es el maestro
y todas los demás son los esclavos.
Otras Soluciones:
mediante el uso del algoritmo de backoff exponencial binario de
Ethernet (Anderson, 1990). En vez de sondear en forma continua, se
puede insertar un ciclo de retraso entre los sondeos. Al principio, el
retraso es una instrucción. Si el bloqueo sigue ocupado, el retraso se
duplica a dos instrucciones, después a cuatro instrucciones, y así hasta
llegar a cierto valor máximo. Un máximo bajo ofrece una respuesta
rápida
cuando se libera el bloqueo, pero desperdicia más ciclos de bus en el
thrashing de la caché. Un máximo alto reduce el thrashing de la
caché a expensas de no observar que el bloque está libre con tanta
rapidez.
El algoritmo de backoff exponencial binario se puede utilizar con o sin
las lecturas puras que van antes de la instrucción TSL.
Una idea mejor incluso es proporcionar a cada CPU que desea
adquirir el mutex su propia variable de bloqueo privada para
evaluarla.
La variable debe residir en un bloque de caché no utilizado, para
evitar conflictos. El
algoritmo funciona al hacer que una CPU que no puede adquirir el
bloqueo asigne una variable de bloqueo y se adjunte a sí misma al
final de una lista de CPUs que esperan el bloqueo.
Cuando la CPU que contiene el bloque sale de la región crítica, libera
el bloqueo privado que la primera CPU en la lista está evaluando (en
su propia caché). Después, esta CPU entra a la región crítica. Cuando
termina, libera el bloqueo que está usando su sucesora, y así en lo
sucesivo.
Aunque el protocolo es algo complicado (para evitar que dos CPUs se
adjunten a sí mismas al final de la lista al mismo tiempo), es eficiente y
libre de inanición.
- Planificación de multiprocesadores
Con los hilos del kernel sucede algo distinto. Aquí el kernel está al tanto de
todos los hilos y puede elegir y seleccionar de entre los hilos que pertenecen a un
proceso. En estos sistemas, la tendencia es que el kernel seleccione un hilo para
ejecutarlo, y el proceso al que pertenece sólo tiene un pequeño papel (o tal vez
ninguno) en el algoritmo de selección de hilos.
Proceso contra hilo no es la única cuestión de planificación.
Tiempo compartido
Caso de la programación de hilos independientes.
El algoritmo de planificación más simple para lidiar con hilos no relacionados
es tener una sola estructura de datos a nivel de sistema para los hilos que estén
listos, que tal vez sea sólo una lista, pero es mucho más probable que sea un
conjunto de listas para los hilos con distintas prioridades.
En la imagen, las 16 CPUs están ocupadas en un momento dado, y hay un
conjunto de 14 hilos por orden de prioridad, esperando ser ejecutados.
La primera CPU en terminar su trabajo actual (o en hacer que su hilo se
bloquee) es la CPU 4, que después bloquea las colas de programación y
selecciona el hilo con mayor prioridad (A), como se muestra en la figura 8-12(b). A
continuación, la CPU 12 queda inactiva y selecciona el hilo B, como se ilustra en la
figura 8-12(c). Mientras que los hilos no esten relacionados de ninguna manera, es
una opción razonable llevar a cabo la planificación de esta forma, y es muy simple
de implementar con eficiencia.
Al tener una sola estructura de datos de planificación utilizada por todas las
CPUs, éstas se comparten en el tiempo, de igual forma que como se hace en un
sistema uniprocesador.
También se proporciona un balance automático de la carga, ya que no
puede haber una CPU inactiva mientras otras están sobrecargadas.
Dos desventajas de este método son:
1. la potencial contención por la estructura de datos que se utiliza
en la programación a medida que aumenta el número de
CPUs, y
2. la sobrecarga usual que se produce al realizar un cambio de
contexto, cuando un hilo se bloquea en espera de una
operación de E/S.
soluciones:
Espacio compartido
Planificación cuando los hilos están relacionados entre sí de alguna manera
y están esparcidos en distintas CPUs.
El algoritmo de espacio compartido más simple funciona de la siguiente
manera: Suponga que se crea un grupo completo de hilos relacionados al mismo
tiempo. Al momento de su creación, el programador comprueba si hay tantas CPUs
libres como el número de hilos.
Si las hay, a cada hilo se le proporciona su propia CPU dedicada (es decir,
sin multiprogramación) y todos empiezan su ejecución.
Si no hay suficientes CPUs, ninguno de los hilos se iniciará, sino hasta que
haya suficientes CPUs disponibles.
Cada hilo se aferra a su CPU hasta que termina, y en ese momento la CPU se
regresa a la reserva de CPUs disponibles. Si un hilo se bloquea en espera de una
operación de E/S, de todas formas retiene a la CPU, que simplemente se queda
inactiva hasta que el hilo se despierta. Cuando aparece el siguiente lote de hilos, se
aplica el mismo algoritmo.
El problema de este diseño es que al no haber multiprogramación baja la
productividad.
MULTICOMPUTADORAS
Tecnología de interconexión
Cada nodo tiene una tarjeta de interfaz de red, de la cual salen uno o dos
cables (o fibras). Estos cables se conectan a otros nodos o a switches.
Topologías de interconexión:
● topología de estrella: un switch al que están conectados todos los
nodos
● anillo: los nodos forman un anillo con dos cables que provienen de la
tarjeta de interfaz de red: uno que entra al nodo por la izquierda y
otro que sale del nodo por la derecha
● rejilla o malla: diseño bidimensional que se ha utilizado en muchos
sistemas comerciales. Es muy regular y tiene la facilidad de poder
escalar a tamaños mayores.
Tiene un diámetro, que es la ruta más larga entre dos nodos
cualesquiera, y que aumenta sólo con base en la raíz cuadrada del
número de nodos.
● doble toroide: una rejilla con los bordes conectados. No sólo es más
tolerante a fallas que la rejilla, sino que el diámetro es también menor
debido a que las esquinas opuestas ahora se pueden comunicar en
sólo dos saltos
● cubo: constituye una topología tridimensional regular.
En las multicomputadoras se utilizan dos tipos de esquemas de conmutación.
Interfaces de red
Todos los nodos en una multicomputadora tienen una tarjeta insertable que
contiene la conexión del nodo hacia la red de interconexión, la cual mantiene
unida toda la multicomputadora.
La forma en que están construidas estas tarjetas y la manera en que se
conectan a la CPU principal y la RAM tienen consecuencias considerables para el
sistema operativo.
En casi todas las multicomputadoras, la tarjeta de interfaz contiene una
cantidad considerable de RAM para contener los paquetes salientes y entrantes.
Por lo general, un paquete saliente se tiene que copiar a la RAM de la tarjeta de
interfaz antes de poder transmitirlo al primer switch. La razón de este diseño es que
muchas redes de interconexión son asíncronas, por lo que una vez que se inicia la
transmisión de un paquete, los bits deben seguir fluyendo a un ritmo constante. Si el
paquete está en la RAM principal no se puede garantizar este flujo continuo hacia
la red, debido al tráfico adicional en el bus de memoria. Para eliminar este
problema se utiliza una RAM dedicada
en la tarjeta de interfaz.
Enviar y recibir
En su mínima expresión, los servicios de comunicación que se proporcionen
se pueden reducir a dos llamadas (de biblioteca), una para enviar mensajes y otra
para recibirlos.
La llamada para enviar un mensaje podría ser
send(dest, &mptr);
y la llamada para recibir un mensaje podría ser
receive(direc, &mptr);
-Planificación de multicomputadoras
Balanceo de carga
Es importante saber decidir en qué nodo debe ir cada proceso. Esto es lo
contrario a los sistemas de multiprocesadores, en donde todos los proceso viven en
la misma memoria y se pueden programar en cualquier CPU que se desee.
En consecuencia, es conveniente analizar la forma en que se pueden
asignar los
procesos a los nodos de una manera efectiva.
Los algoritmos y la heurística para realizar esta asignación se conocen como
algoritmos de asignación de procesador.
Ejemplos:
- Algoritmo determinístico basado en teoría de grafos.
Otra forma son los Algoritmos distribuidos.
- El proceso se ejecuta en el nodo que lo creo al menos que el mismo esté
sobrecargado
- Muchos procesos, genera trashing, etc.
Procesamiento distribuido
Hardware de red
Las redes se clasifican en dos variedades principales: LANs (Redes de área local), que
cubren un edificio o un campus, y las WANs (Redes de área amplia), que pueden ser
a nivel de ciudad, del país o incluso a nivel mundial.
Para compartir ciclos de CPU se debe contar con una infraestructura distribuida
Utilizar almacenamiento de otras computadoras.
Un grid es una gran colección de máquinas dispersas geográficamente y por lo general heterogénea,
que se conecta mediante una red privada o Internet, y que ofrece un conjunto de servicios para sus
usuarios. Algunas veces se le compara con una supercomputadora virtual, pero es más que eso. Es
una colección de computadoras independientes, por lo general en varios dominios administrativos,
las cuales ejecutan un nivel común de middleware para permitir que los programas y usuarios
accedan a todos los recursos de una manera conveniente y consistente.
La idea es que cuando una organización no necesita todo su poder de cómputo (por ejemplo, en la
noche), otra organización (que tal vez se encuentre a varias zonas horarias de distancia) podría
recolectar esos ciclos y después regresarle el favor 12 horas más tarde. Ahora, los investigadores de
los grids también están interesados en compartir otros recursos, específicamente el hardware
especializado y las bases de datos.
Middleware
Asiste a una aplicación para interactuar o comunicarse con otras aplicaciones, software,
redes, hardware y/o sistemas operativos.
Provee una solución que mejora la calidad de servicio, seguridad, envío de mensajes,
directorio de servicios, etc.
Un ejemplo claro es la web. El paradigma original detrás de Web era muy simple: cada
computadora podía contener uno o más documentos, llamados páginas Web. Cada página
Web contiene texto, imágenes, iconos, sonidos, películas y demás, así como hipervínculos
(apuntadores) a otras páginas Web. Cuando un usuario solicita una página Web mediante el
uso de un programa llamado navegador Web, la página se muestra en la pantalla. Al hacer
clic en un vínculo, la página actual se sustituye en la pantalla por la página a la que apunta el
vínculo.
Un modelo de sistema de archivos para un sistema distribuido significa que hay un solo
sistema de archivos global, en el que usuarios de todo el mundo tienen autorización de leer
y escribir en archivos. Para lograr la comunicación, un proceso tiene que escribir datos en un
archivo y otros procesos tienen que leer los datos de vuelta. Aquí surgen muchos de los
problemas estándar con los sistemas de archivos, pero también aparecen nuevos problemas
relacionados con la distribución.
Modelo de transferencia:
Existen 2 modelos
Las ventajas del modelo de envío/descarga son su simplicidad y el hecho de
que es más eficiente transferir todos los datos entre archivos a la vez que
transferirlos en piezas pequeñas. Las desventajas son que debe haber
suficiente espacio de almacenamiento para todo el archivo en forma local,
desplazar el archivo completo es un desperdicio si sólo se necesitan piezas
de éste, y surgen problemas de consistencia si hay varios usuarios
concurrentes.
La jerarquía de directorios:
. El siguiente problema de diseño es si todos los clientes tienen la
misma vista de la jerarquía de directorios.
Si todos los clientes tiene la misma vista del sistema de archivos
distribuido, si una ruta es válida para una máquina, será válida para
todas. Esta propiedad facilita la programación y comprensión del
sistema
Si los clientes tienen distintas formas de ver el sistema una ruta de
acceso seria accesible para una máquina, pero no para las demás.
Esto se utiliza En los sistemas que administran varios sistemas de
archivos mediante el montaje remoto, Es flexible y simple de
implementar, pero tiene la desventaja de que no hace que todo el
sistema se comporte como un sistema individual de tiempo
compartido a la antigua.
Transparencia de nomenclatura.
hay tres métodos comunes para nombrar archivos y directorios en
un sistema distribuido:
Usar la nomenclatura de máquina + ruta, como
/máquina/ruta o máquina: ruta.
Montar los sistemas de archivos remotos en la jerarquía de
archivos local.
Un solo espacio de nombres que sea igual para todas las
máquinas.
Los primeros dos métodos son fáciles de implementar, en especial
como una forma de conectar los sistemas existentes que no fueron
diseñados para un uso distribuido. El tercer método es difícil y
requiere un diseño cuidadoso, pero facilita la vida a los
programadores y usuarios.
Linda:
Conceptos: