miércoles, 29 de junio de 2016

ADMINISTRACION DE LA MEMORIA

La parte del sistema operativo que administra la memoria se llama administrador de la memoria. Para ello existen diferentes esquemas de administración de memoria desde los más simples hasta los más elaborados entre los cuales se ubican:

Administración de la memoria sin intercambio o paginación.
Los sistemas de administración de memoria se pueden clasificar en dos tipos. Los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución (intercambio y paginación) y aquellos que no.
1: Monopogramación sin intercambio o paginación.
Es en forma secuencial pues solo se tiene un objeto en memoria en cada instante, el usuario carga toda la memoria con un programa, esto implica que cada proceso debe contener controladores de dispositivo para cada uno de los dispositivos E/S que utilice.
2: Multiprogramación y uso de la memoria.
La multiprogramación facilita la programación de una aplicación al dividirla en dos o más procesos. La mayoría de los procesos tardan cierto tiempo en la espera de datos de dispositivos E/S.
Un modelo para el uso y aprovechamiento de la CPU es el modelo probabilístico dado por la fórmula:
Uso de la CPU = 1 - pn
  3: Multiprogramación con particiones fijas
El objetivo en todo esto es tener más de un proceso en memoria a la vez, solución posible sería dividir la memoria en n partes al inicio de una sesión de uso de la máquina, pero aun así se obtiene el desperdicio de particiones grandes con una tarea pequeña, la respuesta puede ser tener particiones pequeñas también.
Las tareas que van llegando se forman hasta que una partición adecuada está disponible, en cuyo momento la tarea se carga en esa partición y se ejecuta hasta terminar.

Intercambio
En un sistema por lotes la organización de la memoria en particiones fijas es adecuado pero en un ambiente multiusuario la situación es distinta con el tiempo compartido, ya que existen más usuarios de los que puede albergar la memoria, por lo que es conveniente albergar el exceso de los procesos en disco., por supuesto para ser ejecutados estos procesos deben ser trasladados a la memoria principal. Al traslado de procesos de disco a memoria y viceversa se le llama intercambio.
1: Multiprogramación con particiones variables.
Mediante un algoritmo de administración de memoria las particiones variables varían de forma dinámica durante el uso de la máquina, evitando desperdicio de memoria
Otros métodos de administración de memoria que tenemos son:
La administración de memoria con mapa de bits
La memoria se divide en unidades de asignación, a cada asignación le corresponden un bit en el mapa de bits, un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria.
La administración de memoria con listas ligadas
Otra forma de mantener un registro en memoria es mediante una lista ligada donde cada entrada de la lista específica un hueco o un proceso.
La administración de memoria con el sistema de los asociados
Basado en el sistema binario o utiliza para las direcciones.
  
Memoria Virtual
El método diseñado por Fotheringham en 1961 se conoce como Memoria Virtual, la idea es que el tamaño combinado de la pila, programa y datos puede exceder la memoria física disponible para ello. El S.O. mantiene en memoria aquellas partes del programa que se deben permanecer en memoria y el resto lo deja en disco, las partes entre el disco y la memoria se intercambian de modo que se vayan necesitando.
1: Paginación
El espacio de direcciones de cada proceso se divide en bloques de tamaño uniforme llamados páginas, los cuales se pueden colocar dentro de cualquier para página marco disponible en memoria. Cuando las tablas de páginas son muy grandes se puede utilizar un esquema de paginación de varios niveles para que las páginas se paginen a sí mismas.
Existen distintos niveles de paginación y a su vez distintos modelos de computadoras han trabajado con ellas.
Paginación de nivel 1: PDP-11
Paginación de 2 niveles: la VAX
Paginación de 3 niveles: la SPARC
Paginación de 4 niveles: la 68030
Memoria asociativa
En los algoritmos de paginación las tablas de páginas se mantienen en la memoria debido a su gran tamaño, en potencia este diseño tiene un efecto enorme en el rendimiento.

  Algoritmos de reemplazo de páginas.
