administraci n de memoria

22
1 Administracion de Sistemas y Redes de Computadoras Memoria La memoria es un recurso compartido entre procesos en un mismo ordenador. En el caso de equipos que poseen más de un microprocesador o bien si tuviera solo uno pero con varios núcleos, es necesario administrar la memoria, tal que un microprocesador no “invada” el area de memoria que utiliza otro. Jerarquía de las memorias + velocidad , afecta al tiempo de acceso - - capacidad, respecto del tamaño + Las jerarquías entre los distintos tipo de memoria, se debe principalmente a su velocidad y tamaño. Aquellas que se encuentran “mas cerca” del microprocesador son las más rápidas, pero su capacidad de almacenamiento es menor. Los registros internos y la memoria cache, están incorporados en la arquitectura del microprocesador, son las más rápidas, pero a su vez son más caras en el proceso de fabricación y elevan considerablemente el costo de los equipos. Las memorias RAM se encuentran fuera del microprocesador, constituyen la memoria principal del ordenador, pueden formar parte de la motherboard (memorias integradas) o bien las identificamos como barras (sticks) que se conectan al mismo a través de los zócalos correspondientes (bancos de memoria). Tienen mucha más capacidad que las cache´s pero son mas lentas. Por ultimo, las unidades auxiliares o de almacenamiento externo, son principalmente los discos rígidos, unidades ópticas (DVD, CD). Resaltamos la relación capacidad versus velocidad de los distintos dispositivos. CPU Registros internos Cache L1 L2 L3 Memoria Principal RAM Almacén Auxiliar HDD PenDrive Unidad optica BUS de memoria BUS de E/S

Upload: alexander-pavlotzky-degano

Post on 14-Dec-2015

227 views

Category:

Documents


0 download

DESCRIPTION

La memoria es un recurso compartido entre procesos en un mismo ordenador. En el caso de equipos que poseen más de un microprocesador o bien si tuviera solo uno pero con varios núcleos, es necesario administrar la memoria, tal que un microprocesador no “invada” el area de memoria que utiliza otro.

TRANSCRIPT

1

Administracion de Sistemas y Redes de Computadoras

Memoria

La memoria es un recurso compartido entre procesos en un mismo ordenador. En el caso de

equipos que poseen más de un microprocesador o bien si tuviera solo uno pero con varios

núcleos, es necesario administrar la memoria, tal que un microprocesador no “invada” el area

de memoria que utiliza otro.

Jerarquía de las memorias

+ velocidad , afecta al tiempo de acceso -

- capacidad, respecto del tamaño +

Las jerarquías entre los distintos tipo de memoria, se debe principalmente a su velocidad y

tamaño. Aquellas que se encuentran “mas cerca” del microprocesador son las más rápidas,

pero su capacidad de almacenamiento es menor.

Los registros internos y la memoria cache, están incorporados en la arquitectura del

microprocesador, son las más rápidas, pero a su vez son más caras en el proceso de fabricación

y elevan considerablemente el costo de los equipos.

Las memorias RAM se encuentran fuera del microprocesador, constituyen la memoria principal

del ordenador, pueden formar parte de la motherboard (memorias integradas) o bien las

identificamos como barras (sticks) que se conectan al mismo a través de los zócalos

correspondientes (bancos de memoria). Tienen mucha más capacidad que las cache´s pero son

mas lentas.

Por ultimo, las unidades auxiliares o de almacenamiento externo, son principalmente los

discos rígidos, unidades ópticas (DVD, CD).

Resaltamos la relación capacidad versus velocidad de los distintos dispositivos.

CPU

•Registros internos

•Cache L1 L2 L3

Memoria Principal

•RAM

Almacén Auxiliar

• HDD

•PenDrive

•Unidad optica

BUS de memoria BUS de E/S

2

El orden de búsqueda de un dato o valor por parte del CPU, es: primero regitros internos,

luego cache , pasando por los distintos niveles (L1, L2, L3), luego memoria RAM y por ultimo

