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

41
ADMINISTRACIÓN DE LA MEMORIA Sistemas Operativos Héctor E. Medellín Anaya

Upload: others

Post on 26-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ADMINISTRACIÓN DE LA MEMORIA...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

ADMINISTRACIÓN DE LA MEMORIA

Sistemas OperativosHéctor E. Medellín Anaya

Page 2: ADMINISTRACIÓN DE LA MEMORIA...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

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

Page 3: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 4: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 5: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 6: ADMINISTRACIÓN DE LA MEMORIA...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

Monoprogramación sin intercambio ni paginación

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

Page 7: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 8: ADMINISTRACIÓN DE LA MEMORIA...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

Análisis de rendimiento

Page 9: ADMINISTRACIÓN DE LA MEMORIA...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

Particiones fijas

Page 10: ADMINISTRACIÓN DE LA MEMORIA...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

Intercambio: Multiprogramación con particiones variables

Page 11: ADMINISTRACIÓN DE LA MEMORIA...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

Asignación de espacio

Page 12: ADMINISTRACIÓN DE LA MEMORIA...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

Mapas de bits

Page 13: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 14: ADMINISTRACIÓN DE LA MEMORIA...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

El sistema compañero

Page 15: ADMINISTRACIÓN DE LA MEMORIA...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

Memoria virtual

Page 16: ADMINISTRACIÓN DE LA MEMORIA...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

Paginación

Page 17: ADMINISTRACIÓN DE LA MEMORIA...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

Operación interna de la MMU

Page 18: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 19: ADMINISTRACIÓN DE LA MEMORIA...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

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

Page 20: ADMINISTRACIÓN DE LA MEMORIA...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

Anomalía de Belady

Page 21: ADMINISTRACIÓN DE LA MEMORIA...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

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

Page 22: ADMINISTRACIÓN DE LA MEMORIA...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

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

Page 23: ADMINISTRACIÓN DE LA MEMORIA...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

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).

Page 24: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 25: ADMINISTRACIÓN DE LA MEMORIA...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

Fallas de página

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

Page 26: ADMINISTRACIÓN DE LA MEMORIA...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

Continuación

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

Page 27: ADMINISTRACIÓN DE LA MEMORIA...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

Nivel del A.M. en MINIX

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

Page 28: ADMINISTRACIÓN DE LA MEMORIA...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

Esquema de la memoria

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

Page 29: ADMINISTRACIÓN DE LA MEMORIA...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

Esquema de la memoria interna de un solo proceso

Page 30: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 31: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 32: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 33: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 34: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 35: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 36: ADMINISTRACIÓN DE LA MEMORIA...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

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

Page 37: ADMINISTRACIÓN DE LA MEMORIA...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

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);

Page 38: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 39: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 40: ADMINISTRACIÓN DE LA MEMORIA...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

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.

Page 41: ADMINISTRACIÓN DE LA MEMORIA...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

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.