Está en la página 1de 92

UNIVERSIDAD TÉCNICA DE AMBATO

FACULTAD DE INGENIERIA EN SISTEMAS

SISTEMAS OPERATIVOS I

ADMINISTRACIÓN DE MEMORIA VIRTUAL


Carga parcial de programas

Históricamente se han inventado técnicas para


conseguir que no todo el código/datos esté en
memoria principal:
 Ficheros para guardar datos
 Recubrimientos (overlays) técnica primitiva
 Intercambio (swapping)  enviar al disco procesos
completos que lleven bloqueados mucho tiempo
 Bibliotecas dinámicas (DLL) cargar código compartido
bajo demanda
 MEMORIA VIRTUAL
Gestión de memoria
• El sistema de memoria virtual de los actuales computadores surgió para liberar al
programador de una serie de tareas relacionadas con la gestión que los programas
deben realizar con la memoria.
• La memoria virtual automatiza la gestión entre los dos niveles principales de la
jerarquía de memoria: memoria principal y secundaria (disco).
• Las principales funciones que automatiza el sistema de memoria virtual son las
siguientes:
 Aumento del espacio de direcciones físicas
o Permite que se ejecuten programas de tamaño superior a la memoria principal
 Reubicación de programas en memoria
o Permite que un programa se ejecute en cualquier ubicación de la memoria

 Protección de memoria
o Impide que un programa acceda a la zona de memoria de otro programa

 Compartición de memoria
o Permite que varios programas accedan a otros programas o datos comunes
 Reubicación de programas en memoria principal
• Proceso de ejecución de un programa en código fuente
Código fuente ‐ ‐ > (Compilación) ‐ ‐ > Código objeto
Código objeto ‐ ‐ > (Enlace) ‐ ‐ > Ejecutable
Ejecutable ‐ ‐ > (Carga) ‐ ‐ > Programa en memoria (Ejecución)

• Código absoluto: las direcciones se generan en tiempo de compilación (y/o enlace)


 Hay que conocer las direcciones de memoria donde se va a ejecutar el programa en tiempo de
compilación/enlace.
 El ejecutable no es reubicable.
• Reubicación estática: las direcciones se generan en tiempo de carga (el ejecutable tiene referencias relativas)
 Una vez cargado no puede moverse a otro lugar de la memoria.
 Solo puede haber intercambio si el programa vuelven a la misma ubicación de memoria.
• Reubicación dinámica: las direcciones se generan en tiempo de ejecución (el programa al ejecutarse maneja
unas referencias que no son las direcciones de memoria reales a las que accede)
 No hay problema con el intercambio, los programas pueden salir de memoria y volver a ella en
cualquier ubicación
 Aparece una distinción entre el espacio virtual o lógico de direcciones que maneja el programa y el
espacio físico de direcciones al que realmente se accede.

Los mecanismos de paginación y segmentación del Sistema de Memoria Virtual implementa la reubicación dinámica.
EC - IS
 Protección de memoria
• La memoria debe estar protegida para que un programa no pueda acceder directamente a la memoria de
otros programas
• Se utilizaron dos alternativas para implementar la protección:
1. Dos registros límite
o Cada vez que un programa genera una dirección se comprueba si es mayor que el
registro límite inferior y menor que el superior.
o De no ser así se genera una excepción
2. Un registro base y un registro límite
o Cuando se genera una dirección se comprueba si es menor que el registro límite.
o En caso de serlo, la dirección física se obtiene sumando el valor del registro base.
o De no ser así se genera una excepción.

Registro límite Registro de


reubicación

Dirección Dirección Memori


S
CP
U
lógica
< I + física a Mp

N
O
Excepción de
direccionamiento

Los mecanismos de paginación y segmentación del Sistema de Memoria Virtual resuelven elproblema de la protección de memoria
 Compartición de memoria

• Debe haber flexibilidad para permitir que varios programas accedan a un misma
zona de memoria para compartir código o para utilizar una misma estructura de
datos.
• Se trata de permitir que direcciones lógicas de dos o más programas,
posiblemente distintas entre sí, se correspondan con la misma dirección física.
• La compartición de memoria no debe comprometer su protección básica

Los mecanismos de paginación y segmentación del Sistema deMemoria