unidades auxiliares.

Registros internos

Son los de mayor velocidad

De tamaño reducido , 8 16, 32 bits

Los hay de varios tipos: almacenamiento, contador, direcciones, propósito general

Caché

contiene copia de instrucción/dato

el objeto es que sean accedidos más rápido que el original.

Hacer los casos frecuentes eficientes,

Los caminos infrecuentes no importan tanto

Acierto de caché: se denomina así, cuando encuentra un ítem en una celda de memoria del

caché

Fallo de caché: se produce cuando no encuentra un dato en el caché y debe cargarlo desde la

memoria, lo que le insume más tiempo ya que debe hacer toda la operación completa de

lectura.

Esquema de acceso a caché: el CPU busca en el caché el I/D (instrucción/dato), si lo encuentra,

entonces de produce un acierto y retorna al CPU, sino se produce el fallo y accede a memoria

principal.

CPU Caché Memoria

I/D Fallo

Acierto

3

Siendo entonces, la memoria caché, como una memoria de alta velocidad, situada entre la

memoria principal y el procesador propiamente, que guarda copias de las páginas que van

siendo accesadas, partiendo del principio de la localidad de referencia:

Localidad temporal: Es probable que un recurso que fue empleado recientemente

vuelva a ser empleado en un futuro cercano.

Localidad espacial: La probabilidad de que un recurso aún no requerido sea accesado

es mucho mayor si fue requerido algún recurso cercano.

Localidad secuencial: Un recurso, y muy particularmente la memoria, tiende a ser

requerido de forma secuencial.

TAE : tiempo de acceso efectivo de caché

Cuando se utiliza la memoria caché, el cálculo de tiempo de acceso a una celda de memoria se

estima con la siguiente formula

TAE = p * ta + ( 1 –p) tf

p: probabilidad de acierto

(1 – p ) : probabilidad de fallo

ta : tiempo de acceso si hay acierto

tf: tiempo de acceso si hay fallo

I/D: instrucción / dato

Administración de memoria

Cuando se refiere a administración de memoria, se hace foco en particular en la memoria

RAM. Las tareas de un administrador de memoria son las siguientes:

Llevar un registro del estado de cada posición de memoria, si esta libre u ocupado

Recordar a quién, cuándo , cómo y dónde se va a usar

Que proceso hará el control de la memoria compartida

Considerar una técnica de asignación, cuando corresponda

Considerar una técnica de desasignación, para liberar memoria

4

ADMINISTRACIÓN DE MEMORIA

ASIGNACIÓN CONTIGUA SIMPLE

SPVR

////// PGM ////// /////////////////// ///////////////////

Fragmentación

Grafico: Memoria con asignación contigua simple

SPVR : supervisor

PGM: programa o proceso en memoria

Fragmentación: porción de memoria sin usar

Consideramos lo siguiente:

Para que un programa sea ejecutado, este debe estar totalmente cargado en memoria

El tamaño del programa debe ser < (menor) al tamaño de la memoria disponible

Al programa se le asigna toda la memoria, al finalizar el programa, la devuelve.

No requiere hardware en especial

No se puede utilizar la porción de memoria reservada al supervisor (SPVR), protección

con uso de registro base y desplazamiento.

Ventajas

Simplicidad

Desventajas

Gran fragmentación, no se utiliza la memoria en su totalidad

Cuando se presenta una operación de E/S, el CPU permanece ocioso, ya que

no se puede hacer uso de la memoria, ni del sistema

Existen muchos elementos o aplicaciones que están cargados en el área de

trabajo, los cuales ocupan lugar, pero no siempre son utilizados.

5

A

B

C D

E

F

/////// /////// /////// /////// /////// /////// ///////

/////// /////// /////// /////// ///////

/////// /////// /////// ///////

/////// ///////

/////// /////// /////// ///////

Tiempo t

Espacio de direcciones creadas por el usuario a través del tiempo. Para un mismo

espacio de memoria, se puede ver las áreas ocupados por los programas A, B, C, D, E y

