Traductor

jueves, 30 de junio de 2016



Administracion de memoria 

La parte del sistema operativo que administra (parte de) la jerarquía de memoria se conoce como

administrador de memoria. Su trabajo es administrar la memoria con eficiencia: llevar el registro

de cuáles partes de la memoria están en uso, asignar memoria a los procesos cuando la

necesiten y desasignarla cuando terminen.




SIN ABSTRACCIÓN DE MEMORIA
La abstracción más simple de memoria es ninguna abstracción. Las primeras computadoras mainframe

(antes de 1960), las primeras minicomputadoras (antes de 1970) y las primeras computadoras

personales (antes de 1980) no tenían abstracción de memoria. Cada programa veía simplemente

la memoria física. Cuando un programa ejecutaba una instrucción como

MOV REGISTRO1, 1000

la computadora sólo movía el contenido de la ubicación de memoria física 1000 a REGISTRO1. Así,

el modelo de programación que se presentaba al programador era simplemente la memoria física,

un conjunto de direcciones desde 0 hasta cierto valor máximo, en donde cada dirección correspondía

a una celda que contenía cierto número de bits, comúnmente ocho.

Bajo estas condiciones, no era posible tener dos programas ejecutándose en memoria al mismo

tiempo. Si el primer programa escribía un nuevo valor en, por ejemplo, la ubicación 2000, esto borraría

cualquier valor que el segundo programa estuviera almacenando ahí. Ambos programas fallarían

de inmediato.

Incluso cuando el modelo de memoria consiste en sólo la memoria física hay varias opciones

posibles. En la figura 3-1 se muestran tres variaciones. El sistema operativo puede estar en la parte

inferior de la memoria en la RAM (Random Access Memory, Memoria de acceso aleatorio), como

se muestra en la figura 3-1(a), puede estar en la ROM (Read Only Memory, Memoria de sólo lectura)

en la parte superior de la memoria, como se muestra en la figura 3-1(b), o los controladores

de dispositivos pueden estar en la parte superior de la memoria en una ROM y el resto del sistema

en RAM más abajo, como se muestra en la figura 3-1(c). El primer modelo se utilizó antes en las

mainframes y minicomputadoras, pero actualmente casi no se emplea. El segundo modelo se utiliza

en algunas computadoras de bolsillo y sistemas integrados. El tercer modelo fue utilizado por las

primeras computadoras personales (por ejemplo, las que ejecutaban MS-DOS), donde la porción

del sistema en la ROM se conoce como BIOS (Basic Input Output System, Sistema básico de entrada

y salida). Los modelos (a) y (c) tienen la desventaja de que un error en el programa de usuario

puede borrar el sistema operativo, posiblemente con resultados desastrosos (la información del

disco podría quedar ininteligible).



UNA ABSTRACCIÓN DE MEMORIA:
ESPACIOS DE DIRECCIONES
Con todo, exponer la memoria física a los procesos tiene varias desventajas. En primer lugar, si los
programas de usuario pueden direccionar cada byte de memoria, pueden estropear el sistema operativo
con facilidad, ya sea intencional o accidentalmente, con lo cual el sistema se detendría en forma
súbita (a menos que haya hardware especial como el esquema de bloqueo y llaves de la IBM 360).

La noción de un espacio de direcciones
Una mejor solución es inventar una nueva abstracción para la memoria: el espacio de direcciones.
Así como el concepto del proceso crea un tipo de CPU abstracta para ejecutar programas, el
espacio de direcciones crea un tipo de memoria abstracta para que los programas vivan ahí. Un espacio
de direcciones (address space) es el conjunto de direcciones que puede utilizar un proceso
para direccionar la memoria. Cada proceso tiene su propio espacio de direcciones, independiente de
los que pertenecen a otros procesos (excepto en ciertas circunstancias especiales en donde los procesos
desean compartir sus espacios de direcciones).
El concepto de un espacio de direcciones es muy general y ocurre en muchos contextos. Considere
los números telefónicos. En los Estados Unidos y en muchos otros países, un número de teléfono
local es comúnmente un número de 7 dígitos. En consecuencia, el espacio de direcciones
para los números telefónicos varía desde 0,000,000 hasta 9,999,999, aunque algunos números, como
los que empiezan con 000, no se utilizan. Con el crecimiento de los teléfonos celulares, módems
y máquinas de fax, este espacio se está volviendo demasiado pequeño, en cuyo caso habrá qué utilizar
más dígitos. El espacio de direcciones para los puertos de E/S en el Pentium varía desde 0 hasta
16383. Las direcciones IPv4 son números de 32 bits, por lo que su espacio de direcciones varía
desde 0 hasta 232 – 1 (de nuevo, con ciertos números reservados).