Virtual resuelven el problema de la compartición
Multiprogramación en memoria virtual
La necesidad cada vez más imperiosa de ejecutar programasgrandes
y el crecimiento en poder de las unidades centrales de procesamiento
empujaron a los diseñadores de los sistemas operativos a implantar un
mecanismo para ejecutarautomáticamente programas más grandes que la
memoria real disponible, esto es, de ofrecer `memoria virtual'.

La memoria virtual se llama así porque el programador ve una cantidad de


memoria mucho mayor que la real, y en realidad se trata de la suma de la
memoria de almacenamiento primario y una cantidad determinada de
almacenamiento secundario.
El sistema operativo, en su módulo de manejo de memoria, se encarga de
intercambiar programas enteros, segmentos o páginas entre la memoria real y
el medio de almacenamiento secundario. Si lo quese intercambia son procesos
enteros, se habla entonces de multiprogramación en memoria real, pero si lo que
se intercambian son segmentos o páginas, se puede hablar de
multiprogramación con memoria virtual.

La memoria virtual se apoya en varias técnicas interesantes para lograr su


objetivo. Una de las teorías más fuertes es la del `conjunto de trabajo', la
cual se refiere a que un programa o proceso no está usando todo su espacio
de direcciones en todo momento, sino que existen un conjunto de localidades
activas queconforman el `conjunto de trabajo'.
Si se logra que las páginas o segmentos que contienen al conjunto de
trabajo estén siempre enRAM, entonces el programa se desempeñará muy
bien.

Otro factor importante es si los programas exhiben un fenómeno llamado


`localidad', lo cual quiere decir que algunos programas tienden a usar
mucho las instrucciones que están cercanas a la localidad de la instrucción
que se está ejecutando actualmente.
Principio de funcionamiento de la memoria virtual

• En un computador con memoria virtual (Mv) las direcciones de los programas (generadas
por la CPU) hacen referencia a un espacio mayor que el espacio físico realmente
disponible en la memoria principal o memoria física (Mp).
• Los programas operan virtualmente con un tamaño físico de memoria principal mucho
mayor que el realmente disponible.
• Hay que diferenciar entre el espacio de direcciones virtuales generado por la CPU y el
espacio de direcciones físicas o reales determinado por el tamaño de la memoria física.
• El espacio virtual se soporta sobre un disco con la ayuda de un mecanismo de traducción
que genera la dirección física de memoria principal a partir de la virtual.
• Si la palabra referenciada no está en Mp habrá que trasladar un bloque de Mv (disco) a Mp.
• Los sistemas de Mv pueden clasificarse atendiendo al tamaño del bloque que se
transfiere entre Mp y memoria secundaria:
1. Memoria virtual paginada: bloques de igual tamaño, la página
2. Memoria virtual segmentada: bloques de distinto tamaño, el segmento
3. Memoria virtual segmentada/paginada: segmentos de un número variable
de páginas
Esquema de funcionamiento de la memoria virtual
Protección de memoria con MV

• Con un mecanismo de memoria virtual un programa sólo puede leer y escribir en la


zona de Mp que le es asignada.
• Cada programa se compila con su propio espacio de direcciones, lo que implica que
la misma dirección virtual (la proporcionada por el procesador) de dos programas
diferentes se cargue en direcciones físicas diferentes.
• La memoria virtual traduce el espacio de direcciones virtuales de un programa al
espacio de direcciones físicas.
• Esta traducción protege el espacio de direcciones de un programa de los accesos
indebidos de otros programas.
Paginación pura
La paginación pura en el manejo de memoria consiste en que el sistema
operativo divide dinámicamente los programas en unidades de tamaño fijo
(generalmente múltiplos de 1 kilobyte) loscuales va a manipular de RAM a
disco y viceversa.

«El espacio virtual de direcciones se divide en unidades llamadas páginas,


todas del mismo tamaño. La memoria principal se divide en marcos de páginas
o cuadros de páginas (page frames) del mismo tamaño que las páginas
virtuales y son compartidas por los distintos procesos delsistema (en cada
marco de página se carga una página de

un proceso)»
6
.
Al proceso de intercambiar páginas, segmentos o programascompletos
entre RAM y disco se le conoce como `intercambio' o `swapping'.

 Si un proceso lleva mucho tiempo bloqueado, suespacio


de memoria está desperdiciado.
 Idea: se vuelca su imagen de la memoria al disco (swapout). Ese
espacio queda disponible para otros.
 Cuando se decide reanudar el proceso, se recupera suimagen