F a través del tiempo y las que quedan libres sin usar. (se carga un programa a la vez)

DD

I/O AREA

W AREA

OPEN – CLOSE

ERROR

Esquema de distintos elementos cargados en el are de trabajo, como rutinas de apertura y

cierre de archivos, captura de errores, manejo de entradas y salidas.

M1 = 30 K M2 = 70 K

Aquí se muestran dos trabajos que están cargados en memoria, donde:

C1

I1

C2

I2

6

C: tiempo de CPU

I: tiempo de I/O

M: espacio que ocupa en memoria el trabajo

Ʃ I/O : tiempo total de espera por E/S

Tiempo de uso t = Ʃ I/O

Ʃ I/O + Ʃ CPU

CPU 1

CPU 2

I/O

T

Utilización del tiempo ocioso de CPU2, por otro proceso administrado por CPU1

ASIGNACIÓN PARTICIONADA

En este caso, la memoria se divide en n particiones, las cuales pueden ser de igual o de

distinto tamaño, una respecto de la otra.

Las particiones las identificamos como P1, P2, P3, etc., en cada partición se puede

alojar solamente un programa (PGM). El programa tiene como restricción que no

puede ocupar más de una partición, en síntesis, un programa no podrá cargarse si no

entra en una partición.

El espacio no ocupado por el programa dentro de la partición, es un espacio

desperdiciado, se lo denomina fragmentación interna.

SPVR

PGM 1 //////////

PGM 2 //////

PGM 3 /////////

PGM 4 ///////////////

Fragmentación

interna

7

Grafico: varias particiones de memoria, contiene cada uno un programa distinto, donde cada

uno de ellos tiene un tamaño diferente. El área sombreada, corresponde a la fragmentación de

cada partición. Las particiones tienen en este caso el mismo tamaño, pero también es válido

para particiones de diferente tamaño.

LINKAGE EDITOR: su nombre deriva del LINK, enlace, es considerado el punto de carga

o cargador, que se encarga de la vinculación entre programa y partición.

Existen dos clases distintas de linkage editor, estos pueden ser estáticos o dinámicos.

MMU: Manage Memory Unit, Unidad de Administración de Memoria ) se encarga de

administrar la memoria en base a diferentes métodos.

ASIGNACIÓN PARTICIONADA ESTÁTICO

Un cargado estático no permite cargar dos programas en una misma partición, de hecho, este

método de particionar la memoria, no permite colocar más de un programa en la misma

partición en forma simultánea.

Asignación: El cargador tiene la tarea de determinar que programa se carga y en que

partición, o sea que la asignación de un determinado programa a un área previamente

particionada, es responsabilidad del cargador como así también el criterio utilizado

para tomar la decisión. Si tenemos más de un programa en ejecución, estos deben

estar en particiones distintas.

Desasignación:, comprende la acción de marcar como disponible una partición a

efectos de poder ser utilizada posteriormente.

En un sistema de partición estático, la memoria se puede dividir en “n” particiones, las cuales

pueden ser todas del mismo tamaño, o bien pueden ser de tamaño diferente.

Estático con “n” particiones fijas de igual tamaño: Es el primer caso, donde todas las

particiones tienen el mismo tamaño, se ubicara o cargará el programa en la primer partición

libre. Si necesitamos cargar un programa que ocupa un tamaño mayor, entonces ante la

imposibilidad de carga, se genera un error.

Linkage editor

Estático

Dinámico

8

Estático con “n” particiones fijas de distinto tamaño: Sin embargo en el caso de tener

diferentes tamaños de particiones, puedo recorrer la tabla de particiones disponibles hasta

encontrar una del tamaño necesario para alojar el programa. Aquí se evalúan dos valores: el

tamaño y la disponibilidad.

Posición de comienzo

Longitud Estado

100 50 OCUPADO

150 20 LIBRE

170 80 LIBRE

250 90 OCUPADO

340 100 LIBRE

