Tema 17 – Sistemas operativos: Gestión de memoria.

1. Introducción. 2

1.1. Relación con los ciclos impartidos en FP. 2

1.2. Introducción a los SSOO. 2

1.3. Introducción a la Gestión de Memoria. 2

2. Fundamentos de la Gestión de Memoria. 2

2.1. Localidad. 2

2.2. Jerarquía de Memoria. 2

2.3. Fragmentación de Memoria. 3

2.4. Reubicación. 3

2.5. Protección y uso compartido. 3

3. Esquemas de gestión de memoria. 3

3.1. Máquina desnuda. 3

3.2. Monitor monolítico o residente. 4

3.3. Particionado de memoria estático. 4

3.4. Particionado de memoria dinámico. 4

3.5. Segmentación. 4

3.6. Paginación. 5

3.7. Segmentación paginada. 5

4. Intercambio. 5

5. Memoria Virtual 6

5.1. Concepto. 6

5.2. Reemplazo de páginas. 6

5.3. Algoritmos. 6

6. Bibliografía y Personalidades Influyentes/Destacadas. 7

6.1. Bibliografía. 7

6.2. Personalidades Destacadas. 7

1. Introducción

1.1. Relación con los ciclos impartidos en FP

Este tema está directamente relacionado con los siguientes módulos y ciclos formativos de la rama de informática:

· CFGS Administración de Sistemas Informáticos: Sistemas informáticos monousuario y multiusuario (SyAI).

· CFGS Desarrollo de Aplicaciones Informáticas: Sistemas informáticos multiusuario y en red (SyAI).

· CFGM Explotación de Sistemas Informáticos: Sistemas operativos en entornos monousuario y multiusuario (SyAI).

1.2. Introducción a los SSOO

Stallings, 2001. “Un programa que controla la ejecución de los programas de aplicación y que actúa como interfaz entre el usuario de un computador y el hardware del mismo”

· Conjunto de programas de control cuya finalidad es hacer más fácil y eficiente el uso del ordenador en que se ejecutan

