ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Requisitos De La Gestion De Memoria


Enviado por   •  9 de Enero de 2014  •  2.548 Palabras (11 Páginas)  •  709 Visitas

Página 1 de 11

REQUISITOS DE LA GESTIÓN DE MEMORIA

Al realizar un estudio de los diversos mecanismos y políticas relacionadas con la gestión de

memoria, vale la pena tener en mente los requisitos que se intentan satisfacer: A.M.

Lister, R.D. Eager proponen cinco requisitos:

• Reubicación

• Protección

• Compartición

• Organización lógica

• Organización física

Reubicación

En un sistema multiprogramado, la memoria disponible se encuentra normalmente

compartida por varios procesos. En general, el programador no puede conocer por

adelantado qué otros programas residirán en memoria en el momento de la ejecución del

programa. Además, se busca poder cargar y descargar los procesos activos en la memoria

principal para maximizar el uso del procesador, manteniendo una gran reserva de

procesos listos para ejecutar. Una vez que un programa haya sido descargado al disco, se

limitará a declarar que, cuando vuelva a ser cargado, debe situarse en la misma región de

memoria principal que antes.

De este modo, se sabe antes de tiempo dónde debe situarse un programa y hay que

permitir que el programa pueda moverse en memoria principal como resultado de un

intercambio. Esta situación plantea algunos asuntos técnicos relativos al

direccionamiento, tal y como se muestra en la figura 1, que representa la imagen de un

proceso. Por simplicidad, se supondrá que la imagen del proceso ocupa una región

contigua de la memoria principal. Sin duda, el sistema operativo tiene que conocer la

ubicación de la información de control del proceso y de la pila de ejecución, así como el

punto de partida para comenzar la ejecución del programa para dicho proceso. Puesto

que el sistema operativo gestiona.

Fig. 1. Requisitos de direccionamiento para un proceso.

la memoria y es responsable de traer el proceso a memoria principal, estas direcciones

deben ser fáciles de conseguir. Además, el procesador debe ocuparse de las referencias a

memoria dentro del programa. Las instrucciones de bifurcación deben contener la

dirección que haga referencia a la instrucción que se vaya a ejecutar a continuación. Las

instrucciones que hagan referencia a datos deben contener la dirección del byte o de la

palabra de datos referenciada. De algún modo, el hardware del procesador y el software

del sistema operativo deben ser capaces de traducir las referencias a memoria

encontradas en el código del programa a las direcciones físicas reales que reflejen la

posición actual del programa en memoria principal.

Compartición

Cualquier mecanismo de protección que se implemente debe tener la flexibilidad de

permitir el acceso de varios procesos a la misma zona de memoria principal. Por ejemplo,

si una serie de procesos están ejecutando el mismo programa, resultaría beneficioso

permitir a cada proceso que acceda a la misma copia del programa, en lugar de tener cada

uno su propia copia aparte.

Los procesos que cooperan en una tarea pueden necesitar acceso compartido a la misma

estructura de datos. El sistema de gestión de memoria debe, por tanto, permitir accesos

controlados a las áreas compartidas de la memoria, sin comprometer la protección básica.

De nuevo, se verá que los mecanismos empleados para respaldar la reubicación forman

parte básica de las capacidades de compartición.

Organización Lógica

De forma casi invariable, la memoria principal de un sistema informático se organiza como

un espacio de direcciones lineal o unidimensional que consta de una secuencia de bytes o

palabras. La memoria secundaria, a nivel físico, se organiza de forma similar. Si bien esta

organización refleja fielmente el hardware de la máquina, no se corresponde con la forma

en la que los programas están construidos habitualmente. La mayoría de los programas se

organizan en módulos, algunos de los cuales no son modificables (sólo lectura, sólo

ejecución) y otros contienen datos que se pueden modificar. Si el sistema operativo y el

hardware del computador pueden tratar de forma efectiva los programas de usuario y los

datos en forma de módulos de algún tipo, se conseguirá una serie de ventajas, tales como:

1. Los módulos pueden escribirse y compilarse independientemente, mientras que el

sistema resuelve durante la ejecución todas las referencias de un módulo a otro.