¿Que sucede si no logro encontrar una partición adecuada para cargar el programa?

Si en la primera recorrida de la tabla no encontramos una partición del tamaño necesario para

alojar el programa, se efectúa una segunda recorrida de la tabla, buscando dos (2) particiones

libres contiguas, tal que la suma de sus tamaños alcance para cargar el programa.

Al desasignar se controla si la partición superior o la inferior o ambas (son todas contiguas) a la

liberada, están libres. En ese caso se procede a compactar (compactación en asignación)

9

COMPACTACIÓN

El proceso de compactación o compactar, permite recuperar espacios sin usar de la memoria

y que se encuentran desperdiciados. Su recuperación permite disponer de más espacio para

una nueva partición de mayor tamaño, si se lo requiere. Además, el trabajar con espacios

contiguos de memoria, mejora el desempeño de las aplicaciones.

Los espacios fragmentados, objeto de compactación, corresponden a la denominada

fragmentación externa, ya que pertenecen a particiones liberadas o espacios de memoria sin

particionar. La fragmentación interna es la que se produce dentro de la partición y está

compuesto por el espacio resultante del tamaño total de la partición, menos el espacio que

ocupa un programa dentro de ella. La compactación no puede solucionar el problema de la

fragmentación interna.

SPVR

A

B

C

D /////////////////////// /////////////////////// ///////////////////////

Programas A,B, C y D en ubicados en zonas contiguas de memoria. El programa supervisor

SPVR, se encuentra en una partición protegida y no puede ser accedida por los programas.

Luego de concluído el proceso de los programas A y C, estos terminan y desaparecen,

generando una fragmentación de memoria.

SPVR ///////////////////////

B ///////////////////////

D /////////////////////// /////////////////////// ///////////////////////

Espacio contiguo de

memoria

Espacio libre que

anteriormente era

ocupado por los

programas A y C

contiguo de

memoria

10

En este grafico, son zonas libres (fragmentación) se presenta el problema que solo puedo

cargar nuevos programas en zonas contiguas. Debo desfragmentar la memoria, mediante el

método de compactación. Para ello, se debe “hacer lugar para el nuevo programa”, por lo que

tendremos que llevar el registro de dos tablas: de particiones en uso y de particiones libres.

Tabla de particiones en uso

Tabla de particiones libres

TABLA DE ESTADO DE PARTICION ASIGNADA

Nro. de Partición Posición (origen) Tamaño (longitud) Ocupado (Si/No)

1

2

3

4

…..

TABLA DE ESTADO DE AERAS NO ASIGNADAS

Nro. de Area Libre Tamaño Área Ubicación Área Estado

1 DISPONIBLE

2 ENTRADA LIBRE

3

4

…..

Estados: disponible y entrada libre, hacen referencia a que el área indica esta en condiciones

de ser asignada a un programa. La diferencia esta en que “Entrada Libre” indica que esa área

ha sido usada con anterioridad, por la tanto , el estado “Disponible” indica que esa área no fue

asignada nunca.

11

ASIGNACIÓN PARTICIONADA DINÁMICO

Se mantiene el concepto de carga de un programa por partición, como en partición estática, la

diferencia fundamental es que la creación de cada partición se hace por demanda.

Características principales:

Creación de particiones por demanda: Se van creando particiones en la medida que un

programa o proceso requiera cargase en memoria.

Dicha partición es del tamaño del programa que se intenta cargar. De esta manera

evitamos la fragmentación interna.

La creación de particiones se hace en zonas contiguas de memoria.

Pueden generarse particiones muy pequeñas, por el tamaño del programa que se

carga.

El manejo de la fragmentación externa generada por las particiones desasignadas, se

vuelve costoso si se trata de particiones de tamaño reducido. Se entiende que es

costoso en términos de tiempos de compactación respecto de cantidad de memoria

que se recupera.

Los métodos empleados para ubicar un nuevo programa o proceso en una partición existente,

son las siguientes:

1. FIRST FIT - primer ajuste