Cuando ocurre un fallo de página el sistema operativo debe elegir una página para retirarla de la memoria y hacer un espacio para la página por recuperar. Si la página por eliminar fue modificada mientras estaba en memoria, debe escribirla en el disco para mantener actualizada la copia del disco, si por el contrario la página no ha sido modificada la copia del disco ya está actualizada por lo que no es necesario volver a escribir, la página por leer sólo escribe encima de la página por retirar.
Aunque es posible elegir una página al azar para el reemplazo relacionado con un fallo de página, el rendimiento del sistema es mucho mejor si se elige una página de poco uso.
1: Algoritmo de reemplazo de páginas optimo
Mejor algoritmo posible para reemplazo de páginas pero irrealizable en la práctica.
Al momento de ocurrir un fallo de página cierto conjunto de páginas se encuentran en la memoria, en la siguiente instrucción se hará referencia a una de estas páginas, otras páginas no se utilizaran sino hasta mucho después, cada página puede ejecutarse con el número de instrucciones ejecutadas antes de la primera referencia a esa página, el algoritmo dice que se elimine la página con la mayor etiqueta; si una página no va a utilizase sino hasta mucho después que otra la eliminación de la primera retrasa el fallo de página lo mas posible, el único problema de este algoritmo es que es irrealizable. Al momento del fallo de página el S.O. no tiene forma de saber a qué página se hace referencia.
2: Algoritmo de página de uso no muy reciente.
En un fallo de página, el sistema operativo inspecciona todas las páginas y las divide en cuatro categorías según los valores actuales de los bits R y M
Clase 0: No se ha hecho referencia ni ha sido modificada
Clase 1: No se ha hecho referencia pero ha sido modificada
Clase 2: Se ha hecho referencia pero no ha sido modificada
Clase 3: Se ha hecho referencia y ha sido modificada
El algoritmo NRU implica una hipótesis que indica que es mejor eliminar una página modificada sin referencias al menos por lo general un intervalo de reloj, este algoritmo es fácil de comprender, de implantación eficiente y con un rendimiento que, aún sin ser el óptimo si es adecuado en muchos casos.
3: Algoritmo de reemplazo " primero en entrar, primero en salir FIFO"
El sistema operativo tiene una lista de todas las páginas que se encuentran en memoria, siendo la primera página la más antigua y la última la más reciente, en un fallo de página, se elimina la primera página y se añade la nueva al final de la lista.
4: Algoritmo de reemplazo de páginas de la segunda oportunidad
Una modificación simple del FIFO que evita deshacerse de una página de uso frecuente inspecciona el bit R de la página más antigua, busca una página antigua sin referencias durante el anterior intervalo de tiempo.
5: Algoritmo de reemplazo de páginas del reloj
Aunque el anterior algoritmo es razonable un mejor enfoque es mantener las páginas en una lista circular con la forma de un reloj, una manecilla apunta hacia la más antigua. Al ocurrir un fallo de página se inspecciona la página a la que apunta la manecilla si su bit R=0 se retira de la memoria, se inserta la nueva página en su lugar en el reloj y la manecilla avanza una posición, si R=1 la manecilla avanza una posición y el bit se limpia, esto continua hasta encontrar una página con R=0.

 Segmentación
La memoria virtual que hemos analizado hasta ahora es unidimensional, puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos pueden crecer o reducirse en forma independiente sin afectar a los demás.
Una memoria segmentada tiene otras ventajas como hacer más sencilla la administración de las estructuras de datos que crecen o se reducen, si cada procedimiento ocupa un segmento independiente con la posición inicial cero el ligado independiente de los procesos compilados es mucho más sencillo.
Bit que se activa si se hace referencia a la página en cuestión
Bit que se activa si se modifica la página


CAPAS DEL SOFTWARE DE E/S


Por lo general, el software de E/S se organiza en cuatro capas, como se muestra en la figura 5-11. Cada capa tiene una función bien definida que realizar, y una interfaz bien definida para los niveles adyacentes. La funcionalidad y las interfaces difieren de un sistema a otro, por lo que el análisis que veremos a continuación, que examina todas las capas empezando desde el inferior, no es específico de una sola máquina.

Software de E/S de capa de usuario
Software de sistema operativo independiente del dispositivo
Controladores de dispositivos
Manejadores de interrupciones
Hardware




1.1: Manejadores de interrupciones:

Aunque la E/S programada es útil algunas veces, para la mayor parte de las operaciones de E/S las interrupciones son un hecho incómodo de la vida y no se pueden evitar. Deben ocultarse en la profundidad de las entrañas del sistema operativo, de manera que éste sepa lo menos posible de ellas. La mejor manera de ocultarlas es hacer que el controlador que inicia una operación de E/S se bloquee hasta que se haya completado la E/S y ocurra la interrupción. El controlador se puede bloquear a sí mismo realizando una llamada a down en un semáforo, una llamada a wait en una variable de condición, una llamada a receive en un mensaje o algo similar, por ejemplo.

Cuando ocurre la interrupción, el procedimiento de interrupciones hace todo lo necesario para poder manejarla. Después puede desbloquear el controlador que la inició. En algunos casos sólo completará up en un semáforo. En otros casos realizará una llamada a signal en una variable de condición en un monitor. En otros más enviará un mensaje al controlador bloqueado. En todos los casos, el efecto neto de la interrupción será que un controlador que estaba bloqueado podrá ejecutarse ahora. Este modelo funciona mejor si los controladores están estructurados como procesos del kernel, con sus propios estados, pilas y contadores del programa.