2. Con un escaso coste adicional, pueden otorgar‘_ varios grados de protección (sólo

lectura, sólo ejecución) a los distintos módulos.

3. Es posible introducir mecanismos por medio de los cuales los procesos puedan

compartir módulos. La ventaja de ofrecer compartición a nivel de módulo es que esto se

corresponde con la visión del problema que tiene el usuario y, por tanto, es fácil para el

usuario especificar la compartición que desea.

La herramienta que más fácilmente satisface estas necesidades es la segmentación, que es

una de las técnicas de gestión de memoria estudiadas en este capítulo.

Organización Física

Recordemos que la memoria de la computadora se organiza en, al menos, dos niveles:

memoria principal y memoria secundaria. La memoria principal ofrece un acceso rápido

con un coste relativamente alto. Además, la memoria principal es volátil; esto es, no

proporciona almacenamiento permanente. La memoria secundaria es más lenta y barata

que la memoria principal y, normalmente, no es volátil. De este modo, una memoria

secundaria de gran capacidad puede permitir un almacenamiento a largo plazo de

programas y datos, al tiempo que una memoria principal pequeña mantiene los

programas y datos de uso actual.

En este esquema a dos niveles, la organización del flujo de información entre la memoria

principal y la secundaria tiene un gran interés en el sistema. La responsabilidad de este

flujo podría asignarse al programador, pero esto es impracticable e indeseable, debido a

dos razones:

1. La memoria principal disponible para un programa y sus datos puede ser insuficiente.

En este caso, el programador debe emplear una práctica que se conoce como

superposición (overlaying), en la cual el programa y los datos se organizan de tal forma

que puede haber varios módulos asignados a la misma región de memoria, con un

programa principal responsable del intercambio de los módulos según se necesite. Incluso

con la ayuda de herramientas de compilación, la programación superpuesta malgasta el

tiempo del programador.

2. En un entorno multiprogramado, el programador no conoce durante la codificación

cuánto espacio habrá disponible o dónde estará este espacio. Resulta claro entonces que

la tarea de mover información entre los dos niveles de memoria debe ser responsabilidad

del sistema. Esta tarea es la esencia de la gestión de memoria.

Paginación Simple

Tanto las particiones de tamaño fijo como las de tamaño variable hacen un uso ineficiente

de la memoria; las primeras generan fragmentación interna, mientras que las segundas

originan fragmentación externa. Supóngase, no obstante, que la memoria principal se

encuentra particionada en trozos iguales de tamaño fijo relativamente pequeños y que

cada proceso está dividido también en pequeños trozos de tamaño fijo y del mismo

tamaño que los de memoria. En tal caso, los trozos del proceso, conocidos como páginas,

pueden asignarse a los trozos libres de memoria, conocidos como marcos o marcos de

página. En este apartado se verá que el espacio malgastado en memoria para cada

proceso por fragmentación interna consta sólo de una fracción de la última página del

proceso. Además, no hay fragmentación externa.

Fig.2 Paginación Simple

En un instante dado, algunos de los marcos de memoria están en uso y otros están libres.

El sistema operativo mantiene una lista de los marcos libres. El proceso A, almacenado en

disco, consta de cuatro páginas. Cuando llega el momento de cargar este proceso, el

sistema operativo busca cuatro marcos libres y carga las cuatro páginas del proceso A en

los cuatro marcos. El proceso B, que consta de tres páginas y el proceso C, que consta de

cuatro, se cargan a continuación. Más tarde, el proceso B se suspende y es expulsado de

memoria principal. Después, todos los procesos de memoria principal están bloqueados y

el sistema operativo tiene que traer un nuevo proceso, el proceso D, que consta de cinco

páginas. Supóngase ahora, como en este ejemplo, que no hay suficientes marcos sin usar

contiguos para albergar al proceso. ¿Impedirá esto al sistema operativo cargar D? La

respuesta es negativa, puesto que se puede emplear de nuevo el concepto de dirección

lógica. Ya no será suficiente con un simple registro base. En su lugar, el sistema operativo

mantiene una tabla de páginas para cada proceso. La tabla de páginas muestra la posición