Es aquel que mantiene el orden de aparición de cada una de las particiones libre.

Recorre la tabla hasta que encuentra la primer partición en donde pueda cargarse el

programa.

2. BEST FIT - mejor ajuste

Hace un ordenamiento de forma creciente, (de menor a mayor) respecto del tamaño

de las particiones que están libres o disponibles para su asignación. Se asegura de esta

forma el mejor aprovechamiento del espacio de cada una de las particiones, teniendo

la menor fragmentación interna.

3. POOR FIT – peor ajuste

Comprende un ordenamiento decreciente respecto del tamaño de las particiones que

se encuentran libres para su asignación. En este caso, la asignación es inmediata, ya

que en la primera partición libre intentará cargar el programa, con altas probabilidades

de acierto.

12

EL ESPACIO DE MEMORIA DE UN PROCESO

Cuando un sistema operativo inicia un proceso, no se limita a volcar el archivo ejecutable a

memoria, sino que tiene que proveer la estructura para que éste vaya guardando la

información de estado relativa a su ejecución.

Sección de texto

Es el nombre que recibe la imagen en memoria de las instrucciones a ser ejecutadas.

Típicamente, la sección de texto ocupa las direcciones más bajas del espacio en

memoria.

Sección de datos

Espacio fijo preasignado para las variables globales. Este espacio es fijado en tiempo

de compilación, y no puede cambiar (aunque los datos que carga sí cambian en el

tiempo de vida del proceso)

Espacio de libres

(Heap) Espacio de memoria que se emplea para la asignación dinámica de memoria

durante la ejecución del proceso. Este espacio se ubica por encima de la sección de

datos, y crece hacia arriba.

Cuando el programa es escrito en lenguajes que requieren manejo manual de la

memoria (como C), esta área es la que se maneja a través de las llamadas de la familia

de malloc y free; en lenguajes con gestión automática, esta área es monitoreada por

los recolectores de basura (volveremos a estos conceptos más adelante).

Pila de llamadas

(Stack) Estructuras representando a la serie de funciones que han sido llamadas dentro

del proceso, con sus parámetros, direcciones de retorno, variables locales, etc. La pila

ocupa la parte más alta del espacio en memoria, y crece hacia abajo.

13

RESOLUCION DE DIRECCIONES

Un programa compilado no emplea nombres simbólicos para las variables o funciones que

llama4; el compilador, al convertir el programa a lenguaje máquina, las substituye por la

dirección en memoria donde se encuentra.

Ahora bien, en los sistemas actuales, los procesos requieren coexistir con otros, para lo cual las

direcciones indicadas en el texto del programa pueden requerir ser traducidas al lugar relativo

al sitio de inicio del proceso en memoria — Esto es, resueltas. Podemos hablar de las

siguientes tres estrategias de resolución:

En tiempo de compilación

El texto del programa tiene la dirección absoluta de los datos y funciones. Esto era

muy común en las computadoras previas al multiprocesamiento; en la arquitectura

compatible con PC, el formato ejecutable .COM es un volcado de memoria directo de

un archivo objeto con las direcciones indicadas de forma absoluta. Esto lo podemos

ver hoy principalmente en sistemas embebidos o de función específica.

En tiempo de carga

Al cargarse a memoria el programa y antes de iniciar su ejecución, el cargador

(componente del sistema operativo) actualiza las referncias a memoria dentro del

texto para que apunten al lugar correcto — Claro está, esto depende de que el

compilador indique dónde están todas las referencias a variables y funciones.

En tiempo de ejecución

El programa nunca hace referencia a una ubicación absoluta de memoria, sino que lo

hace siempre relativo a una base y un desplazamiento (offset). Esto permite que el

proceso sea incluso reubicado en la memoria mientras está siendo ejecutado sin tener

que sufrir cambios, pero requiere de hardware específico (como un MMU).

Esto es, los nombres simbólicos (por ejemplo, la variable llamada contador) para ser

