administraciÓn de la memoria...2. intentar asignar memoria al proceso hijo. 3. copiar la imagen del...

Post on 26-Sep-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ADMINISTRACIÓN DE LA MEMORIA

Sistemas OperativosHéctor E. Medellín Anaya

Contenido

⬥ Administración de la memoria sin intercambio ni paginación

⬥ Intercambio⬥ Memoria virtual⬥ Algoritmos de sustitución de páginas⬥ Aspectos de diseño para sistemas de paginación⬥ Panorama de administración de memoria en MINIX

Introducción

La ley de Parkinson dice que "los programas se expanden con el fin de llenar la memoria disponible para contenerlos".

La parte del sistema operativo que se encarga de la memoria se llama administrador de memoria.

Su labor es llevar el control de qué partes de la memoria están en uso y cuáles no lo están, asignar memoria a los procesos cuando la necesiten y retirárselas cuando terminen, y administrar el intercambio entre la memoria central y el disco cuando la memoria central no baste para contener todos los procesos.

Direcciones físicas y lógicas

Las direcciones lógicas o virtuales son las generadas por la CPU.

Las direcciones físicas son las que ve la unidad de memoria.

Carga dinámica

En la carga dinámica una rutina no es cargada hasta que es llamada.

En enlace dinámico en lugar de posponer la carga hesta el tiempo de ejecusión, el enlace es el que se pospone.

Monoprogramación sin intercambio ni paginación

La memoria se divide entre el sistema operativo y un solo proceso de usuario.

Multiprogramación y uso de la memoria

Utilización de la unidad central de procesamiento como función del número de procesos que hay en la memoria.

Análisis de rendimiento

Particiones fijas

Intercambio: Multiprogramación con particiones variables

Asignación de espacio

Mapas de bits

Administración con listas enlazadas

Primer ajuste: el administrador ratrea la lista hasta hallar una cavidad que sea lo suficientemente grande.

Siguiente ajuste: igual que el primer ajuste pero empezando en donde se quedó la vez anterior.

El que mejor ajusta: busca en toda la lista hasta encontrar la cavidad que ajusta mejor.

El que peor ajusta: toma siempre la cavidad más grande disponible.

El sistema compañero

Memoria virtual

Paginación

Operación interna de la MMU

Algoritmos de sustitución de páginas

Sustitución de páginas óptima

Se sustituye aquella página que se vaya a referenciar dentro del tiempo más largo posible.

Sustitución de página no usada recientemente

Se mantiene dos bits R y M que indican si una página fue referenciada (R) y/o modificada (M). Se clasifican la páginas en cuatro categorías de acuerdo:

Clase 0: no referido, no modificado

Clase 1: no referido, modificado

Clase 2: referido, no modificado

Clase 3: referido, modificado

Se retira una página elegida al azar de la clase no vacía con la numeración inferior.

Sustitución de páginas donde la primera que entra es la primera que sale o FIFO

Se usa una cola ordenada en donde las más antigua esta a la cabeza y la de atrás es la más reciente. Se pueden examinar los bits R y M para eliminar la página más antigua que no haya sido modificada y referenciada primero. El algoritmo continua buscando las más antiguas de clase 1,2 y 3.

El FIFO de segunda oportunidad verifica el bit R, si es 1, pone la página en la cola con el bit R a cero y continua la búsqueda.

Sustitución de páginas

Anomalía de Belady

Sustitución de páginas usadas menos recientemente (LRU)

Se puede simular LRU mediante un algoritmo llamado algoritmo no usado frecuentemente o NFU. En cada interrupción de reloj, el sistema operativo rastrea todas las páginas que están en a memoria. Para cada página, el bit R, se suma a un contador. Cuando ocurre una falla de página, se elige la página con el contador más pequeño para su sustitución.

Se puede optar por el mecanismo de la figura siguiente, en esta, los bits se agregan después de desplazar el contador un bit a la derecha, a esto se le llama envejecimiento.

Simulación de la página usada menos recientemente en software

El algoritmo de envejecimiento simula LRU en software. Se muestran seis páginas para cinco pulsos de reloj. Los cinco pulsos de reloj se representan por los incisos de (a) a (e).

Sustitución de páginas

Sustitución de páginas local contra global. (a) Configuración original. (b) Sustitución de páginas local. (c) Sustitución de páginas global.

Fallas de página

Tasa de fallas de página como función del número de cuadros de página asignados.

Continuación

Instrucción que puede causar una falla de página.

Nivel del A.M. en MINIX

El administrador de la memoria se ejecuta fuera del kernel, en el espacio del usuario.

Esquema de la memoria

La memoria se asigna mediante dos mecanismos, cuando un proceso se ramifica y mediante la llamada a exec.

Esquema de la memoria interna de un solo proceso

Manejo de mensajes

Las llamadas siguientes están relacionadas con la asignación y desasignación de memoria: fork, exit, wait, brk, y exec.

Las siguientes pueden afectar el contenido de la memoria: signal, kill, alarm y pause.

Las cinco llamadas a get/set no tiene nada que ver con la administración de la memoria en absoluto.

Estructuras de datos y algoritmos que administran la memoria

El administrador de la memoria tiene dos estructuras de datos principales: la tabla de procesos y la tabla de cavidades.

