En el caso de la memoria virtual en un sistema operativo distribuido con paginador externo, todo funciona igual que en la memoria virtual tradicional, con la única excepción de que las peticiones al ``disco de intercambio" para traer páginas que han producido un fallo, o escribir páginas ``víctimas" sucias, las hace ahora el núcleo comunicándose mediante mensajes con el paginador externo (un proceso de nivel usuario y posiblemente remoto) y no a un disco local. Por lo demás, el núcleo sigue haciendo todo su trabajo igual que antes en la memoria virtual clásica. En particular, detectando fallos de página, realizando la asignación de marcos, eligiendo las víctimas, etc. El paginador externo se comporta, de esa manera, solamente como una especie de ``disco remoto de páginas de memoria virtual".
Una credencial suele estar formada por tres partes: identificación del recurso, un número aleatorio específico por recurso suficientemente grande --al menos 32 bits-- para evitar su adivinación, y los permisos de las operaciones concedidas sobre el recurso en sí (normalmente, un bit por operación). Para evitar la manipulación fraudulenta de la credencial, los dos últimos campos, número aleatorio y permisos, suelen ir cifrados de manera conjunta, bien mediante técnicas de cifrado simétrico o, algo frecuente, mediante una función de un solo sentido (sin inversa conocida). En este segundo caso de función de un solo sentido, se suelen incluir también en la credencial los bits de permisos sin cifrar, para facilitar, haciéndola muchísimo más eficiente, la comprobación de la validez de las credenciales --2N/2 más eficiente, siendo N el número de operaciones para las que puede haber permisos en la credencial--. Así mismo, la inclusión de los permisos de acceso sin cifrar, permite que los procesos cliente puedan comprobar los permisos de que disponen de una manera directa.
Para trasmisión de mensajes entre procesos con memorias lógicas diferentes, pero dentro del mismo computador, existe una técnica muy eficiente.Al construir el mensaje a enviar, el proceso emisor lo sitúa a partir de un principio de marco de página. De esa manera, el mensaje puede tratarse como una región formada por un conjunto completo de páginas.
Y para enviar el mensaje al proceso receptor, el núcleo solo necesita crear una nueva región en el espacio de memoria lógica de ese proceso, asociada con los marcos de memoria física donde está situado el mismo, es decir, no se requiere ninguna copia física del mensaje en la memoria, sino solo ajuste de la tabla de paginación.
Por último, para poder compartir tanto el proceso receptor como el proceso emisor, los mismos marcos de memoria de manera segura, los marcos involucrados se colocan en las dos regiones con protección frente a escritura. Y cualquier intento de escibir por uno de los dos procesos en un marco cualquiera, hace que ese marco se duplique, una copia para cada proceso, teniendo ya entonces cada copia permiso de escritura en las tablas de páginas de los dos regiones.
Porque sólo es necesario propagar actualizaciones en las regiones críticas, con variables compartidas declaradas, ya sea al salir (release) o al entrar (lazy). De esas actualizaciones sólo es necesario transmitir lo realmente modificado, no páginas enteras. Es fácil evitar la compartición falsa, poniendo en páginas distintas regiones críticas distintas. Declarando modos de compartición se pueden hacer también optimizaciones, como en el caso de que cada proceso modifique elementos distintos de un array. La coherencia secuencial permite ejecutar programas hechos para multiprocesador sin modificación alguna.
Los que participan en el algoritmo se van pasando un testigo ordenadamente. Quien tenga el testigo, puede retenerlo mientras accede al recurso compartido. Tiene la ventaja de que es simple, y no sobrecarga a nadie demasiado. Como desventajas tenemos que hay mensajes circulando cuando no se necesita el recurso compartido, que cuantos más participen en el sistema, mayor será el retardo en obtener el recurso y que la cesión del recurso no es FIFO, sino que depende de la posición relativa en el anillo. Problemas comunes con otros algoritmos son la falta de robustez, en este caso por pérdida de testigo, que requiere una elección para regenerar uno sólo.
coherentes
Q.E.D.
(1156, 1156, 211, 1156) (1156, 1157, 211, 1156) ( 211, 211, 211, 211) (1156, 1156, 211, 1156)
( 211, 211, 212, 211)
?
- Como el cuarto no conoce el último cambio, es invalidado como servidor preferido y borrada la cache de todo el volumen. Se elige como preferido el primero, se extrae el fichero de éste y se tratan de actualizar los que tienen copia obsoleta (sumisa), de modo que queden los vectores a (1157, 1157, 1157, 1157).
- Hay un conflicto, que ha de resolverse manualmente. El tercer servidor, cuando estaba aislado, ha hecho una modificación que es desconocida para los demás.
En este ejercicio se ignora la deriva del reloj, que no se proporciona y que suele ser absolutamente despreciable frente al 1%. Suponemos además que medimos leyendo un contador (hardware o software) cada minuto, y que marcamos los minutos contando interrupciones de reloj o pulsos de un contador.
- El error relativo en el recuento de coches es exactamente el mismo que el de la frecuencia: 1%, ya que el numero de coches por unidad de tiempo es igual al número de coches en un periodo multiplicado por la frecuencia de muestreo (proporcional a la del reloj).
- Al no modificar la frecuencia, no se produciría error alguno, ya que la cadencia de interrupciones o pulsos de reloj no varía.
- Cien horas.
This document was generated using the LaTeX2HTML translator Version 98.1p1 release (March 2nd, 1998)
Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -no_navigation -split 0 -html_version 4.0 ordinario-junio-98.tex.
The translation was initiated by Joaquin Seoane on 1998-09-22