traducidos ya sea a ubicaciones en la memoria, pueden resolverse en tiempo de compilación (y

quedar plasmada en el programa en disco con una ubicación explícita y definitiva: 510200), en

tiempo de carga (sería guardada en el programa en disco como inicio + 5986 bytes, y el

proceso de carga incluiría substituirla por la dirección resuelta a la suma del registro base,

504214, y el desplazamiento, 5986, esto es, 510200).

Por último, para emplear la resolución en tiempo de ejecución, se mantiene en las

instrucciones a ser ejecutadas por el proceso la etiqueta relativa al módulo actual, inicio +

5986 bytes, y es resuelta cada vez que sea requerido.

14

15

SEGMENTACIÓN

Al desarrollar un programa, el programador no ve a la memoria como un sólo arreglo plano, en

el que todas las direcciones son iguales (si bien está consciente de que la realidad es así).

El uso que damos a la memoria sigue una lógica de distintos segmentos: En vez de dar una

dirección lineal, damos al procesador una dirección de segmento y un desplazamiento dentro

de dicho segmento. Podemos tener segmentos de distintos tamaños presentes en memoria, y

la resolución de direcciones de cada uno de ellos se realizará por mecanismos análogos al

descrito en el apartado anterior (registro base y desplazamiento). Claro está, esto debe

también hacerse con apoyo del MMU.

La segmentación ayuda a incrementar la modularidad de un programa: Es muy común que las

bibliotecas ligadas dinámicamente estén representadas en segmentos independientes.

Una de las implementaciones más obvias y directas de un espacio de memoria segmentado es

asignar un segmento distinto a cada una de las secciones mencionadas en la sección espacio

en memoria de un proceso.

Una de las principales ventajas del uso de segmentación es que nos permite pedir al MMU que

cada uno de los segmentos tenga un distinto juego de permisos para el proceso en cuestión.

Permisos: El sistema operativo puede indicar, por ejemplo, que el segmento de texto (el

código del programa) sea de lectura y ejecución, mientras que la sección de datos es de lectura

y escritura. De este modo podemos evitar que un error en la programación resulte en que

datos proporcionados por el usuario o por el entorno modifiquen el código que está siendo

ejecutado. Es más, Incluso, dado que el acceso de ejecución está limitado a sólo los segmentos

cargados del disco por el sistema operativo, el atacante no podrá introducir código ejecutable

16

tan fácilmente, tendría que cargarlo como un segmento adicional con los permisos

correspondientes.

Intercambio parcial: Un uso muy común de la segmentación, particularmente en los sistemas

de los 1980s, era el de permitir que sólo ciertas regiones de un programa sean intercambiadas

al disco. Si un programa está compuesto por porciones de código que nunca se ejecutarán

aproximadamente al mismo tiempo en sucesión, puede separar su texto (e incluso los datos

correspondientes) en diferentes segmentos.

A lo largo de la ejecución del programa, algunos de sus segmentos pueden no emplearse por

largos periodos de tiempo. Estas páginas pueden ser enviadas al espacio de intercambio

(swap) ya sea a solicitud del proceso o por iniciativa del sistema operativo.

Rendimiento

Un proceso de intercambio completo resulta demasiado caro, cuando a tiempo se refiere.

Cuando hablamos de un espacio de memoria segmentado, y muy particularmente cuando

hablamos de bibliotecas de carga dinámica, la sobrecarga es mucho menor:

En primer término, podemos hablar de la cantidad de información que intercambiaremos: En

un sistema que sólo maneja regiones contiguas de memoria, intercambiar un proceso significa

mover toda su información al disco; cuando hablamos de intercambio en un sistema con

segmentación, puede enviarse a disco cada uno de los segmentos por separado, según el

sistema operativo lo juzgue necesario. Podría sacar de memoria a alguno de los segmentos,

eligiendo no necesariamente al que más estorbe (esto es, el más grande), sino el que más

probablemente no esté siendo utilizado: Emplear el principio de localidad de referencia para

intercambiar al segmento menos recientemente utilizado (LRU, Least Recently Used).