La ranura k de la tabla de procesos se refiere al mismo proceso que la ranura k de la tabla del sistema de archivos y del kernel. Cuando se crea o se destruye un proceso, las tres partes actualizan sus tablas para reflejar la nueva situación, con el fin de mantenerlas sincronizadas.

La tabla de procesos del administrador de memoria se llama mproc. El campo más importante es el arreglo mp_seg, el cual tiene tres captaciones, para los segmentos de texto, datos y pila, respectivamente. Cada captación es una estructura que contiene la dirección virtual, la dirección física y la longitud del segmento.

Asignación de memoria

(a) Un proceso en la memoria. (b) Su representación en la memoria para un espacio I y D no separado. (c) Su representación en la memoria para un espacio separado para I y D.

Las llamadas al sistema fork, exit y wait

La creación de un proceso se efectúa por fork, que se ejecuta como una serie de pasos, como se muestra 1. Verificar si la tabla de procesos está repleta.2. Intentar asignar memoria al proceso hijo.3. Copiar la imagen del proceso padre en la memoria del proceso hijo.4. Hallar una ranura del proceso libre y copiar la ranura del proceso padre en él.5. Meter el mapa de memoria del derivado en la tabla del proceso.6. Elegir un pid para el proceso hijo.7. Indicar al kernel y al sistema de archivo acerca del proceso hijo.8. Informar del mapa de la memoria del proceso hijo al kernel.9. Enviar mensajes de contestación al proceso padre y al proceso hijo.

Terminación de un proceso

Un proceso termina por completo cuando ocurren dos eventos: (1) El proceso mismo ha salido (o ha sido eliminado por una señal) y (2) su proceso padre ha ejecutado una llamada al sistema wait para saber lo que sucedió. Un proceso que ha salido o ha sido eliminado, pero cuyo padre todavía no ha realizado una llamada a wait por él, entra en un tipo de animación suspendida, que algunas veces se conoce como estado zombie. Se evita que éste se programe y tiene desactivado su cronómetro de alarma (si estaba activado), pero no se elimina de la tabla de procesos. Su memoria no se libera, aunque pudiera haberse hecho. Cuando finalmente el proceso padre realiza una llamada a wait, se libera la ranura de la tabla de procesos y la memoria, y se informa al sistema de archivo y al kernel.

continuación

(a) Situación en la que el proceso 12 está a punto de salir. (b) situación después de que ha salido.

La llamada al sistema exec

Esta ejecuta su trabajo en una serie de pasos, como se muestra

1. Verificar las autorizaciones (¿es ejecutable el archivo?)

2. Leer los encabezados para obtener los tamaños del segmento y del total.

3. Capturar los segmentos y el medio del solicitante.

4. Liberar la memoria anterior y asignar la nueva.

5. Copiar la pila en al nueva imagen de la memoria.

6. Copiar los segmentos de texto y datos en la nueva imagen de la memoria.

7. Verificar y manejar los bits setuid, setgid.

8. Fijar la captación de la tabla de proceso.

9. Indicar al kernel que ahora el proceso es ejecutable

Ejemplo de llamada a exec

Cuando un usuario teclea

ls -l f.c g.c

al shell, éste hace la llamada

execve("/bin/ls", argv, envp);

continuación

(a) Los arreglos que se pasan a execv. (b) La pila construida por execv. (c) La pila después de la recolocación hecha por el adm. de la memoria. (d) La pila como figura en main al inicio de la ejecución.

La llamada al sistema brk

Los procedimientos de biblioteca brk y sbrk se utilizan para ajustar el límite superior del segmento de datos. El primero toma un tamaño absoluto y llama a brk. El segundo toma un incremento positivo o negativo al tamaño corriente, determina el tamaño del nuevo segmento de datos y después llama a brk.

La variable brksize, siempre contiene el tamaño corriente tal que sbrk pueda obtenerlo. La variable se inicializa a un símbolo generado por el compilador que da el tamaño inicial del texto más datos (I y D no separados) o simplemente datos (I y D separados). El nombre y, de hecho, la existencia real de tal símbolo dependen del compilador.

Manejo de señales

Las señales se pueden generar de dos formas: por medio de una llamada al sistema kill y por medio del kernel. Las señales originadas por el kernel que regularmente se implementan son SIGINT, SIGQUIT y SIGALRM.

El administrador de la memoria procesa todas las señales de la misma forma. Para cada proceso que deba señalarse, se hacen varias verificaciones para ver si la señal es viable. Un proceso puede señalar a otro si tienen el mismo uid y si se iniciaron desde la misma terminal. Además, no pueden señalarse ni los zombies ni los procesos que hayan llamado explícitamente a signal para ignorar la señal.

Otras llamadas al sistema

El administrador de la memoria también maneja algunas otras llamadas al sistema simple: getpid, getuid, getgid, setuid y setgid. Las tres primeras llamadas simplemente buscan y entregan la información solicitada. getuid produce el uid efectivo y el real. Dependiendo de si se llamó a getuid o a geteuid, uno o el otro se extrae del mensaje y se entrega al usuario. Lo mismo sucede con gid. Estas cinco llamadas son las más simples de minix.

top related