A continuación tal vez no sean necesarios en una máquina específica, y tal vez se requieran otros que no estén listados. Además, los pasos que se llevan a cabo pueden estar en distinto orden en algunas máquinas.

1. Guardar los registros (incluyendo el PSW) que no han sido guardados por el hardware de la interrupción.

2. Establecer un contexto para el procedimiento de servicio de interrupciones. Para ello tal vez sea necesario establecer el TLB, la MMU y una tabla de páginas.

3. Establecer una pila para el procedimiento de servicio de interrupciones.

4. Reconocer el controlador de interrupciones. Si no hay un controlador de interrupciones centralizado, rehabilitar las interrupciones.

5. Copiar los registros desde donde se guardaron (posiblemente en alguna pila) a la tabla de procesos.

6. Ejecutar el procedimiento de servicio de interrupciones. Éste extraerá información de los registros 
del controlador de dispositivos que provocó la interrupción.

7. Elegir cuál proceso ejecutar a continuación. Si la interrupción ha ocasionado que cierto proceso de alta prioridad que estaba bloqueado cambie al estado listo, puede elegirse para ejecutarlo en ese momento.

8. Establecer el contexto de la MMU para el proceso que se va a ejecutar a continuación. También puede ser necesario establecer un TLB.

9. Cargar los registros del nuevo proceso, incluyendo su PSW.

10. Empezar a ejecutar el nuevo proceso:



1.2: Drivers de dispositivos

Vimos que cada controlador tiene ciertos registros de dispositivos que se utilizan para darle comandos o ciertos registros de dispositivos que se utilizan para leer su estado, o ambos. El número de registros de dispositivos y la naturaleza de los comandos varían radicalmente de un dispositivo a otro. Por ejemplo, un driver de ratón tiene que aceptar información del ratón que le indica qué tanto se ha desplazado y cuáles botones están oprimidos en un momento dado. Por el contrario, un driver de disco tal vez tenga que saber todo acerca de los sectores, pistas, cilindros, cabezas, movimiento del brazo, los propulsores






Del motor, los tiempos de asentamiento de las cabezas y todos los demás mecanismos para hacer que el disco funcione en forma apropiada. Obviamente, estos drivers serán muy distintos. Como consecuencia, cada dispositivo de E/S conectado a una computadora necesita cierto código específico para controlarlo. Este código, conocido como driver, es escrito por el fabricante del dispositivo y se incluye junto con el mismo. Como cada sistema operativo necesita sus propios drivers, los fabricantes de dispositivos por lo común los proporcionan para varios sistemas operativos populares. Cada driver maneja un tipo de dispositivo o, a lo más, una clase de dispositivos estrechamente relacionados. Por ejemplo, un driver de disco SCSI puede manejar por lo general varios discos SCSI de distintos tamaños y velocidades, y tal vez un CD-ROM SCSI también. Por otro lado, un ratón y una palanca de mandos son tan distintos que por lo general se requieren controladores diferentes. Sin embargo, no hay una restricción técnica en cuanto a que un driver controle varios dispositivos no relacionados. Simplemente no es una buena idea.



1.3: Software de E/S independiente del dispositivo

Aunque parte del software de E/S es específico para cada dispositivo, otras partes de éste son independientes de los dispositivos. El límite exacto entre los controladores y el software independiente del dispositivo depende del sistema (y del dispositivo), debido a que ciertas funciones que podrían realizarse de una manera independiente al dispositivo pueden realizarse en los controladores, por eficiencia u otras razones. Las funciones que se muestran en la figura 5-13 se realizan comúnmente en el software independiente del dispositivo.

1; Interfaz uniforme para controladores de dispositivos 
2; Uso de búfer 
3; Reporte de errores 
4; Asignar y liberar dispositivos dedicados 
5; Proporcionar un tamaño de bloque independiente del dispositivo   


La función básica del software independiente del dispositivo es realizar las funciones de E/S que son comunes para todos los dispositivos y proveer una interfaz uniforme para el software a nivel de usuario.



1.4: Interfaz uniforme para los controladores de software de dispositivos

Una importante cuestión en un sistema operativo es cómo hacer que todos los dispositivos de E/S y sus controladores se vean más o menos iguales. Si los discos, las impresoras, los teclados, etc., se conectan de distintas maneras, cada vez que llegue un nuevo dispositivo el sistema operativo deberá modificarse para éste. No es conveniente tener que modificar el sistema operativo para cada nuevo dispositivo. Un aspecto de esta cuestión es la interfaz entre los controladores de dispositivos y el resto del sistema operativo. En la figura 5-14(a) ilustramos una situación en la que cada controlador de disco Positivo tiene una interfaz distinta con el sistema operativo.               




Software de E/S en espacio de usuario