Además de esto, si hablamos de un segmento de texto (sea el código programa base o alguna

de las bibliotecas) y su acceso es de sólo lectura, una vez que éste fue copiado una vez al disco,

ya no hace falta volver a hacerlo: Tenemos la certeza de que no será modificado por el proceso

en ejecución, por lo que basta marcarlo como no presente en las tablas de segmentos en

memoria para que cualquier acceso ocasione que el sistema operativo lo traiga de disco.

Por otro lado, si la biblioteca en cuestión reside en disco (antes de ser cargada) como una

imagen directa de su representación en memoria, al sistema operativo le bastará identificar el

archivo en cuestión al cargar el proceso; no hace falta siquiera cargarlo en la memoria principal

y guardarlo al área de intercambio, puede quedar referido directamente al espacio en disco en

que reside el archivo.

Por supuesto que, el acceso a disco sigue siendo una fuerte penalización cada vez que un

segmento tiene que ser cargado del disco (sea del sistema de archivos o del espacio de

intercambio), pero este mecanismo reduce dicha penalización, haciendo más atractiva la

flexibilidad del intercambio por segmentos.

17

Estrategias empleadas por segmentación simple

La carga de procesos o programas se hace por demanda

Se trata de incorporar a los segmentos libres, los bloques de programa o de procesos

que necesitan cargarse en memoria

Cada proceso tiene su propia tabla de segmentos, la cual mantiene el estado de cada

uno de ellos. Aquellos que están libres pueden ser utilizados para una nueva carga.

El proceso de descarga consiste en marcar en la tabla de segmentos que el segmento

en cuestión está libre.

Validación de direccionamiento

El Sistema Operativo, se maneja con direcciones lógicas

El Sistema Operativo es el responsable que cada dirección lógica este dentro del rango

del segmento

El Sistema Operativo, emplea el uso de tablas de segmentos, como un arreglo de

registros base y limite para los segmentos

No hay correspondencia entre dirección lógica y dirección física

18

Esquema de verificación de que el desplazamiento, este dentro de un segmento y su

posterior cálculo de la dirección de memoria física.

S: segmento

D: desplazamiento

Base: dirección de memoria física del segmento

Base + d: dirección física

A modo de ejemplo (Finkel, p.79), un proceso puede tener la siguiente tabla de segmentos:

Segmento Inicio Tamaño Permisos Presente

0 13426 26 RWX sí

1 2309 00 R sí

2 1000 23 WX sí

3 - 95 W no

4 10000 100 RWX sí

En la columna de permisos, R se refiere a lectura, W a escritura y X a ejecución.

Un segmento que ha sido enviado al espacio de intercambio (en este caso, el 3), deja de estar presente en memoria y, por tanto, no tiene ya dirección de inicio registrada.

19

Veamos el resultado de entregar al MMU las siguientes direcciones y tipos de acceso:

Dirección Tipo de Dirección

virtual acceso Física

0-0 R 13426

2-17 W 1017

2-17 R Atrapada: Violación de seguridad

2-32 R Atrapada: Desplazamiento fuera de rango

3-72 W Atrapada: Segmento faltante

3-94 R Atrapada: Segmento faltante;

violación de seguridad

4-99 X 10099

7-25 X Atrapada: Segmento invalido

Cuando se atrapa una situación de excepción, el sistema operativo debe intervenir. Por ejemplo, la solicitud de un segmento inválido, de un desplazamiento mayor al tamaño del segmento, o de un tipo de acceso que no esté autorizado, típicamente llevan a la terminación del proceso, en tanto que una de segmento faltante (indicando un segmento que está en el espacio de intercambio) llevaría a la suspensión del proceso, lectura del segmento de disco a memoria, y una vez que éste estuviera listo, se permitiría continuación de la ejecución.