del marco de cada página del proceso.

Dentro del programa, cada dirección lógica constará de un número de página y de un

desplazamiento dentro de la página. Recuérdese que, en el caso de la partición simple,

una dirección lógica era la posición de una palabra relativa al comienzo del programa; el

procesador realizaba la traducción a dirección física. Con paginación, el hardware del

procesador también realiza la traducción de direcciones lógicas a físicas.

Ahora, el procesador debe saber cómo acceder a la tabla de páginas del proceso actual.

Dada una dirección lógica (número de página, desplazamiento), el procesador emplea la

tabla de páginas para obtener una dirección física (número de marco, desplazamiento).

Continuando con el ejemplo, las cinco páginas del proceso D se cargan en los marcos

4, 5, 6, 11 y 12. La siguiente figura muestra las distintas tablas de páginas en este instante.

Cada tabla de páginas contiene una entrada por cada página del proceso, por lo que la

tabla se indexa

Fig.3 Estructura de datos para el ejemplo de la figura anterior en el periodo de tiempo

(f)

fácilmente por número de página (comenzando en la página 0). En cada entrada de la

tabla de páginas se encuentra el número de marco en memoria, si lo hay, que alberga la

página correspondiente.

Además, el sistema operativo mantiene una lista de marcos libres con todos los marcos

de memoria que actualmente están vacíos y disponibles para las páginas.

Así pues, se puede comprobar que la paginación simple, tal y como se describe, es similar

a la partición estática. Las diferencias están en que, con paginación, las particiones son

algo más pequeñas, un programa puede ocupar más de una partición y éstas no tienen

por qué estar contiguas.

Para aplicar convenientemente este esquema de paginación, el tamaño de la página y, por

tanto, el tamaño del marco, deben ser una potencia de 2. En este caso, la dirección

relativa, definida en relación al origen del programa y la dirección lógica, expresada como

un número de página y un desplazamiento, son las mismas. En la figura 4 se muestra un

ejemplo, donde se emplean direcciones de 16 bits y el tamaño de página es de 1K = 1024

bytes. La dirección relativa 1502 es 0000010111011110 en binario. Con un tamaño de

página de 1K, se necesitan 10 bits para el campo de desplazamiento, dejando 6 bits para el

número de página. De este modo, un programa puede estar formado por un máximo de 2

6 = 64 páginas de 1Kb cada una. Como muestra la figura 4 La dirección relativa 1502 se

corresponde con un desplazamiento de 478 (0111011110) en la página 1 (000001), lo que

genera el mismo número de 16 bits, 0000010111011110. 0000010111011110.

Dos son las consecuencias de usar un tamaño de página potencia de dos. Primero, el

esquema de direccionamiento lógico es transparente al programador, al ensamblador y al

montador. Cada dirección lógica de un programa (número de página, desplazamiento) es

idéntica a su dirección relativa. Segundo, resulta relativamente sencillo realizar una

función hardware para llevar a cabo la traducción de direcciones dinámicas durante la

ejecución. Considérese una dirección de n + m bits, en la que los n bits más significativos

son el número de página y los m bits menos significativos son el desplazamiento. En el

ejemplo (figura 6.9), n=6 y m=10. Para la traducción de direcciones hay que dar los

siguientes pasos:

• Obtener el número de página de los n bits más significativos de la dirección lógica.

• Emplear el número de página como índice en la tabla de páginas del proceso para

encontrar el número de marco k.

• El comienzo de la dirección física del marco es k x 2 m y la dirección física del byte

referenciado es este número más el desplazamiento. No hace falta calcular esta dirección

física, sino que se construye fácilmente concatenando el número de marco con el

desplazamiento.

En el ejemplo, se tiene la dirección lógica 0000010111011110, que se corresponde con el

número de página 1 y desplazamiento 478. Supóngase que esta página reside en el marco

de memoria principal 6 = 000110 en binario. Entonces la dirección física es el marco 6,

desplazamiento 478 = 0001100111011110 (figura 5).

Resumiendo, mediante la paginación simple, la memoria principal se divide en pequeños