Aunque la mayor parte del software de E/S está dentro del sistema operativo, una pequeña porción de éste consiste en bibliotecas vinculadas entre sí con programas de usuario, e incluso programas enteros que se ejecutan desde el exterior del kernel. Las llamadas al sistema, incluyendo las llamadas al sistema de E/S, se realizan comúnmente mediante procedimientos de biblioteca. Cuando un programa en C contiene la llamada:

Cuenta = write(da, bufer, nbytes);

Un uso específico de la transmisión de archivos mediante el uso de una cola es el sistema de noticias USENET. Esta red consiste en millones de máquinas en todo el mundo, que se comunican mediante Internet. Existen miles de grupos de noticias sobre muchos temas. Para publicar un mensaje, el usuario invoca a un programa de noticias, el cual acepta el mensaje a publicar y luego lo deposita en un directorio de cola para transmitirlo a las otras máquinas más adelante. Todo el sistema de noticias se ejecuta fuera del sistema operativo. En la figura 5-17 se resume el sistema de E/S, donde se muestran todos los niveles y las funciones principales de cada nivel. Empezando desde la parte inferior, los niveles son el hardware, los manejadores de interrupciones, los controladores de dispositivos, el software independiente del dispositivo y, por último, los procesos de usuario.




Las flechas en la figura 5-17 muestran el flujo de control. Por ejemplo, cuando un programa de usuario trata de leer un bloque de un archivo, se invoca el sistema operativo para llevar a cabo la llamada. El software independiente del dispositivo busca el bloque en la caché del búfer, por ejemplo. Si el bloque necesario no está ahí, llama al controlador del dispositivo para enviar la petición al hardware y obtenerlo del disco. Después, el proceso se bloquea hasta que se haya completado la operación de disco.

 Cuando termina el disco, el hardware genera una interrupción. El manejador de interrupciones se ejecuta para descubrir qué ocurrió; es decir, qué dispositivo desea atención en ese momento. Después extrae el estado del dispositivo y despierta al proceso inactivo para que termine la petición de E/S y deje que el proceso de usuario continúe.

jueves, 23 de junio de 2016

PROBLEMAS CLÁSICOS DELA COMUNICACIÓN ENTRE PROCESOS

Filósofos Comensales ( Dijkstra, 1965 )

• Cinco filósofos pasan la vida pensando y comiendo
• Cuando un filósofo piensa, no interactúa con sus colegas.
• Cuando tiene hambre, toma los dos palillos al mismo tiempo y come sin soltarlos.
• Cuando termina de comer, coloca los dos palillos sobre la mesa y comienza a pensar.
• Necesidad de asignar varios recursos entre varios procesos sin que haya bloqueos mutuos ni inanición





Primera Solución

 Representar cada palillo con un semáforo 

• Un filósofo trata de tomar un palillo ejecutando una operación espera con ese semáforo, y suelta sus palillos ejecutando la operación señal con los semáforos apropiados.
   var palillo: array [0..4] of semáforo;

• Inicialmente todos los elementos de palillo están en 1
Primera Solución

• Garantiza que dos vecinos no estarán comiendo simultáneamente • Posibilidad de bloqueo mutuo •Suponga que los cinco filósofos sienten hambre simultáneamente y cada uno toma su palillo izquierdo
Posibles soluciones al problema de bloqueos
Permitir que como máximo filósofos se sienten a la mesa cuatro filósofos
Sólo permitir que un filósofo tome sus palillos si ambos están disponibles ( dentro de la sección crítica )
Solución asimétrica è Un filósofo impar toma primero su palillo izquierdo y luego el derecho, mientras que un filósofo par toma primero su palillo derecho y luego el izquierdo.
Cualquier solución satisfactoria deberá evitar la posibilidad que uno de los filósofos muera de hambre.
Una solución libre de bloqueos mutuos no elimina necesariamente la posibilidad de inanición



Solución por monitores

Distinguir entre los tres estados en los que podría estar un filósofo è Pensando, hambriento y comiendo
Definir el estado del mismo filósofo
existe un determinado objeto que se va a ser utilizado y compartido por una serie de procesos concurrentes.

• Un objeto se va a compartir entre varios usuarios, algunos solo quieren leer el contenido ( lectores ), otros quieren actualizarlo (escritores)





Restricciones

• Sólo se permite que un escritor tenga acceso al objeto al mismo tiempo. •Mientras el escritor esté accediendo al objeto, ningún otro proceso lector ni escritor podrá acceder a él.

• Se permite que múltiples lectores tengan acceso al objeto, ya que ellos nunca van a modificar el contenido del mismo
Un objeto se va a compartir entre varios usuarios, algunos solo quieren leer el contenido ( lectores), otros quieren actualizarlo (escritores)