En caso de haber más de una excepción, como podemos verlo en la solicitud de lectura de la dirección 3-94, el sistema debe reaccionar primero a la más severa: Si como resultado de esa solicitud iniciara el proceso de carga del segmento, sólo para abortar la ejecución del proceso al detectarse la violación de tipo de acceso, sería un desperdicio injustificado de recursos.

20

PAGINACIÓN

La fragmentación externa y, por tanto, la necesidad de compactación pueden evitarse por

completo empleando la paginación. Esta consiste en que cada proceso esté compuesto por

una serie de páginas, dejando de requerir que la asignación sea de un área contigua de

memoria. Claro está, esto requiere de mayor especialización por parte del hardware, y mayor

información relacionada a cada uno de los procesos: No nos basta ya con indicar dónde inicia y

dónde termina el área de memoria de cada proceso, sino que debemos hacer un mapeo entre

la ubicación real (física) y la presentada a cada uno de los procesos (lógica). La memoria se

presentará a cada proceso como si fuera de su uso exclusivo.

La memoria física se divide en una serie de marcos (frames), todos ellos del mismo tamaño, y

el espacio cada proceso se divide en una serie de páginas (pages), del mismo tamaño que los

marcos. El MMU se encarga del mapeo entre páginas y marcos a través de tablas de páginas.

Las direcciones que maneja el CPU ya no son presentadas de forma absoluta, sino que como la

combinación de un identificador de página y un desplazamiento.

El tamaño de los marcos (y, por tanto, las páginas) debe ser una potencia de 2, de modo que el

MMU pueda discernir fácilmente la porción de una dirección de memoria que se refiere a la

página del desplazamiento.

Página y desplazamiento, en un esquema de direccionamiento de 16 bits y páginas de 512 bytes

Para poder realizar este mapeo, el MMU requiere de una tabla de páginas (page table), que resuelve la relación entre páginas y marcos, convirtiendo la dirección lógica (aquella que conoce el proceso) en la dirección física (la ubicación en que realmente se encuentra en la memoria del sistema).

21

Esquema del proceso de paginación, ilustrando el rol del MMU

Ejemplo (minúsculo) de paginación, con un espacio de direccionamiento de 32 bytes y páginas de 4 bytes

22

Podemos tomar como ejemplo para explicar este mecanismo el esquema presentado en el libro de Silberschatz, Galvin y Gagné. Este nos presenta un esquema minúsculo: Un espacio de direccionamiento de 32 bytes (5 bits), organizado en 8 páginas de 4 bytes cada una (esto es, la página es representada con los 3 bits más significativos de la dirección, y el desplazamiento con los 2 bits menos significativos).

El proceso que se nos presenta tiene una visión de la memoria como la columna del lado izquierdo: Le parece que existen 4 páginas, y tiene sus datos distribuidos en órden desde la dirección 00000 (0) hasta la 01111 (15), aunque en realidad en el sistema éstas se encuentren desordenadas y desperdigadas.

Cuando el proceso quiere referirse a la letra f, lo hace indicando la dirección 00101 (5). De esta dirección, los tres bits más significativos (001, 1 — Y recordemos que para la computadora, lo natural es comenzar a contar por el 0) se refieren a la página número 1, y los dos bits menos significativos (01, 1) indican al desplazamiento dentro de ésta.

El MMU verifica en la tabla de páginas, y encuentra que la página 1 corresponde al marco número 6 (110), por lo que traduce la dirección lógica 00101 (5) a la física 11001 (26). Podemos ver que la paginación resulta en una suerte de resolución de direcciones en tiempo de ejecución, pero con una base distinta para cada una de las páginas.

Capacidad de direccionamiento establecida de acuerdo al tamaño del registro interno de direcciones. Recordar para este calculo que la memoria esta representada como un arreglo.

1 celda de memoria = 1 byte = 1 palabra 1 párrafo = 16 bytes

Por ejemplo en 216, podemos direccionar un máximo de 65526 celdas de 1 byte cada una, lo que equivale a 64 K de memoria física. Cuanto mayor es mi registro de direcciones, entonces mayor será la memoria física a la cual se puede referenciar.