del disco (swap in).

sistema operativo

P1
memoria P2
para usuarios

8
En la paginación, se debe cuidar el tamaño de las páginas, ya que si éstas son
muy pequeñas el control por parte del sistema operativo para saber cuáles
páginas están en RAM y cuales en disco, sus direcciones reales, etc; crece y
provoca mucha
`sobrecarga' (overhead). Por otro lado, si las páginas son muy grandes, el
overhead disminuye pero entonces puede ocurrir quese desperdicie memoria en
procesos pequeños. Debe haber un equilibrio.

Uno de los aspectos más importantes de la paginación, así como de cualquier


esquema de memoria virtual, es la forma de traducir una dirección virtual a
dirección real.

8
Bit de validez + fallo de página

Cada entrada de la tabla


de páginas tieneanotado
si es válida =está en
memoria principal
Si la página es inválida y
se intenta acceder a ella,
se genera una excepción
" fallo de página"
Fallo de página (page fault)
Si la CPU intenta acceder a una página marcada como noválida (bit de
validez activado), la MMU genera una excepción llamada fallo de
página (page fault).

El fallo de página activa una rutina del SO, que hace losiguiente:


1. Busca un marco físico libre para la página solicitada.


2. Copia del disco la página solicitada, en el marco elegido.
3. Actualiza la tabla de páginas (marca la entrada como váliday anota en
qué marco físico copió la página).
4. Entrega el control al proceso   se reintenta la instrucción que provocó el
fallo de página.
Gestión de un fallo de página
Eljemplo de Paginación:

 Página de 4KB
 Espacio de direcciones virtual de 64KB (direcciones de 16 bits)
 Espacio de direcciones físicas de 32KB

La relación entre direcciones


virtuales y direcciones de la
memoria física está dada por
la tabla de páginas.
Transformación de direcciones:

La transformación del número de página virtual al número de páginafísica de memoria


se realiza mediante la tabla de páginas.
Hay páginas que no tienen correspondencia en memoria central. Elhardware asocia un bit de
presencia/ausencia en cada entrada.

Páginas activas: páginas de un proceso residente en memoriacentral.


Páginas inactivas: páginas de un proceso no residente enmemoria principal (en
memoria secundaria).
Direcciones lógicas de 16 bits, páginas de 4Kb

Desplazamiento
dentro de la
4k=212 12 bits
16-12=4bits Número de página
página

0010 000000000100

Dirección lógica:(8196)

Tabla de Páginas

Marco
1010
0011
0110

Marco de página

0110 000000000100
Dirección física: (24580)
Todo este procedimiento es caro, ya que se sabe que los accesos
a disco duro son del orden de decenas de veces más lentos que
en RAM. En el ejemplo anterior se mencionó que cuando se
necesita descargar una página de RAM hacia disco se debe de
hacer una elección. Para realizar esta elección existen varios
algoritmos, los cuales se describen enseguida.
La primera en entrar, primera en salir (FIFO First in, First Out ): Se
escoge la página que haya entrado primero y esté cargada en
RAM. Se necesita que en los valores de control se guarde un
dato de tiempo. No es eficiente porque no aprovecha ninguna
característica de ningún sistema. Es justa e imparcial.

Página más Página más reciente antigua


F E D C B A

Problema: al no tener en cuenta el uso real de las


páginas, FIFO puede prescindir de páginas a las
que se accede con mucha frecuencia (ej. páginas
del núcleo).
Ejemplo: FIFO
Simulación con una cadena de referencias a páginas
lógicas
La no usada recientemente (NRU Not Recently used ) : Se escoge la
página que no haya sido usada (referenciada) en el ciclo
anterior. Pretende aprovechar el hecho de la localidad en el
conjunto de trabajo.

Cuando ocurre un fallo de página, el sistema operativo revisa


ambos bits en todas las páginas y las clasifica de la siguiente
manera:

Clase 0: La página no ha sido referenciada, ni modificada.


Clase 1: La página no ha sido referenciada, pero ha sido
modificada.

30
Clase 2: La página ha sido referenciada, pero no ha sido
modificada.
Clase 3: La página ha sido referenciada y también modificada.

Una vez obtenida la clasificación, elimina una página de manera


aleatoria de la primera clase no vacía con el número más pequeño.
Esto porque para el algoritmo es mejor eliminar una página modificada
sin referencias en al menos un intervalo de reloj, que unapágina en
blanco de uso frecuente. (página de la clase más baja posible )

A pesar de que este algoritmo no es el óptimo, es fácil de implementar


y de comprender y con mucha frecuencia es el más
adecuado.
31
La menos usada recientemente (LRU Least Recently Used ): Es parecida a
la anterior, pero escoge la página que se usó hace más tiempo,
pretendiendo que como ya tiene mucho sin usarse es muy probable
que siga sin usarse en los próximos ciclos. Necesita de una búsqueda
exhaustiva.

A diferencia de los algoritmos anteriores, el LRU tiene un mejor


rendimiento en cuanto al tiempo de aprovechamiento del CPU y del
uso de la memoria. Sin embargo, el problema con este algoritmo
es que su implementación es muy cara, ya que requiere de una
asistencia considerable de hardware. Otro problema es el de
determinar un orden para los marcos definido por el tiempo de
menor uso. Para éste último hay dos posibles implementaciones:

32
Contadores: En el caso más sencillo, se asocia cada entrada tabla
página un campo de tiempo-de-uso y se le agrega al CPU un reloj
lógico o contador. Este reloj es incrementado en cada referencia de
memoria. Siempre que se hace referencia a una página, el
contenido del registro del reloj es copiado al campo de tiempo-de-
uso en la tabla de páginas para esa página. De esta forma, siempre
se dispone del “tiempo” de la última referencia a cada página. La
página que se reemplaza es la del menor valor de tiempo. Este
esquema requiere de una búsqueda en toda la tabla de páginas
para encontrar la página LRU, y una escritura en memoria al campo
de tiempo-de-uso en la tabla de páginas por cada acceso a

33
memoria. Los tiempos también se deben de mantener cuando las
tablas de páginas son alteradas (debido a organización del CPU).
Se debe considerar la posibilidad de sobrecarga en el reloj.

Pilas: Otra aproximación para implementar el reemplazo LRU es la


de tener una pila con los números de páginas. Siempre que se hace
referencia a una página, se quita de la pila y se pone en la parte
superior. De esta manera, la parte superior de la pila es la página
de uso más reciente y la de abajo es la LRU, tal como se muestra
en la figura

Requiere hardware adicional y es costoso

34
LRU: ejemplo
La no usada frecuentemente NFU - Not Frequently Used : Este
algoritmo toma en cuenta no tanto el tiempo, sino el número de
referencias. En este caso cualquier página que se use muy
poco, menos veces que alguna otra.

Página Página
más F E D C B A más
reciente antigua

El bit se cambia a 0 y se actualiza el Página seleccionada


tiempo de llegada de la página para reemplazo con
bit 1
Página F E D Página
más A C B más
reciente antigua

36
M.SC.
 Se mantiene un contador software por cada página.

 Periódicamente se muestrean los bit de referencia.

 Si para una página R=1, se incrementa su contador.

 Cuando hay un fallo de página, se toma como


víctima la que tiene el contador más bajo.

 Implementable sólo con el bit de referencia.

 No se utiliza en la práctica, no es muy eficiente.

37
M.SC.
La menos frecuentemente usada LFU - least frequently used) : Es
parecida a la anterior, pero aquí se busca en forma exhaustivaaquella
página que se ha usado menos que todas las demás.

K
J L

I A

H B

G C

F D
E

38
M.SC.
 Se mantiene un contador del número de referencias

 Se escoge como víctima la que tenga el valor más bajo


 Implementación costosa
 No funciona muy bien, comparado con LRU
 Ningún sistema real lo implementa

39
M.SC.
En forma aleatoria: Elige cualquier página sin aprovechar
nada. Es justa e imparcial, pero ineficiente.

Otro dato interesante de la paginación es que ya no se requiere


que los programas estén ubicados en zonas de memoria
adyacente, ya que las páginas pueden estar ubicadas en cualquier
lugar de la memoria RAM.

40
M.SC.
Segmentación pura

La segmentación se aprovecha del hecho de que los programas se


dividen en partes lógicas, como son las partes de datos, de código
y de pila (stack). La segmentación asigna particiones de memoria
a cada segmento de un programa y busca como objetivos el hacer
fácil el compartir segmentos ( por ejemplo librerías compartidas ) y
el intercambio entre memoria y los medios de almacenamiento
secundario.

41
M.SC.
• El espacio de direcciones se divide en segmentos, cada uno de
los cuales corresponderá a una rutina (procedimiento, función), un
programa o un conjunto de datos (una entidad lógica). Todo
aquello que se corresponda con sub-espacio de direcciones
independientes.

• Cada programa contiene una cierta cantidad de segmentos. Los primeros


segmentos se reservan para procedimientos, datos y pila, pertenecientes al
programa en ejecución. Los segmentos restantes contienen un fichero por
segmento, así que los procesos pueden direccionar todos sus ficheros
directamente sin tener que abrirlos ni usar primitivas especiales de
entrada/salida. Cada fichero puede crecer de forma completamente
independiente de los otros, con cada byte direccionado por un par (segmento,
offset).

42
M.SC.
Idea:descomponer el proceso en varios segmentos de
memoria (código, datos, pila...)
Con el hardware adecuado, podemos ubicar esos
segmentos en zonas de memoria no contiguas.
Podemos reducir bastante la fragmentación

T.seg. S1

S3
S2

43
M.SC.
Por ejemplo, en la versión de UNIX SunOS 3.5, no existían librerías
compartidas para algunas herramientas, por ejemplo, para los
editores de texto orientados al ratón y menús. Cada vez que un
usuario invocaba a un editor, se tenía que reservar 1 megabyte de
memoria. Como los editores son una herramienta muy solicitada y
frecuentemente usada, se dividió en segmentos para le versión 4.x
( que a su vez se dividen en páginas ), pero lo importante es que la
mayor parte del editor es común para todos los usuarios, de
manera que la primera vez que cualquier usuario lo invocaba, se
reservaba un megabyte de memoria como antes, pero para el
segundo, tercero y resto de usuarios, cada editor extra sólo
44
M.SC.
consumía 20 kilobytes de memoria. El ahorro es impresionante.
Obsérvese que en la segmentación pura las particiones de
memoria son de tamaño variable, en contraste con páginas de
tamaño fijo en la paginación pura. También se puede decir que la
segmentación pura tiene una granularidad menor que la
paginación por el tamanó de segmentos versus tamaño de
páginas.

45
M.SC.
Ejemplo 2:

Un compilador de Pascal podría crear segmentos separados para:


•Variables globales
•Pila de llamadas a procedimientos (para almacenar parámetros
y direcciones de retorno)
•Porción de código de cada procedimiento y función.
•Variables locales de cada procedimiento o función.
•Heap

46
M.SC.
47
M.SC.
IMPORTANTE:

48
M.SC.
Nuevamente, para comprender mejor la segmentación, se debe dar
un repaso a la forma en que las direcciones virtuales son traducidas
a direcciones reales. Prácticamente la traducción es igual que la
llevada a cabo en la paginación pura, tomando en consideración
que el tamaño de los bloques a controlar por la tablade traducción
son variables, por lo cual, cada entrada en dicha tabla debe
contener la longitud de cada segmento a controlar. Otra vez se
cuenta con un registro base que contiene la dirección del comienzo
de la tabla de segmentos. La dirección virtual se compone de un
número de segmento (s) y un desplazamiento ( d )para ubicar un
byte (o palabra ) dentro de dicho segmento. Es

49
M.SC.
importante que el desplazamiento no sea mayor que el tamaño del
segmento, lo cual se controla simplemente checando que ese valor
sea mayor que la dirección del inicio del segmento y menor que el
inicio sumado al tamaño.

50
M.SC.
51
M.SC.
Hardware de segmentación

Tabla de segmentos

(S)

límite base

S D

dir. lógica dir. física



< + D

no

Excepción:
dirección ilegal

52
M.SC.
Una ves dada una dirección virtual v=( s,d ), se realiza la operación
b + s para hallar el registro (o entrada de la tabla de segmentos )
que contiene la dirección de inicio del segmento en la memoria real,
denotado por s'. Ya conociendo la dirección de inicio en memoria
real s' sólo resta encontrar el byte o palabra deseada, lo cual se
hace sumándole a s' el valor del desplazamiento, de modo que la
dirección real ® r = s' + d.

Cada entrada en la tabla de segmentos tiene un formato en donde


se tienen campos que indican la longitud, los permisos, la

53
M.SC.
presencia o ausencia y dirección de inicio en memoria real del
segmento.

54
M.SC.
En Resumen:

La CPU trabaja con direcciones de memoria de


dos piezas: <segmento,desplazamiento>
El compilador identifica segmentos del programa
y genera direcciones segmentadas
El cargador del SO ubica cada segmento en una
zona de memoria diferente
La MMU traduce las direcciones <seg,desplz> a
direcciones lineales que entiende la RAM
 Tabla de segmentos (una tabla de registros base
+límite)

55
M.SC.
Segmentación: beneficios

Atenúa el problema de la fragmentación

Permite compartir zonas de memoria

ej. una DLL compartida como un segmento en las




tablas de varios procesos


Los segmentos pueden tener protección por
hardware:
ej. segmentos de sólo lectura
ej. sólo permitir ejecución de instrucciones en
segmentos que estén marcados como “de código”

56
M.SC.
Segmentación: inconvenientes

 El compilador/enlazador debe trabajar con un


espacio lógico de dos dimensiones (segmentos +
desplazamientos)
Necesita soporte del hardware

El acceso a memoria se hace mucho más lento (hay


que acceder a la tabla de segmentos)
No soluciona del todo la fragmentación

Su eficacia depende mucho de cómo el compilador


haya troceado el proceso en segmentos

57
M.SC.
58
M.SC.
Anomalía

Según amplios experimentos [Deitel93] sugieren que un tamaño de


páginas de 1024 bytes generalmente ofrece un desempeño muy aceptable.
Intuitivamente parecería que el tener páginas del mayor tamaño posible
haría que el desempeño fuera óptimo, pero no es así, a menos que la página
fuera del tamaño del proceso total. No es así con tamaños grandes de
página menores que el proceso, ya que cuando se trae a memoria principal
una página por motivo de un solo byte o palabra, se están trayendo
muchísimos más bytes de los deseados. Ladependencia entre el número
de fallas respecto al tamaño de las páginas se muestra en la figura
siguiente:

59
M.SC.
60
M.SC.
Un hecho notable en los sistemas que manejan paginación es que
cuando el proceso comienza a ejecutarse ocurren un gran número de
fallos de página, porque es cuando está referenciado muchas
direcciones nuevas por vez primera, después el sistema se estabiliza,
conforme el número de marcos asignados se acerca al tamaño del
conjunto de trabajo.

61
M.SC.
62
M.SC.
En la figura anterior se muestra la relación entre el tiempo promedio
entre fallas de página y el número de marcos de página asignados
a un proceso. Allí se ve que el tiempo entre fallas decrece conforme
se le asignan más páginas al proceso. La gráfica se curva en un
punto, el cual corresponde a que el proceso tiene un número de
páginas asignado igual al que necesita para almacenar su conjunto
de trabajo. Después de eso, el asignarle a un proceso más páginas
que las de su conjunto de trabajo ya no conviene, ya que el tiempo
promedio entre fallas permanece sin mucha mejora.

63
M.SC.
Un aspecto curioso de aumentar el número de páginas a un
proceso cuando el algoritmo de selección de páginas candidatas
a irse a disco es la primera en entrar primera en salir es lallamada
`anomalía FIFO’ o `anomalía de Belady'. Belady encontróejemplos
en los que un sistema con un número de páginas igual a tres tenía
menos fallas de páginas que un sistema con cuatro páginas. El
ejemplo descrito es injusto. Si se mira con cuidado, obviamente si
se compara un sistema con 10 páginas contra otro de 5, ya de
inicio el primer sistema tendrá 5 fallos de página más que el de
5, porque se necesitan diez fallos para cargarlo. A esto debería
llamársele
`anomalía de Belady con corrección.
64
M.SC.
FIFO: anomalía de Bélády
Cadena de referencias: 3 2 1 0 3 2 4 3 2 1 0 4