· Están presentes en todo tipo de sistemas electrónicos que necesiten un software de control sobre el que un usuario pueda trabajar fácilmente, desde super-ordenadores con cientos de microprocesadores (Solaris, AIX, Linux), hasta en aparatos tan comunes como agendas electrónicas (Windows Mobile o Palm OS), teléfonos móviles (Windows Mobile o Simbian OS, y como no, ordenadores personales (WXP, Linux, Mac OS X, etc.)

· Monoprogramación: Sólo se puede ejecutar un proceso y hasta que no se termine no puede iniciarse el siguiente.

· Multiprogramación/Multitarea: Se pueden ejecutar varios procesos simultáneamente, compartiendo el tiempo de uso de procesador. Mejor aprovechamiento de los recursos y aumento del rendimiento del microprocesador.

1.3. Introducción a la Gestión de Memoria

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

2. Fundamentos de la Gestión de Memoria

2.1. Localidad

· La memoria es una amplia tabla de palabras o bytes, cada una de ellas con su propia dirección. Los programas, cuando se ejecutan, tienden a concentrar sus referencias a memoria en un determinado intervalo de tiempo en un subconjunto bien definido de su espacio total de direcciones.

o Temporal: Las direcciones de memoria referenciadas recientemente tienen una alta probabilidad de ser referenciadas en un futuro próximo. Un ejemplo son los bucles for o while(i<1000) i++;

o Espacial: Una vez hecha una referencia a una dirección de memoria, es muy probable que las direcciones de memoria cercanas sean también referenciadas. Por ejemplo al acceder a matrices, o la propia ejecución secuencial del código.

2.2. clip_image001Jerarquía de Memoria

· clip_image002Cuanto más rápida es la memoria, más pequeña es su capacidad y mayor su precio. Para no incrementar su coste en exceso la solución pasa por emplear un diseño jerárquico en la memoria, apoyándose en el principio de localidad de los programas.

· Acorde con el principio de localidad, un proceso tiende a concentrar sus referencias en un intervalo de tiempo en un conjunto reducido de direcciones de memoria, para mejorar el rendimiento global del sistema, basta con ubicar esas direcciones implicadas durante su utilización masiva en una memoria más rápida que no será necesario que sea de tan alta capacidad. Una vez finalizado ese fragmento de código, la localidad del programa se trasladará a otras posiciones de memoria, que pasarán a ser cargadas en esa memoria de alta velocidad, y el resto podrá mantenerse en memoria principal, o incluso, en disco. Este es el principio de funcionamiento de la memoria caché, y en parte, de la memoria virtual. En este tema nos centraremos en el intercambio entre la memoria principal y el disco, ya que, la gestión de la memoria caché, la realiza principalmente el hardware, y no el SO.

· Cuando el procesador necesite datos que no se encuentren en el nivel superior, será necesario traerlos desde el correspondiente nivel inferior (fallo de página). Para aumentar el rendimiento, en número de fallos debe ser mínimo.

2.3. Fragmentación de Memoria

· Es el desaprovechamiento de memoria que por alguna razón se produce en el sistema.

· Interna: Se debe a la diferencia de tamaño entre la partición de memoria y el objeto residente dentro de ella. Se produce cuando tenemos particiones de tamaño fijo.

· Externa: Se debe al desaprovechamiento de memoria entre particiones como consecuencia de la dispersión del espacio libre entre áreas discontinuas.

2.4. Reubicación

· Es la posibilidad de poder ubicar a los programas en las distintas zonas de memoria.

· Las direcciones de memoria donde se carga un programa cuando se ejecuta no son siempre las mismas, puesto que el estado de la memoria en un sistema multiprogramado varía de unos instantes a otros. Esto complica la función de cargar los programas, debido a que las referencias a memoria deben ser calculadas en el momento de la carga.

· Reubicación estática: El programa se puede ubicar en diferentes zonas de memoria sólo en el momento de carga. Es llevada a cabo por el montador de enlaces, conociendo la dirección de memoria donde se cargará el programa, recalcula todas las direcciones como relativas a ésta.

· Reubicación dinámica: El cambio de direcciones se hace dinámicamente durante cada referencia, en tiempo de ejecución. Cada dirección generada por el programa, dirección lógica, es traducida a una dirección real en cada acceso a memoria. Necesita de hardware adicional, como por ejemplo registros base+offset de los micros 80×86

2.5. Protección y uso compartido

· Cuando varios programas están cargados simultáneamente en la memoria es necesario establecer mecanismos de protección, con objeto de evitar que unos procesos puedan acceder a zonas de memoria asignadas a otros procesos, amén de zonas asignadas al sistema operativo.

· Además, el sistema deberá controlar las zonas de memoria compartida entre aplicaciones.

· Métodos de protección:

o Registros límite: delimitan las zonas de memoria accesibles por parte de cada proceso. No soporta la reubicación dinámica.

o Registros base y límite: Las direcciones lógicas son las generadas por el programa de usuario y las direcciones físicas las que se emplean para acceder a la memoria. Para generar la dirección física, a la dirección lógica se le suma el valor almacenado en el registro base, siempre y cuando la dirección lógica sea menor que el valor almacenado en el registro límite. Soporta la reubicación dinámica.

o Tablas de acceso: típicas en sistemas paginados. En ellas se pueden establecer diferentes derechos de acceso y protección a cada zona de memoria.

3. Esquemas de gestión de memoria

3.1. Máquina desnuda

· Modelo empleado cuando es necesario que el usuario tenga un completo control sobre el espacio de memoria. No existe ningún mecanismo de protección de memoria, ni ningún sistema operativo que controle el hardware.

3.2. Monitor monolítico o residente

· La memoria está dividida en una parte para el monitor o sistema operativo, y otra para los procesos de usuario que se vayan cargando. Este enfoque se utilizó en MS-DOS.

· Es posible, y recomendable, proteger la zona de memoria asignada al sistema operativo, bien cargando el SO en una ROM, o con un registro valla.

3.3. Particionado de memoria estático

· El particionado de la memoria surge como soporte a la multiprogramación. Es necesario dividir la memoria disponible en diferentes particiones y asignar cada una de ellas a los distintos programas que se vayan a ejecutar.

· Multiprogramación con un número fijo de tareas (MFT): Se trata de una asignación contigua de memoria con particiones múltiples de tamaño fijo, es decir, a cada programa se le asignan una serie de posiciones de memoria contiguas.

· Tanto el tamaño como el número de particiones es fijo. El sistema será por tanto multiprogramado pero con un número fijo de tareas.

· La asignación de particiones se puede hacer con colas independientes para cada región, o con una cola unificada, en este caso,

· Cada proceso se asignará a la partición de memoria más pequeña en la que cabe, o bien a la primera que encuentre, dependiendo del algoritmo.

· Se produce fragmentación interna y externa, y es complicados si los procesos incrementan su tamaño de forma dinámica.

3.4. Particionado de memoria dinámico

· Multiprogramación con un número variable de tareas (MVT): Asignación contigua de particiones múltiples de tamaños variables.

· Tanto el número de particiones como su tamaño son variables. El sistema será por tanto multiprogramado con un número variable de tareas.

· Complica la gestión de memoria pero se eliminan las pérdidas de memoria de MFT

· Ahora es necesario preocuparse de aspectos como la asignación de zonas de memoria a los trabajos, la desocupación de zonas de memoria y el seguimiento del estado de cada partición.

· No existe fragmentación interna, o es muy pequeña. Pero la fragmentación externa si existirá debido a las zonas de memoria libre van quedando separadas unas de otras, por lo que pueden quedar zonas de memoria si aprovechar. Se puede compactar pero lleva bastante tiempo a ordenador, y sólo se hace si existe hardware específico.

3.5. Segmentación

· Esquema de gestión de memoria resultado de la evolución de la multiprogramación con un número variable de tareas con protección basada en registros base y límite. Es una generalización del particionado de memoria dinámico (MVT)

· Se divide la memoria en segmentos. Cada segmento debe ocupar posiciones de memoria contiguas, no es posible dividir un segmento en dos o más trozos. Un ejemplo son la familia 80×86, donde el código, los datos y la pila están en segmentos diferentes.

· La traducción de direcciones lógicas y físicas la realiza la unidad de manejo de memoria (MMU). Las direcciones lógicas tienen siempre dos componentes, un número de segmento (dirección base) y un desplazamiento dentro del segmento.

· Para efectuar la traducción, cada proceso emplea una tabla de descriptores de segmento, o TDS. Cada descriptor de segmento se emplea para asignar a un segmento virtual (de código, datos, etc.) a un segmento físico. Contiene la dirección física, el tamaño del propio segmento o desplazamiento máximo dentro del mismo, y otros campos adicionales como los derechos de acceso.

· Ventajas:

o Los diferentes bloques de un proceso: código, datos, pila, datos compartidos, etc., pueden estar situados diferentes zonas de la memoria física, en segmentos diferentes

o Suministra reubicación dinámica, los programas pueden así moverse de sitio en tiempo de ejecución, y soporta el crecimiento dinámico de los segmentos (modificando el registro límite).

o Proporciona tanto protección como uso compartido.

o Elimina la fragmentación interna, aunque puede presentarse fragmentación externa.

· Desventajas:

o Puede presentar fragmentación externa, se evita con la compactación.

o El tamaño máximo de un segmento está limitado por el número de bits que se reserven para el campo límite en la entrada del descriptor.

o Es complicado implementar eficientemente la memoria virtual.

3.6. Paginación

· Asignación de memoria no contigua. Tamaño de página fijado por el hardware.

· El espacio de direcciones virtuales de un proceso está dividido en bloques de tamaño fijo, llamados páginas. Estos bloques se almacenan en memoria física en lo que se conoce como marcos de página.

· La ventaja de este esquema es que los marcos no tienen porqué estar contiguos en memoria física, con lo que evitamos la fragmentación externa.

· La Unidad de Manejo de Memoria (MMU) realiza la traducción entre páginas (direccionamiento virtual) y marcos de páginas (direccionamiento real o físico).

· Cada proceso construye una tabla de páginas con las direcciones de memoria de sus marcos de página. La dirección lógica se divide en Nº de Página (P) y Desplazamiento (D). P se emplea como índice en la tabla de páginas, localizando así el número de marco donde se proyecta cada página. A la dirección del marco se le suma el desplazamiento D, dando lugar a la dirección física.

· Dado que el tamaño de página es fijo, la última página asignada a cada proceso podrá estar completamente llena, o prácticamente vacía. Como termino medio, la fragmentación será la mitad del tamaño de página por proceso.

· Con la paginación se elimina la fragmentación externa, y, eligiendo un tamaño de página de compromiso para que no aumente en exceso el tamaño de la tabla de páginas, la fragmentación interna no es grave.

3.7. Segmentación paginada

· Divide los distintos segmentos de un proceso en páginas. Por cada proceso debe existir una tabla de segmentos que se utiliza para localizar las distintas tablas de páginas, éstas, permitirán a su vez localizar las páginas de cada uno de los segmentos

· La dirección virtual en este caso consta de tres partes: S-P+D. La primera (S) sirve para localizar la entrada correspondiente dentro de la tabla de descriptores de segmento, que contendrá la posición en la que empiezan las páginas del proceso en la tabla de páginas, la segunda (P) sirve como índice para localizar una página concreta dentro de las páginas que pertenecen al proceso, y la entrada contendrá la dirección del marco de página en memoria, y la última (D) indica el desplazamiento dentro del marco de página.

· Se combinan las ventajas de la segmentación y la paginación a costa de complicar el hardware. En el peor de los casos necesita tres accesos a memoria para leer una única posición. Por ese motivo es necesario introducir hardware que acelere este proceso.

4. Intercambio

· La técnica de intercambio (swapping) significó en su momento una manera de permitir que en los sistemas de tiempo compartido existieran más procesos de los que caben en memoria. Se trata de un mecanismo antecesor de la memoria virtual

· Se basaba en usar un disco, o una parte de disco, como respaldo de la memoria virtual. Cuando no cabían en la memoria todos los procesos activos, se elige un proceso residente, y se copiaba al disco swap. El criterio de selección tenían en cuenta que estuviera bloqueado, el tamaño del proceso y la prioridad del proceso entre otros.

5. Memoria Virtual

5.1. Concepto

· Es un esquema de gestión de memoria que permite que los procesos puedan ejecutarse sin estar cargados completamente en memoria. Así, los procesos podrán ser mayores que la memoria real. Por ejemplo, un ordenador actual con W2K tendrá un espacio de direcciones virtual de 4 GB (2GB del SO y 2GB para el usuario), sin embargo, su memoria real puede ser de, por ejemplo, 1GB.

· El control de transferencia de datos entre la memoria principal y el dispositivo de almacenamiento secundario es llevado por el sistema operativo, por lo que es totalmente transparente para el usuario y las aplicaciones de usuario.

· Permite tener más procesos en memoria, con lo que aumentamos el grado de multiprogramación y el rendimiento del sistema.

· Se puede utilizar junto con segmentación y paginación, pero se suele utilizar con paginación porque las transferencias entre memoria principal y secundaria se realizan en bloques de tamaño fijo, y eso facilita la gestión.

· En la tabla de páginas se añade un bit en cada entrada, que determina si dicha entrada está en memoria o no. Si se accede a una página que no está en memoria se produce un “fallo de página” y el sistema recupera el control y transfiere la página del disco a la memoria. Además, será necesario emplear una tabla auxiliar que permita saber dónde se encuentran almacenadas las páginas en el dispositivo de almacenamiento secundario.

· Es importante reducir el número de fallos de página para no ralentizar en exceso la ejecución del programa.

o Paginación bajo demanda: en la que sólo se cargan las páginas en memoria cuando son requeridas

o Paginación anticipada: en la que ciertas páginas que previsiblemente serán utilizadas en un futuro próximo se cargan sin necesidad de que hayan sido referenciadas, reduciendo el número total de fallos de página.

5.2. Reemplazo de páginas

· Existen dos estrategias de reemplazo de páginas:

o Reemplazo local: siempre robará páginas asignadas al proceso que provocó el fallo. Se utiliza en W2000. El mayor problema estriba en determinar la cantidad de marcos que se deben asignar a cada proceso y el posible desaprovechamiento de la memoria.

o Reemplazo global: Se podrá elegir una página que no necesariamente esté asignada al proceso que provocó el fallo, es decir, los procesos pueden “robarse” páginas en memoria. Se usa en Unix, obtiene un mejor aprovechamiento de la memoria, pero se puede llegar a una situación de competencia extrema, llevando al sistema a un estado de hiperpaginación (elevada tasa de fallos de página).

· Es necesario establecer una estrategia de control de carga que ajuste el grado de multiprogramación, y evite así la hiperpagicación. Existen dos técnicas:

o Conjunto de trabajo: El conjunto de trabajo de un proceso es el conjunto de páginas a las que se accede de forma frecuente. La estrategia consiste en determinar los conjuntos de trabajo de los procesos activos, para intentar mantenerlos residentes en memoria.

o Frecuencia de fallos de página: Consiste en controlar la frecuencia de fallos de página de cada proceso. Se establece un límite superior y otro inferior, y se intenta que la frecuencia de fallos de página se encuentre siempre entre esos límites, bien asignándole páginas, o bien, retirándoselas.

· El SO debe proporcionar un algoritmo de reemplazo de páginas que sustituya aquellas páginas que han sido poco utilizadas recientemente.

5.3. Algoritmos

· Tienen como objetivo minimizar el número total de fallos de página y obtener un alto grado de aprovechamiento de la memoria.

· Algoritmo óptimo: Sustituye la página que va a tardar más tiempo en volver a ser referenciada. La tasa total de fallos es, por tanto, la más baja posible. No es realizable puesto que sería necesario conocer el futuro, pero sirve como base para evaluar al resto de algoritmos.

· FIFO: La primera página que entra en memoria, es la primera que sale. Se sustituye siempre la página que lleva más tiempo en memoria. El más sencillo de codificar, pero con el rendimiento más pobre, ya que puede sustituir una página muy usada.

· LRU (Least Recently Used): Aproximación al reemplazo óptimo. Sustituye la página menos usada en el pasado inmediato. Es un algoritmo bastante bueno, pero requiere hardware adicional de un alto coste para determinar qué páginas han sido accedidas y en qué instantes, por lo que se utilizan aproximaciones:

· Algoritmo del reloj global: Todas las páginas que pueden ser sustituidas se colocan en una lista circular. Cada cierto tiempo y con un puntero giratorio, un proceso de sistema borra los bits de referencia de la tabla de páginas. Si en la siguiente vuelta, el bit de referencia sigue desactivado, la página es buena candidata a ser sustituida.

· Algoritmos FIFO con segunda oportunidad: En este caso, al igual que en FIFO, se examina la página más antigua como posible víctima. Si su bit de referencia está desactivado, se sustituye, si está activo, se desactiva y se trata la página como si acabase de llegar a memoria.

· Algoritmo no usada frecuentemente: Se usa un contador software asociado a cada página, puesto inicialmente a cero, y que se incrementa en cada interrupción de reloj si el bit de referencia está a uno, y se borra el bit de referencia. A la hora de sustituir una página, se elige la que tenga el contador más bajo. El problema es que su eficiencia es baja.

6. Bibliografía y Personalidades Influyentes/Destacadas

6.1. Bibliografía

· Tanenbaum, A. S.: “Sistemas operativos: diseño e implementación”. 2ª Ed. Prentice Hall. 1998.

· Tanenbaum, A. S.: “Sistemas operativos modernos”. 2ª Ed. Prentice Hall. 2003.

· Stallings, W.: “Sistemas operativos”. 5ª Ed. Prentice Hall.2005.

· Carretero, Jesús: ”Sistemas operativos. Una visión aplicada”. McGraw Hill. 2001.

· http://es.tldp.org Documentación libre en español de Linux/Unix

· http://msdn.microsoft.com Centro de desarrollo de Microsoft.

· http://www.tutorialparaprofesores.com Documentación de Microsoft para profesores.

· http://technet.microsoft.com Documentación tecnológica de Microsoft

6.2. Personalidades Destacadas

· Linus Torvalds: Ingeniero informático finlandés, iniciador y desarrollador del núcleo (kernel) de Linux a partir del S.O. MINIX. Adoptó la licencia GPL permitiendo así su modificación, redistribución, copia y uso ilimitado.

· Andrew S. Tanenbaum: Director del Departamento de Sistemas en una universidad de Ámsterdam, es conocido por ser el creador de los sistemas operativos MINIX 3.0, con arquitectura micronúcleo y capaz de ejecutar programas UNIX, y Amoeba, sistema operativo completamente distribuido, creados con fines académicos, así como por escribir varios libros sobre sistemas operativos y redes de computadoras, muy valorados por los académicos de medio mundo.

Esquema

Tamaño de las particiones

Nº de Particiones

Memoria de los procesos

Traducción y protección

Fragmentación

Otros

Particionado de Memoria Estático

Fijo

Fijo

Contigua

Interna y externa

– Nº Fijo de tareas en multiprogramación.

– Colas independientes o una global.

Particionado de Memoria Dinámico

Variable

Variable

Contigua

Externa

– Nº variable de tareas en multiprogramación.

– Seguimiento del estado de las particiones y espacio libre.

Segmentación

Variable

Variable

Contigua pero en varios segmentos

-Reg. Base y Límite.

(Seg+Desp.)

– MMU

– TDS

Externa

– TDS: Nº Segmento, Dirección física, Tamaño, derechos de acceso, etc.

– Reubicación dinámica

– Crecimiento dinámico de los segméntos (código, datos, pila)

Paginación

Fijo

Fijo

En páginas no contiguas

– MMU

(Pag+Desp)

– MMU

– Tabla de páginas

Interna pero pequeña

– Páginas -> Mem. Lógica

– Marcos de P. -> Mem. Física

Segmentación paginada

En varios segmentos y estos en páginas no contiguas.

– MMU

– TDS y tabla de páginas.

(Seg,Pag,D)

– Divide los segmentos en páginas.

– Combina ventajas de ambos esquemas

Publicado: marzo 17, 2019 por Laura Gonzalez

Etiquetas: tema 17 informatica