MEMORIA VIRTUAL
Como consecuencia de estos desarrollos, existe la necesidad de ejecutar programas que son demasiado
grandes como para caber en la memoria y sin duda existe también la necesidad de tener
sistemas que puedan soportar varios programas ejecutándose al mismo tiempo, cada uno de los cuales
cabe en memoria, pero que en forma colectiva exceden el tamaño de la misma. El intercambio
no es una opción atractiva, ya que un disco SATA ordinario tiene una velocidad de transferencia pico
de 100 MB/segundo a lo más, lo cual significa que requiere por lo menos 10 segundos para intercambiar
un programa de 1 GB de memoria a disco y otros 10 segundos para intercambiar un
programa de 1 GB del disco a memoria.


ALGORITMOS DE REEMPLAZO DE PÁGINAS
Cuando ocurre un fallo de página, el sistema operativo tiene que elegir una página para desalojarla
(eliminarla de memoria) y hacer espacio para la página entrante. Si la página a eliminar se modificó
mientras estaba en memoria, debe volver a escribirse en el disco para actualizar la copia del mismo.
No obstante, si la página no se ha modificado (por ejemplo, si contiene el texto del programa), la
copia ya está actualizada y no se necesita rescribir. La página que se va a leer sólo sobrescribe en
la página que se va a desalojar.
Aunque sería posible elegir una página al azar para desalojarla en cada fallo de página, el rendimiento
del sistema es mucho mayor si se selecciona una página que no sea de uso frecuente. Si
se elimina una página de uso frecuente, tal vez tenga que traerse de vuelta rápidamente, lo cual produce
una sobrecarga adicional. Se ha realizado mucho trabajo, tanto teórico como experimental en
el tema de los algoritmos de reemplazo de páginas.



CUESTIONES DE IMPLEMENTACIÓN
Los implementadores de los sistemas de memoria virtual tienen que elegir entre los principales algoritmos
teóricos: entre el algoritmo de segunda oportunidad y el de envejecimiento, entre la asignación
de páginas local o global, y entre la paginación bajo demanda o la prepaginación. Pero
también tienen que estar al tanto de varias cuestiones prácticas de implementación. En esta sección
daremos un vistazo a unos cuantos de los problemas comunes y ciertas soluciones.



SEGMENTACIÓN
La memoria virtual que hemos analizado hasta ahora es unidimensional, debido a que las direcciones
virtuales van desde 0 hasta cierta dirección máxima, una dirección después de la otra. Para muchos
problemas, tener dos o más espacios de direcciones virtuales separados puede ser mucho mejor
que tener sólo uno. Por ejemplo, un compilador tiene muchas tablas que se generan a medida que
procede la compilación, las cuales posiblemente incluyen:
1. El texto del código fuente que se guarda para el listado impreso (en sistemas de procesamiento
por lotes).
2. La tabla de símbolos, que contiene los nombres y atributos de las variables.
3. La tabla que contiene todas las constantes enteras y de punto flotante utilizadas.
4. El árbol de análisis sintáctico, que contiene el análisis sintáctico del programa.
5. La pila utilizada para las llamadas a procedimientos dentro del compilador.


INVESTIGACIÓN ACERCA DE LA ADMINISTRACIÓN
DE MEMORIA
La administración de memoria, en especial los algoritmos de paginación, fue alguna vez un área
fructífera para la investigación, pero la mayor parte de eso parece haber desaparecido desde hace
mucho tiempo, por lo menos para los sistemas de propósito general. La mayoría de los sistemas reales
tienden a utilizar cierta variación sobre el reloj, debido a que es fácil de implementar y relativamente
efectivo. Sin embargo, una excepción reciente es un rediseño del sistema de memoria virtual
de BSD 4.4 (Cranor y Prulkar, 1999).
Sin embargo, aún se están realizando investigaciones sobre la paginación en los tipos más recientes
de sistemas. Por ejemplo, los teléfonos celulares y los PDAs se han convertido en pequeñas
PCs y muchps de ellas paginan la RAM al “disco”, sólo que el disco en un teléfono celular es la
memoria flash, que tiene propiedades distintas a las de un disco magnético giratorio. Cierto trabajo
reciente se reporta (In y colaboradores, 2007; Joo y colaboradores, 2006; y Park y colaboradores,
2004a). Park y colaboradores (2004b) también han analizado la paginación por demanda
consciente de la energía en los dispositivos móviles.



4 comentarios: