Monday, May 27, 2013

Memoria Virtual.


La memoria es uno de los recursos más valiosos que gestiona el sistema operativo. Uno de los elementos principales que caracterizan un proceso es la memoria que utiliza. Ésta está lógicamente separada de la de cualquier otro proceso del sistema (excepto los threads de un mismo proceso que comparten normalmente la mayor parte de la memoria que tienen asignada). Un proceso no puede acceder, al espacio de memoria asignado a otro proceso, lo cual es imprescindible para la seguridad y estabilidad del sistema. El direccionamiento es una parte importante de la gestión de memoria, puesto que influye mucho en la visión del mismo por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del sistema. En Linux, además, un proceso tiene dos espacios de memoria: el espacio de memoria del usuario, único para ese proceso, y el espacio de memoria del kernel, idéntico en todos los procesos.

MEMORIA VIRTUAL.

El tamaño combinado del programa, datos y pila puede exceder la cantidad de memoria física disponible. El sistema operativo guarda aquellas partes del programa concurrentemente en uso en memoria central y el resto en disco. Cuando un programa espera que se le cargue en memoria central de disco otra parte del mismo, la CPU se puede asignar a otro proceso.

El sistema operativo gestiona niveles de memoria principal y memoria secundaria: 

• Transferencia de bloques entre ambos niveles (normalmente basada en paginación).
• De memoria secundaria a principal: por demanda.
• De memoria principal a secundaria: por expulsión.

Paginación. 

El espacio virtual de direcciones se divide en unidades llamadas páginas, todas del mismo tamaño. La memoria principal se divide en marcos de páginas (page frames) del mismo tamaño que las páginas virtuales y son compartidas por los distintos procesos del sistema (en cada marco de página se carga una página de un proceso).

No todo el espacio virtual de direcciones está cargado en memoria central. Una copia completa se encuentra en disco y las páginas se traen a memoria central cuando se necesitan. 

Segmentación. 

El espacio de direcciones se divide en segmentos, cada uno de los cuales corresponderá a una rutina (procedimiento, función), un programa o un conjunto de datos (una entidad lógica). Todo aquello que se corresponda con sub-espacio de direcciones independientes.

Cada programa contiene una cierta cantidad de segmentos. Los primeros segmentos se reservan para procedimientos, datos y pila, pertenecientes al programa en ejecución. Los segmentos restantes contienen un archivo por segmento, así que los procesos pueden direccionar todos sus archivos directamente sin tener que abrirlos ni usar primitivas especiales de entrada/salida. Cada archivo puede crecer de forma completamente independiente de los otros, con cada byte direccionado por un par (segmento, desplazamiento).Por otro lado, colocando objetos diferentes en diferentes segmentos, se facilita la compartición de estos objetos entre procesos múltiples.

Segmentación Paginada.

Como su propio nombre indica, la segmentación paginada intenta aunar lo mejor de los dos esquemas. La segmentación proporciona soporte directo a las regiones del proceso y la paginación permite un mejor aprovechamiento de la memoria y una base para construir un esquema de memoria virtual. Con esta técnica, un segmento está formado por un conjunto de páginas, y por tanto, no tiene que estar contiguo en memoria.

Paginación por Demanda.

Segmentación pura no es adecuada para memoria virtual ⇒ Tamaño de segmentos variable. 

Paginación y segmentación paginada sí son para memoria virtual ⇒ (1) Bloque transferido → Página (2) Memoria virtual + Paginación → Paginación por demanda.

Estrategia de implementación: Uso del bit de validez, donde la página no residente se marca como no válida.

Acceso a una página (Excepción de falta de página de la MMU al kernel del sistema operativo si la página no está en la MMU): el kernel del sistema operativo trae la página correspondiente de memoria secundaria ⇒ el kernel del sistema operativo debe diferenciar entre página no residente y página inválida. 

Prepaginación ⇒ Traer páginas por anticipado (no por demanda): En caso de falta de página se traen además otras páginas que se consideran que necesitará el proceso → Beneficiosa dependiendo de si hay acierto en la predicción. 

Tratamiento de falta de página (peor de los casos, falta de página puede implicar dos operaciones de E/S al disco) ⇒ Tratamiento de la excepción provocado por la MMU (dirección de fallo disponible en registro).

Algoritmos de Reemplazo de Página.