65
M.SC.
Diferencias entre paginación y segmentación

 En paginaci ón, el espacio de direcciones es lineal (unidimensional) y se hace una


división física del mismo. En segmentación, el espacio de direcciones es
bidimensional, se hace una división lógica del mismo (tiene sentido compartir
segmentos).

 Las páginas son de tamaño fijo, determinado por la arquitectura del sistema. Los
segmentos pueden ser de cualquier tamaño.

 La división de las direcciones virtuales en número de página y desplazamiento es tarea


del hardware, mientras que la división en segmento y desplazamiento es tarea del
programador.

66
M.SC.
67
M.SC.
Sistemas combinados

La paginación y la segmentación puras son métodos de manejo de


memoria bastante efectivos, aunque la mayoría de los sistemas
operativos modernos implantan esquemas combinados, es decir,
combinan la paginación y la segmentación. La idea de combinar
estos esquemas se debe a que de esta forma se aprovechan los
conceptos de la división lógica de los programas (segmentos) con
la granularidad de las páginas. De esta forma, un proceso estará
repartido en la memoria real en pequeñas unidades (páginas) cuya
liga son los segmentos.

68
M.SC.
Híbrido segmentado/paginado

• La paginación y la segmentación
pueden combinarse (ej. MULTICS, x86).
• Idea: aprovecharse de las ventajas que
ofrecen los esquemas por separado
Segmentación: flexibilidad y facilidad para la
organización lógica, compartición, protección…
Paginación: solución eficiente para la fragmentación