marcos del mismo tamaño. Cada proceso se divide en páginas del tamaño del marco; los

procesos pequeños necesitaran pocas páginas, mientras que los procesos grandes

necesitarán más.

Cuando se introduce un proceso en memoria, se cargan todas sus páginas en los marcos

libres y se rellena su tabla de páginas. Esta técnica resuelve la mayoría de los problemas

inherentes a la partición.

Fig 4. Direcciones Lógicas

Segmentación Simple

Otro modo de subdividir el programa es la segmentación. En este caso, el programa y sus

datos asociados se dividen en un conjunto de segmentos. No es necesario que todos los

segmentos de todos los programas tengan la misma longitud, aunque existe una longitud

máxima de segmento. Como en la paginación, una dirección lógica segmentada consta de

dos partes, en este caso un número de segmento y un desplazamiento.

Como consecuencia del empleo de segmentos de distinto tamaño, la segmentación

resulta similar a la partición dinámica. En ausencia de un esquema de superposición o del

uso de memoria virtual, sería necesario cargar en memoria todos los segmentos de un

programa para su ejecución. La diferencia, en comparación con la partición dinámica,

radica en que, con segmentación, un programa puede ocupar más de una partición y éstas

no tienen por qué estar contiguas. La segmentación elimina la fragmentación interna,

pero, como la partición dinámica, sufre de fragmentación externa. Sin embargo, debido a

que los procesos se dividen en un conjunto de partes más pequeñas, la fragmentación

externa será menor.

Mientras que la paginación es transparente al programador, la segmentación es

generalmente visible y se proporciona como una comodidad para la organización de los

programas y datos Normalmente, el programador o el compilador asigna los programas y

los datos a diferentes segmentos. En aras de la programación modular, el programa o los

datos pueden ser divididos de nuevo en diferentes segmentos. El principal inconveniente

de este servicio es que el programador debe ser consciente de la limitación de tamaño

máximo de los segmentos.

Otra consecuencia del tamaño desigual de los segmentos es que no hay una

correspondencia simple entre las direcciones lógicas y las direcciones físicas. De forma

análoga a la paginación, un esquema de segmentación simple hará uso de una tabla de

segmentos para cada proceso y una lista de bloques libres en memoria principal. Cada

entrada de tabla de segmentos tendría que contener la dirección de comienzo del

segmento correspondiente en memoria principal. La entrada deberá proporcionar

también la longitud del segmento para asegurar que no se usan direcciones no válidas.

Cuando un proceso pasa al estado Ejecutando, se carga la dirección de su tabla de

segmentos en un registro especial del hardware de gestión de memoria. Considérese una

dirección de n + m bits, en la que los n bits más significativos son el número de segmento

y los m bits menos significativos son el desplazamiento. En el ejemplo (figura 6.9c), n=4y

m= 12. Así pues, el máximo tamaño de segmento es 2 12 = 4096. Para la traducción de

direcciones hay quedar los siguientes pasos:

• Extraer el número de segmento de los n bits más significativos de la dirección lógica.

• Emplear el número de segmento como índice en la tabla de segmentos del proceso para

encontrar la dirección física de comienzo del segmento.

• Comparar el desplazamiento, expresado por los m bits menos significativos, con la

longitud del segmento. Si el desplazamiento es mayor que la longitud, la dirección no es

válida.

• La dirección física buscada es la suma de la dirección física de comienzo del segmento

más el desplazamiento. En el ejemplo, se emplea la dirección lógica 0001001011110000,

que se corresponde con el número de segmento 1 y desplazamiento 752. Supóngase que

dicho segmento está en memoria principal y comienza en la dirección física

0010000000100000. Entonces la dirección física será 0010000000100000 + 001011110000

= 0010001100010000.

En definitiva, con segmentación simple, un proceso se divide en varios segmentos que no

tienen por qué ser del mismo tamaño. Cuando un proceso se introduce en memoria, se

cargan todos sus segmentos en regiones de memoria libres y se rellena la tabla de

segmentos.

Fig. 5 Ejemplos de traducción de dirección lógica a física.

...

Descargar como  txt (17.4 Kb)  
Leer 10 páginas más »
txt