Objetivo de los algoritmos de reemplazo: Minimizar la tasa de fallos de página. Cada algoritmo tiene versión local y global: local ⇒ criterio se aplica a las páginas residentes del proceso, y global ⇒ criterio se aplica a todas las páginas residentes. Algoritmos conocidos: Óptimo, FIFO (First In First Out), Clock (Reloj o segunda oportunidad) = FIFO + uso del bit de referencia; y LRU (Least Recently Used). Además estos algoritmos se utilizan en técnicas de buffering de páginas.

LRU ⇒ Criterio: reemplaza la página residente menos usada recientemente. Está basado en el principio de proximidad temporal de referencias: si es probable que se vuelve a referenciar las páginas accedidas recientemente, entonces la página que se debe reemplazar es la que no se ha referenciado desde hace más tiempo. Sutileza en su versión global: menos recientemente usada en el tiempo lógico de cada proceso (no tiempo real).Difícil implementación estricta (hay aproximaciones) ⇒ Precisaría una MMU específica. Posible implementación con hardware específico: en entrada de TP hay un contador, en cada acceso a memoria MMU copia contador del sistema a entrada referenciada; y el reemplazo sería para la página con contador más bajo.

Buffering de páginas. Mantiene una lista de marcos de página libres.
(1) Si falta de página ⇒ siempre usa marco de página libre (no reemplazo);
(2) Si número de marcos libres < umbral ⇒ “demonio de paginación” aplica repetidamente el algoritmo de reemplazo: páginas no modificadas pasan a lista de marcos de páginas libres y páginas modificadas pasan a lista de marcos de páginas modificados (cuando se escriban a disco pasan a lista de libres y pueden escribirse en tandas (mejor rendimiento));
(3) Si se referencia una página mientras está en estas listas ⇒ falta de página: dicha página la recupera directamente de la lista (no E/ S).

Puede darse el caso de que haya páginas marcadas como “no reemplazables” ⇒ se aplica a páginas del propio sistema operativo, también se aplica mientras se hace DMA sobre una página. Algunos sistemas operativos ofrecen a aplicaciones un servicio para fijar en memoria una o más páginas, pudiendo afectar positivamente al rendimiento del sistema.

Políticas de Asignación de Marcos de Página. 

Estrategia de asignación fija ⇒ Número de marcos asignados al proceso (conjunto residente) es constante.
Puede depender de características del proceso (tamaño, prioridad, etc.). No se adapta a las diferentes necesidades de memoria de un proceso a lo largo de su ejecución. Comportamiento del procesos es relativamente predecible. Sólo tiene sentido usar reemplazo local. La arquitectura de la máquina impone un número mínimo de marcos de página que debe asignarse a un proceso (por ejemplo, la instrucción “move” requiere un mínimo de 3 marcos de página).

Estrategia de asignación dinámica ⇒ Número de marcos varía dependiendo de comportamiento del proceso (y posiblemente de los otros procesos en el sistema). Asignación dinámica + reemplazo local → el proceso va aumentando o disminuyendo su conjunto residente dependiendo de su comportamiento (distintas fases de ejecución del programa) y tiene un comportamiento relativamente predecible. Asignación dinámica + reemplazo global → los procesos se quitan las páginas entre ellos, teniendo un comportamiento difícilmente predecible.

Operaciones sobre las Regiones de un Proceso.

Como ya sabemos, el espacio de direccionamiento de un proceso se compone de varias regiones de memoria y cada región de memoria se caracteriza por varios atributos:

(1) sus direcciones de inicio y fin;
(2) los derechos de acceso que tiene asociados;
(3) el objeto asociado (por ejemplo, un archivo ejecutable que contiene el código ejecutado por el proceso).

Las regiones de memoria contenidas en el espacio de direccionamiento de un proceso pueden determinarse mostrando el contenido del archivo maps, situado en el directorio de cada proceso en el sistema de archivos /proc. Las operaciones que el kernel del sistema operativo puede realizar sobre las regiones de memoria de un proceso son las siguientes:

(1) Creación de región ⇒ Al crear mapa inicial o por solicitud posterior;
(2) Liberación de región ⇒ Al terminar el proceso o por solicitud posterior;
(3) Cambio de tamaño de región ⇒ Del heap o de la pila (stack);
(4) Duplicado de región ⇒ Operación requerida por el servicio fork.
 


No comments:

Post a Comment