Híbrido segmentado/paginado: Intel x86

69

69
M.SC.
También es factible así el compartir segmentos a medida que las
partes necesitadas de los mismos se van referenciando (páginas).
Para comprender este esquema, nuevamente se verá cómo se
traduce una dirección virtual en una localidad de memoria real.
Para la paginación y segmentación puras se puede decir que el
direccionamiento es `bidimensional' porque se necesitan dos
valores para hallar la dirección real. Para el caso combinado, se
puede decir que se tiene un direccionamiento `tridimensional'. En
la figura 4.8 [ Deitel93] se muestran las partes relevantes para
lograr la traducción de direcciones. El sistema debe contar con una
tabla de procesos (TP). Por cada renglón de esa tabla se tiene un

70
M.SC.
número de proceso y una dirección a una tabla de segmentos. Es
decir, cada proceso tiene una tabla de segmentos. Cuando un
proceso hace alguna referencia a memoria, se consulta TP para
encontrar la tabla de segmentos de ese proceso. En cada tabla de
segmentos de proceso (TSP) se tienen los números de los
segmentos que componen a ese proceso. Por cada segmento se
tiene una dirección a una tabla de páginas. Cada tabla de páginas
tiene las direcciones de las páginas que componen a un solo
segmento. Por ejemplo, el segmento `A' puede estar formado por
las páginas reales `a','b','c','p' y `x'. El segmento `B' puede estar
compuesto de las páginas `f','g','j','w' y `z'.

71
M.SC.
Para traducir una dirección virtual v=(s,p,d) donde `s' es el
segmento, `p' es la página y `d' el desplazamiento en la página se
hace lo siguiente. Primero se ubica de qué proceso es el segmento
y se localiza la tabla de segmentos de ese proceso en la TP. Con
`s' como índice se encuentra un renglón (registro) en la tabla de
segmentos de ese proceso y en ese renglón está la dirección dela
tabla de páginas que componen al segmento. Una vez en la tabla
de páginas se usa el valor `p' como índice para encontrar la
dirección de la página en memoria real. Una vez en esa dirección
de memoria real se encuentra el byte (o palabra) requerido por
medio del valor de `d'.

72
M.SC.
Ing. M.SC. 73
Ahora, en este esquema puede haber dos tipos de fallos: por fallo
de página y por fallo de segmento. Cuando se hace referencia a
una dirección y el segmento que la contiene no está en RAM (
aunque sea parcialmente ), se provoca un fallo por falta de
segmento [Deitel93] y lo que se hace es traerlo del medio de
almacenamiento secundario y crearle una tabla de páginas. Una
vez caragado el segmento se necesita localizar la página
correspondiente, pero ésta no existe en RAM, por lo cual seprovoca
un fallo de página y se carga de disco y finalmente se puede ya
traer la dirección deseada por medio del desplazamiento de la
dirección virtual.
La eficiencia de la traducción de direcciones tanto en paginación
pura, segmentación pura y esquemas combinados se mejora
usando memorias asociativas para las tablas de páginas y
segmentos, así como memoria cache para guardar los mapeos más
solicitados.

Otro aspecto importante es la estrategia para cargar páginas (o


segmentos) a la memoria RAM. Se usan más comúnmente dos
estrategias: cargado de páginas por demanda y cargado de páginas
anticipada. La estrategia de cargado por demanda consiste en que
las páginas solamente son llevadas a RAM si fueron solicitadas, es
decir, si se hizo referencia a una dirección
que cae dentro de ellas.
La carga anticipada consiste en tratar de adivinar qué páginas
serán solicitadas en el futuro inmediato y cargarlas de antemano,
para que cuando se pidan ya no ocurran fallos de página. Ese
`adivinar' puede ser que se aproveche el fenómeno de localidad y
que las páginas que se cargan por anticipado sean aquellas que
contienen direcciones contiguas a la dirección que se acaba de
refenciar. De hecho, el sistema operativo VMS usa un esquema
combinado para cargar páginas: cuando se hace referencia a una
dirección cuya página no está en RAM, se provoca un fallo de
página y se carga esa página junto con algunas páginas
adyacentes. En este caso la página solicitada se cargó por
demanda y las adyacentes se cargaron por anticipación
El problema de la relocalización
Este problema no es exclusivo de la multiprogramación en
memoria real, sino que se presentó aquí, pero se sigue

presentando en los esquemas de memoria virtual también. Este


problema consiste en que los programas que necesitan cargarse a
memoria real ya están compilados y ligados, de manera que
internamente contienen una serie de referencias a direcciones de
instrucciones, rutinas y procedimientos que ya no son válidas en el
espacio de direcciones de memoria real de la sección en la que se
carga el programa. Esto es, cuando se compiló el programa se
definieron o resolvieron las direcciones de memoria de acuerdo a
la sección de ese momento, pero si el programa se carga en otro
día en una sección diferente, las direcciones reales ya no
coinciden. En este caso, el manejador de memoria puede
solucionar el problema de dos maneras: de manera `estática' o de
manera `dinámica'. La solución `estática' consiste en que todas las
direcciones del programa se vuelvan a recalcular al momento en
que el programa se carga a memoria, esto es, prácticamente se
vuelve a recompilar el programa. La solución `dinámica' consiste
en tener un registro que guarde la dirección base de la sección que
va a contener al programa. Cada vez que el programa haga una
referencia a una dirección de memoria, se le suma el registro base
para encontrar la dirección real. Por ejemplo, suponga que el
programa es cargado en una sección que comienza en la dirección
100. El programa hará referencias a las direcciones 50,52,54. Pero
el contenido de esas direcciones no es el deseado, sino las
direcciones 150, 152 y 154, ya que ahí comienza el programa. La
suma de 100 + 50, ..., etcétera se hacen al tiempo de ejecución. La
primera solución vale más la pena que la segunda si el programa
contiene ciclos y es largo, ya que consumirá menos tiempo en la
resolución inicial que la segunda solución en las resoluciones en
línea.
Un proceso puede ser colocado en distintas particiones al ser
reanudado o desplazado) se tiene que utilizar código relocalizable y
realizar el enlace en la ejecución Para solventar este problema se
distinguen varios tipos de direcciones:

Dirección lógica: referencia a una posición de memoria


independiente de la asignación actual de datos a la memoria
Dirección relativa: se expresa como una posición relativa a algún
punto conocido, normalmente el principio del programa
Dirección física o absoluta: posición real en la memoria principal
El problema de la protección

Este problema se refiere a que, una vez que un programa ha sido


cargado a memoria en algún segmento en particular, nada le
impide al programador que intente direccionar ( por error o
deliberadamente ) localidades de memoria menores que el límite
inferior de su programa o superiores a la dirección mayor; es decir,
quiere referenciar localidades fuera de su espacio de direcciones.
Obviamente, este es un problema de protección, ya que no es legal
leer o escribir en áreas de otros programas.

La solución a este problema también puede ser el uso de un


registro base y un registro límite. El registro base contiene la
dirección del comienzo de la sección que contiene al programa,
mientras que el límite contiene la dirección donde termina. Cada
vez que el programa hace una referencia a memoria se checa si
cae en el rango de los registros y si no es así se envía un mensaje
de error y se aborta el programa.
Consideraciones actuales

La localidad de los programas ha ido disminuyendo (OOP,


recolector de basura, tablas hash…) el concepto de
«conjunto de trabajo» es más débil que hace 40 años.
Hoy día la memoria virtual y la caché de disco se han
unificado en un único sistema.
Tamaño de página variable para adaptarse al WS.

Los fallos de TLB y de página son más graves (hay más


diferencias de velocidad entre niveles de la jerarquía de
memorias).

85

También podría gustarte