3 Memoria
3 Memoria
3 Memoria
Administración
Administración de
de memoria
memoria
Administración
Administración de
de memoria
memoria
A través de los años se ha elaborado el concepto de jerarquía de memoria, de acuerdo con el cual,
las computadoras tienen unos cuantos megabytes de memoria caché, muy rápida, costosa y
volátil, unos cuantos gigabytes de memoria principal, de mediana velocidad, a precio mediano y
volátil, unos terabytes de almacenamiento en disco lento, económico y no volátil, y el
almacenamiento removible, como los DVDs y las memorias USB. El trabajo del sistema operativo
es abstraer esta jerarquía en un modelo útil y después administrarla.
Aunque actualmente una computadora doméstica promedio tiene 10,000 veces más memoria que
la IBM 7094, la computadora más grande en el mundo a principios de la década de 1960, los
programas están creciendo con más rapidez que las memorias.
En un sistema monoprogramado, la memoria se divide en dos partes: una parte para el sistema
operativo (monitor residente, núcleo) y una parte para el programa actualmente en ejecución. En
un sistema multiprogramado, la parte de usuario de la memoria se debe subdividir posteriormente
para acomodar múltiples procesos.
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.
Niveles
Niveles de
de memoria
memoria
La memoria del equipo informático se organiza en al
menos dos niveles, conocidos como memoria principal y V
memoria secundaria. V
La memoria principal proporciona acceso rápido a un O
coste relativamente alto. Adicionalmente, la memoria L
principal es volátil; es decir, no proporciona L
almacenamiento permanente. A
T
La memoria secundaria es más lenta y más barata que la T
memoria principal y normalmente no es volátil. Por tanto,
I
la memoria secundaria de larga capacidad puede
proporcionar almacenamiento para programas y datos a L
largo plazo, mientras que una memoria principal más
pequeña contiene programas y datos actualmente en uso.
Está claro que la tarea de mover la información entre los
dos niveles de la memoria debería ser una
responsabilidad del sistema y no del usuario, o del
programador.
Reubicación
Reubicación
En un sistema multiprogramado, la memoria principal disponible se comparte generalmente entre
varios procesos.
El programador no conoce qué otros procesos residirán en la memoria en el momento de la
ejecución del suyo.
Mientras que se está ejecutando el programa, puede que se descargue en el disco y que vuelva a
la memoria principal, pero en una ubicación distinta a la anterior (reubicación).
Se deben traducir las referencias a la memoria encontradas en el código del programa a las
direcciones físicas reales.
Cuando el proceso se carga en la memoria, se determina la ubicación real (absoluta) en la
memoria.
Un proceso puede ocupar diferentes particiones, lo que significa diferentes posiciones absolutas
de la memoria durante su ejecución (a partir de la carga).
La compactación también hará que un programa ocupe una partición distinta, lo que significa que
las ubicaciones absolutas de la memoria cambien.
Reubicación
Reubicación
Dirección lógica: Es una referencia a una posición de memoria independiente de la asignación
actual de datos a la memoria. Se debe hacer una traducción a una dirección física.
Dirección relativa: La dirección se expresa como una posición relativa a algún punto conocido.
Dirección física: La dirección absoluta o la posición real en la memoria principal.
De alguna forma, el hardware del Información Bloque de control del proceso
de control del Punto Instrucción de
procesador y el software del proceso de entrada al bifurcación
sistema operativo deben poder programa
traducir las referencias de Programa
memoria encontradas en el
código del programa en Direcciones
direcciones de memoria físicas, ascendentes Referencia
de datos
que reflejan la ubicación actual Datos
del programa en la memoria
principal.
Cima actual
de la pila
Pila
Protección
Protección
Cada proceso debe protegerse contra interferencias no deseadas por parte de otros procesos,
sean accidentales o intencionadas. Por tanto, los programas de otros procesos no deben ser
capaces de referenciar sin permiso a posiciones de memoria de un proceso, tanto en modo lectura
como escritura.
Por un lado, lograr los requisitos de la reubicación incrementa la dificultad de satisfacer los
requisitos de protección. Más aún, la mayoría de los lenguajes de programación permite el cálculo
dinámico de direcciones en tiempo de ejecución (por ejemplo, calculando un índice de posición en
un vector o un puntero a una estructura de datos). Por tanto, todas las referencias de memoria
generadas por un proceso deben comprobarse en tiempo de ejecución para poder asegurar que
se refieren sólo al espacio de memoria asignado a dicho proceso.
Los requisitos de protección de memoria deben ser satisfechos por el procesador (hardware) en
lugar del sistema operativo (software). Esto es debido a que el sistema operativo no puede
anticipar todas las referencias de memoria que un programa hará. Incluso si tal anticipación fuera
posible, llevaría demasiado tiempo calcularlo para cada programa a fin de comprobar la violación
de referencias de la memoria. Por tanto, sólo es posible evaluar la permisibilidad de una referencia
(acceso a datos o salto) en tiempo de ejecución de la instrucción que realiza dicha referencia.
Compartición
Compartición
Cualquier mecanismo de protección debe tener la flexibilidad de permitir a varios procesos
acceder a la misma porción de memoria principal.
Por ejemplo, si varios programas están ejecutando el mismo programa, es ventajoso permitir que
cada proceso pueda acceder a la misma copia del programa en lugar de tener su propia copia
separada. Procesos que estén cooperando en la misma tarea podrían necesitar compartir el
acceso a la misma estructura de datos.
Por tanto, el sistema de gestión de la memoria debe permitir el acceso controlado a áreas de
memoria compartidas sin comprometer la protección esencial.
Espacio de direcciones
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).
Proporcionar a cada programa su propio espacio de direcciones, de manera que la dirección 28 en
un programa indique una ubicación física distinta de la dirección 28 en otro programa.
Técnicas
Técnicas de
de gestión
gestión de
de memoria
memoria
Descripción Virtudes Defectos
Particionamiento Fijo
La memoria principal se divide en particiones estáticas en Sencilla de implementar; poca sobrecarga para el OS. Uso ineficiente de la memoria, debido a la
tiempo de generación del sistema. Un proceso se puede cargar fragmentación interna; debe fijarse el
en una partición con igual o superior tamaño. numero máximo de procesos activos.
Particionamiento Dinámico
Las particiones se crean de forma dinámica, de tal forma que No existe fragmentación interna; uso mas eficiente de Uso ineficiente del procesador, debido a
cada proceso se carga en una partición del mismo tamaño que memoria principal. la necesidad de compactación para evitar
el proceso. la fragmentación externa.
Paginación simple
La memoria principal se divide en marcos del mismo tamaño. No existe fragmentación externa. Una pequeña cantidad de fragmentación
Cada proceso se divide en paginas del mismo tamaño que los interna.
marcos. Un proceso se carga a través de la carga de todas sus
paginas en marcos disponibles, no necesariamente contiguos.
Segmentación simple
Cada proceso se divide en segmentos. Un proceso se carga No existe fragmentación interna; mejora la utilización Fragmentación externa.
cargando todos sus segmentos en particiones dinámicas, no de la memoria y reduce la sobrecarga respecto del
necesariamente contiguas. particionamiento dinámico
Paginación con memoria virtual
Igual que la paginación simple, excepto que no es necesario No existe fragmentación externa; mayor grado de Sobrecarga por la gestión compleja de
cargar todas las paginas de un proceso. Las paginas no multiprogramación; gran espacio de direcciones memoria
residentes se traen bajo demanda de forma automática. virtuales.
Segmentación con memoria virtual
Igual que la segmentación excepto que no es necesario cargar No existe fragmentación interna; mayor grado de Sobrecarga por la gestión compleja de la
todos los segmentos de un procesos. Los no residentes se multiprogramación; gran espacio de direcciones memoria
traen bajo demanda. virtuales; soporte a protección y comparticion.
Particionamiento
Particionamiento Fijo
Fijo
La operación principal de la gestión de la memoria es traer los procesos a la memoria principal
para que el procesador los pueda ejecutar. En la mayoría de los esquemas para gestión de la
memoria, se puede asumir que el OS ocupa alguna porción fija de la memoria principal y que el
resto de la memoria principal está disponible para múltiples procesos. El esquema más simple
para gestionar la memoria disponible es repartirla en regiones con límites fijos.
Una posibilidad consiste en hacer uso de particiones del mismo tamaño. En este caso, cualquier
proceso cuyo tamaño es menor o igual que el tamaño de partición puede cargarse en cualquier
partición disponible. Si todas las particiones están llenas y no hay ningún proceso en estado Listo
o Ejecutando, el sistema operativo puede mandar a swap a un proceso de cualquiera de las
particiones y cargar otro proceso, de forma que el procesador tenga trabajo que realizar.
Existen dos dificultades con el uso de las particiones fijas del mismo tamaño:
●
Un programa podría ser demasiado grande para caber en una partición. En este caso, el
programador debe diseñar el programa con el uso de overlays, de forma que sólo se necesite
una porción del programa en memoria principal en un momento determinado. Cuando se
necesita un módulo que no está presente, el programa de usuario debe cargar dicho módulo en
la partición del programa, superponiéndolo (overlaying) a cualquier programa o datos que haya
allí.
Particionamiento
Particionamiento Fijo
Fijo
●
La utilización de la memoria principal es extremadamente ineficiente. Cualquier programa, sin
importar lo pequeño que sea, ocupa una partición entera. Este fenómeno, en el cual hay espacio
interno malgastado debido al hecho de que el bloque de datos cargado es menor que la
partición, se conoce con el nombre de fragmentación interna.
Con particiones del mismo tamaño, la ubicación de los procesos en memoria es trivial. En cuanto
haya una partición disponible, un proceso se carga en dicha partición.
Con particiones de diferente tamaño, hay dos formas posibles de asignar los procesos a las
particiones. La forma más sencilla consiste en asignar cada proceso a la partición más pequeña
dentro de la cual cabe. En este caso, se necesita una cola de planificación para cada partición,
que mantenga procesos en disco destinados a dicha partición
El uso de particiones de distinto tamaño proporciona un grado de flexibilidad frente a las
particiones fijas. Adicionalmente, se puede decir que los esquemas de particiones fijas son
relativamente sencillos y requieren un soporte mínimo por parte del sistema operativo y una
sobrecarga de procesamiento mínimo.
El uso de particionamiento fijo es casi desconocido hoy en día, los primeros mainframes de IBM, el
sistema operativo OS/MFT (Multiprogramming with a Fixed Number of Tasks; Multiprogramado con
un número fijo de tareas) utilizaban esta técnica.
Particionamiento
Particionamiento Fijo
Fijo yy Dinámico
Dinámico
Ej Particionamiento Fijo de memoria de 64MB Ej Particionamiento Dinámico y su efecto
Sistema Sistema Sistema Sistema
Sistema Operativo Sistema Operativo Operativo 8MB Operativo Operativo Operativo
8MB 8MB
2MB Proceso 1 20MB Proceso 1 20MB Proceso 1 20MB
8MB 4MB
6MB Proceso 2 14 MB Proceso 2 14 MB
8MB 56MB
8MB 36MB
22MB
Proceso 3 18MB
8MB
4MB
8MB
8MB
Sistema Sistema Sistema Sistema
Operativo Operativo Operativo Operativo
12MB
8MB 20MB 20MB 20MB Proceso 2 14MB
Proceso 1 Proceso 1
6MB
8MB
14MB Proceso 4 8MB Proceso 4 8MB Proceso 4 8MB
16MB
6MB 6MB 6MB
8MB
Proceso 3 18MB Proceso 3 18MB Proceso 3 18MB Proceso 3 18MB
Particiones Particiones 4MB 4MB 4MB 4MB
de igual de distinto
tamaño tamaño
Particionamiento
Particionamiento Dinámico
Dinámico
Con particionamiento dinámico, las particiones son de longitud y número variable. Cuando se lleva
un proceso a la memoria principal, se le asigna exactamente tanta memoria como requiera y no
más.
El método comienza correctamente, pero finalmente lleva a una situación en la cual existen
muchos huecos pequeños en la memoria. A medida que pasa el tiempo, la memoria se fragmenta
cada vez más y la utilización de la memoria se decrementa. Este fenómeno se conoce como
fragmentación externa, indicando que la memoria que es externa a todas las particiones se
fragmenta de forma incremental.
Una técnica para eliminar la fragmentación externa es la compactación: de vez en cuando, el
sistema operativo desplaza los procesos en memoria, de forma que se encuentren contiguos y de
este modo toda la memoria libre se encontrará unida en un bloque.
La desventaja de la compactación es el hecho de que se trata de un procedimiento que consume
tiempo y malgasta tiempo de procesador. Obsérvese que la compactación requiere la capacidad
de reubicación dinámica. Es decir, debe ser posible mover un programa desde una región a otra
en la memoria principal sin invalidar las referencias de la memoria de cada programa.
Particionamiento
Particionamiento Dinámico
Dinámico
Debido a que la compactación de memoria consume una gran Ej de configuración de la memoria
antes y después de la asignación de
cantidad de tiempo, a la hora de cargar o intercambiar un 8MB un bloque de 16MB 8MB
proceso a la memoria principal, y siempre que haya más de un
bloque de memoria libre de suficiente tamaño, el OS debe 12MB 12MB
suficientemente grande.
Próximo-ajuste
Siguiente-ajuste comienza a analizar la memoria desde la 36MB
última colocación y elige el siguiente bloque disponible que sea 20MB
suficientemente grande.
Registros
Registros Base
Base yy Limite
Limite
Normalmente, todas las referencias de memoria de los procesos cargados son relativas al origen
del programa. Por tanto, se necesita un mecanismo hardware para traducir las direcciones
relativas a direcciones físicas de la memoria principal, en tiempo de ejecución de la instrucción que
contiene dicha referencia.
Cuando un proceso se asigna al estado Ejecutando, un registro especial del procesador, algunas
veces llamado registro base, carga la dirección inicial del programa en la memoria principal.
Existe también un registro limite, que indica el final de la ubicación del programa; estos valores
se establecen cuando el programa se carga en la memoria o cuando la imagen del proceso se
lleva a la memoria.
A lo largo de la ejecución del proceso, se encuentran direcciones relativas. Éstas incluyen los
contenidos del registro de las instrucciones, las direcciones de instrucciones que ocurren en los
saltos e instrucciones call, y direcciones de datos existentes en instrucciones de carga y
almacenamiento. El procesador manipula cada dirección relativa, a través de dos pasos. Primero,
el valor del registro base se suma a la dirección relativa para producir una dirección absoluta.
Segundo, la dirección resultante se compara con el valor del registro Limite. Si la dirección se
encuentra dentro de los límites, entonces se puede llevar a cabo la ejecución de la instrucción. En
otro caso, se genera una interrupción, que debe manejar el sistema operativo de algún modo.
Evita accesos no autorizados por parte de otros procesos.
Intercambio
Intercambio // Swapping
Swapping
En un sistema MS Windows o GNU/Linux común, se pueden iniciar entre 40 y 100 procesos o más
cada vez que se inicia la computadora. Por ejemplo, cuando se instala una aplicación MS
Windows, a menudo emite comandos de manera que en los inicios subsiguientes del sistema se
inicie un proceso que no haga nada, excepto buscar actualizaciones para la aplicación. Dicho
proceso puede ocupar fácilmente de 5 a 10 MB de memoria. Otros procesos en segundo plano
comprueban el correo entrante, las conexiones de red entrantes y muchas otras cosas. Y todo esto
se hace antes de que se inicie el primer programa de usuario. Hoy en día, los programas de
aplicaciones de usuario serios pueden ejecutarse ocupando fácilmente 500 MB y más. En
consecuencia, para mantener todos los procesos en memoria todo el tiempo se requiere una gran
cantidad de memoria y no puede hacerse si no hay memoria suficiente.
A través de los años se han desarrollado dos esquemas generales para lidiar con la sobrecarga de
memoria. La estrategia más simple, conocida como intercambio, consiste en llevar cada proceso
completo a memoria, ejecutarlo durante cierto tiempo y después regresarlo al disco.
Los procesos inactivos mayormente son almacenados en disco, de tal manera que no ocupan
memoria cuando no se están ejecutando (aunque algunos de ellos se despiertan periódicamente
para realizar su trabajo y después vuelven a quedar inactivos).
La otra estrategia, conocida como memoria virtual, permite que los programas se ejecuten incluso
cuando sólo se encuentran en forma parcial en la memoria.
Intercambio
Intercambio // Swapping
Swapping
Al principio, sólo el proceso A está en la
memoria. Después los procesos B y C se Sistema Sistema Sistema Sistema Sistema Sistema Sistema
crean o se intercambian desde disco. En el Operativo Operativo Operativo Operativo Operativo Operativo Operativo
1
paginas del 2 2
1 1 1 1 1
A.1 A.1 A.1 A.1 A.1
proceso A
3 3
2 2 A.2 2 2 2 2
A.2 A.2 A.2 A.2
N 3 3 3 3 3 3
A.3 A.3 A.3 A.3 A.3 0 -
U Table de
M 4 4 4 B.0 4 B.0 4 4 D.0 paginas del 1 -
M proceso B 2 -
E 5 5 5 B.1 5 B.1 5 5 D.1
R
6 6
O 6 B.2 6 B.2 6 6 D.2 0 7
S 7 7 7 7 7 7 Table de 1 8
C.0 C.0 C.0
paginas del 2 9
D 8 8 8 8 C.1 8 C.1 8 C.1 proceso C
E 3 10
9 9 9 9 9 9
C.2 C.2 C.2
M
10 10 0 4
M 10 10 C.3 10 C.3 10 C.3
A 11 11 Table de 1 5
11 11 11 11
R D.3
paginas del 2 6
C 12 12 12 12 12 12 proceso D
D.4
O 3 11
13 13 13 13 13 13
4 12
14 14 14 14 14 14
13
1) Quince marcos 2) Carga proceso 3) Carga proceso 4) Carga proceso 5) Intercambiar 4) Carga proceso Lista de
disponibles A B C proceso C D marcos libres 14
Paginación
Paginación simple
simple
La respuesta es no, porque una vez más se puede utilizar el concepto de dirección lógica. El
sistema operativo mantiene una tabla de páginas por cada proceso. La tabla de páginas muestra
la ubicación del marco por cada página del proceso. Dentro del programa, cada dirección lógica
está formada por un número de página y un desplazamiento dentro de la página. Es importante
recordar que en el caso de una partición simple, una dirección lógica es la ubicación de una
palabra relativa al comienzo del programa; el procesador la traduce en una dirección física. Con
paginación, la traducción de direcciones lógicas a físicas las realiza también el hardware del
procesador. Ahora el procesador debe conocer cómo acceder a la tabla de páginas del proceso
actual. Presentado como una dirección lógica (número de página, desplazamiento), el procesador
utiliza la tabla de páginas para producir una dirección física (número de marco, desplazamiento).
Continuando con nuestro ejemplo, las cinco páginas del proceso D se cargan en los marcos 4, 5,
6, 11 y 12. Una tabla de páginas contiene una entrada por cada página del proceso, de forma que
la tabla se indexe fácilmente por el número de página (iniciando en la página 0). Cada entrada de
la tabla de páginas contiene el número del marco en la memoria principal, si existe, que contiene
la página correspondiente, Adicionalmente, el sistema operativo mantiene una única lista de
marcos libres de todos los marcos de la memoria que se encuentran actualmente no ocupados y
disponibles para las páginas.
Paginación
Paginación simple
simple
Por tanto vemos que la paginación simple, tal y como se describe aquí, es similar al
particionamiento fijo. Las diferencias son que, con la paginación, las particiones son bastante
pequeñas; un programa podría ocupar más de una partición; y dichas particiones no necesitan ser
contiguas.
Para hacer este esquema de paginación conveniente, el tamaño de página y por tanto el tamaño
del marco debe ser una potencia de 2. Con el uso de un tamaño de página potencia de 2, es fácil
demostrar que la dirección relativa, que se define con referencia al origen del programa, y la
dirección lógica, expresada como un número de página y un desplazamiento, es lo mismo.
Las consecuencias de utilizar un tamaño de página que es una potencia de 2 son dobles. Primero,
el esquema de direccionamiento lógico es transparente al programador, al ensamblador y al
montador.
Cada dirección lógica (número de página, desplazamiento) de un programa es idéntica a su
dirección relativa. Segundo, es relativamente sencillo implementar una función que ejecute el
hardware para llevar a cabo dinámicamente la traducción de direcciones en tiempo de ejecución.
Paginación
Paginación yy Segmentación
Segmentación simple
simple
Dirección Lógica = Dirección Lógica =
Dirección relativa = 1502 Página#=1, Desplazamiento = 478 Segmento#=1, Desplazamiento = 752
0000010111011110 000001 0111011110 0001 001011110000
Segmento 0
750 bytes
Página 0
752
Proceso de usuario
478
(2700 bytes)
Página 1
Segmento 1
1950 bytes
Página 2
a) Particionado c) Segmentación
b) Paginación
(tamaño página = 1KB)
Segmentación
Segmentación Simple
Simple
Un programa de usuario se puede subdividir utilizando segmentación, en la cual el programa y sus
datos asociados se dividen en un número de segmentos. No se requiere que todos los programas
sean de la misma longitud, aunque hay una longitud máxima de segmento. Como en el caso de la
paginación, una dirección lógica utilizando segmentación está compuesta por dos partes, en este
caso un número de segmento y un desplazamiento.
Debido al uso de segmentos de distinto tamaño, la segmentación es similar al particionamiento
dinámico. En la ausencia de un esquema de overlays o el uso de la memoria virtual, se necesitaría
que todos los segmentos de un programa se cargaran en la memoria para su ejecución. La
diferencia, comparada con el particionamiento dinámico, es que con la segmentación un programa
podría ocupar más de una partición, y estas particiones no necesitan ser contiguas. La
segmentación elimina la fragmentación interna pero, al igual que el particionamiento dinámico,
sufre de fragmentación externa. Sin embargo, debido a que el proceso se divide en varias piezas
más pequeñas, la fragmentación externa debería ser menor.
Mientras que la paginación es invisible al programador, la segmentación es normalmente visible y
se proporciona como una utilidad para organizar programas y datos. Normalmente, el programador
o compilador asignará programas y datos a diferentes segmentos. Para los propósitos de la
programación modular, los programas o datos se pueden dividir posteriormente en múltiples
segmentos.
Segmentación
Segmentación Simple
Simple
El inconveniente principal de este servicio es que el programador debe ser consciente de la
limitación de tamaño de segmento máximo. Otra consecuencia de utilizar segmentos de distinto
tamaño es que no hay una relación simple entre direcciones lógicas y direcciones físicas.
De forma análoga a la paginación, un esquema de segmentación sencillo haría uso de una tabla
de segmentos por cada proceso y una lista de bloques libre de memoria principal. Cada entrada
de la tabla de segmentos tendría que proporcionar la dirección inicial de la memoria principal del
correspondiente segmento. La entrada también debería proporcionar la longitud del segmento,
para asegurar que no se utilizan direcciones no válidas. Cuando un proceso entra en el estado
Ejecutando, la dirección de su tabla de segmentos se carga en un registro especial utilizado por el
hardware de gestión de la memoria.
Resumiendo, con la segmentación simple, un proceso se divide en un conjunto de segmentos que
no tienen que ser del mismo tamaño. Cuando un proceso se trae a memoria, todos sus segmentos
se cargan en regiones de memoria disponibles, y se crea la tabla de segmentos.
Segmentación
Segmentación Simple
Simple
Dirección lógica de 16bits Dirección lógica de 16bits
Página de 6bits Desplazamiento de 10bits Segmento Desplazamiento de 12bits
4bits
0 0 0 0 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0
Dirección física de 16bits Dirección física de 16bits
paginación Segmentación
Características
Características de
de la
la P
Paginación
aginación
yy la
la Segmentación
Segmentación
Paginación Simple Paginación con Memoria Virtual Segmentación Simple Segmentación con Memoria Virtual
Memoria principal particionada en Memoria principal particionada en Memoria principal no particionada Memoria principal no particionada
fragmentos pequeños de un tamaño fragmentos pequeños de un tamaño
fijo llamados marcos fijo llamados marcos
Programa dividido en paginas por el Programa dividido en paginas por el Los segmentos de programa se Los segmentos de programa se
compilador o el sistema de gestión de compilador o el sistema de gestión de especifican por el programador al especifican por el programador al
memoria memoria compilador compilador
Fragmentación interna en los marcos Fragmentación interna en los marcos Sin fragmentación interna Sin fragmentación interna
Sin fragmentación externa Sin fragmentación externa Fragmentación externa Fragmentación externa
El OS debe mantener una tabla de El OS debe mantener una tabla de El OS debe mantener una tabla de El OS debe mantener una tabla de
paginas por cada proceso mostrando paginas por cada proceso mostrando segmentos por cada proceso segmentos por cada proceso
en el marco que se encuentra cada en el marco que se encuentra cada mostrando la dirección de carga y la mostrando la dirección de carga y la
pagina ocupada pagina ocupada longitud de cada segmento longitud de cada segmento
El OS debe mantener una lista de El OS debe mantener una lista de El OS debe mantener una lista de El OS debe mantener una lista de
marcos libres marcos libres huecos en la memoria principal huecos en la memoria principal
El procesador utiliza el numero de El procesador utiliza el numero de El procesador utiliza el numero de El procesador utiliza el numero de
pagina, desplazamiento para calcular pagina, desplazamiento para calcular segmentos, desplazamiento para segmentos, desplazamiento para
la dirección absoluta la dirección absoluta calcular direcciones absolutas calcular direcciones absolutas
Todas las paginas del proceso deben No se necesitan mantener todas las Todos los segmentos del proceso No se necesitan mantener todos los
encontrarse en la memoria principal paginas del proceso en los marcos de deben encontrarse en la memoria segmentos del proceso en la memoria
para que el proceso se pueda ejecutar, la memoria principal para que se principal para que el proceso se pueda principal para que el proceso se
salvo que se utilice overlays ejecute, se leen bajo demanda ejecutar, salvo que se utilice overlays ejecute. Se pueden leer bajo demanda
La lectura de una pagina a memoria La lectura de un segmento a memoria
principal puede requerir la escritura de principal puede requerir la escritura de
una pagina a disco uno o mas segmentos al disco
Memoria
Memoria Virtual
Virtual
Mientras que los registros base y límite se pueden utilizar para crear la abstracción de los espacios
de direcciones, hay otro problema que se tiene que resolver: la administración del agrandamiento
del software (bloatware). Aunque el tamaño de las memorias se incrementa con cierta rapidez, el
del software aumenta con una mucha mayor. En la década de 1980, muchas universidades
operaban un sistema de tiempo compartido con docenas de usuarios (más o menos satisfechos)
trabajando simultáneamente en una VAX de 4 MB. Ahora Microsoft recomienda tener por lo menos
2 GB para que un sistema Windows 10 de 64bits de un solo usuario ejecute aplicaciones simples.
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 3 ordinario tiene una velocidad de
transferencia pico de 400 MB/s a lo más, lo cual significa que requiere por lo menos 3 segundos
para intercambiar un programa de 1 GB de memoria a disco y otros 3 segundos para intercambiar
un programa de 1 GB del disco a memoria.
El problema de que los programas sean más grandes que la memoria ha estado presente desde
los inicios de la computación, en áreas limitadas como la ciencia y la ingeniería (para simular la
creación del universo o, incluso, para simular una nueva aeronave, se requiere mucha memoria).
Memoria
Memoria Virtual
Virtual
El método ideado (Fotheringham, 1961) se conoce actualmente como memoria virtual. La idea
básica detrás de la memoria virtual es que cada programa tiene su propio espacio de direcciones,
el cual se divide en trozos llamados páginas. Cada página es un rango contiguo de direcciones.
Estas páginas se asocian a la memoria física, pero no todas tienen que estar en la memoria física
para poder ejecutar el programa. Cuando el programa hace referencia a una parte de su espacio
de direcciones que está en la memoria física, el hardware realiza la asociación necesaria al
instante. Cuando el programa hace referencia a una parte de su espacio de direcciones que no
está en la memoria física, el sistema operativo recibe una alerta para buscar la parte faltante y
volver a ejecutar la instrucción que falló.
En cierto sentido, la memoria virtual es una generalización de la idea de los registros base y límite.
El procesador 8088 tenía registros base separados (pero no tenía registros límite) para texto y
datos. Con la memoria virtual, en vez de tener una reubicación por separado para los segmentos
de texto y de datos, todo el espacio de direcciones se puede asociar a la memoria física en
unidades pequeñas equitativas.
La memoria virtual funciona muy bien en un sistema de multiprogramación, con bits y partes de
muchos programas en memoria a la vez. Mientras un programa espera a que una parte del mismo
se lea y coloque en la memoria, la CPU puede otorgarse a otro proceso.
Paginación
Paginación con
con Memoria
Memoria Virtual
Virtual
En las computadoras sin memoria virtual, la dirección física se coloca directamente en el bus de
memoria y hace que se lea o escriba la palabra de memoria física con la misma dirección. Cuando
se utiliza memoria virtual, las direcciones virtuales no van directamente al bus de memoria. En vez
de ello, van a una MMU (Memory Management Unit, Unidad de administración de memoria) que
asocia las direcciones virtuales a las direcciones de memoria físicas.
Para la memoria virtual basada en el esquema de paginación también se necesita una tabla de
páginas. De nuevo, normalmente se asocia una única tabla de páginas a cada proceso. Debido a
que sólo algunas de las páginas de proceso se encuentran en la memoria principal, se necesita
que cada entrada de la tabla de páginas indique si la correspondiente página está presente (P) en
memoria principal o no. Si el bit indica que la página está en memoria, la entrada también debe
indicar el número de marco de dicha página.
La entrada de la tabla de páginas incluye un bit de modificado (M), que indica si los contenidos de
la correspondiente página han sido alterados desde que la página se cargó por última vez en la
memoria principal. Si no había ningún cambio, no es necesario escribir la página cuando llegue el
momento de reemplazarla por otra página en el marco de página que actualmente ocupa.
Pueden existir también otros bits de control en estas entradas. Por ejemplo, si la protección y
compartición se gestiona a nivel de página, se necesitarán también los bits para este propósito.
Paginación
Paginación con
con Memoria
Memoria Virtual
Virtual
Espacio de
direcciones
Como sólo tenemos ocho marcos de página físicos, sólo
virtuales ocho de las páginas virtuales se asocian a la memoria
60K-64K X física. Las demás, que se muestran con una cruz en la
56K-60K X
figura, no están asociadas. En el hardware real, un bit de
52K-56K X Página virtual presente/ausente lleva el registro de cuáles páginas
48K-52K X
están físicamente presentes en la memoria.
44K-48K 7
¿Qué ocurre si el programa hace referencia a direcciones
Dirección no asociadas, por ejemplo, mediante el uso de la
40K-44K X
de memoria instrucción
36K-40K 5 física MOV REG,32780
32K-36K X ... 28K-32K
que es el byte 12 dentro de la página virtual 8
28K-32K X
... 24K-28K (empezando en 32768)? La MMU detecta que la página
24K-28K X
... 20K-24K no está asociada (X) y hace que la CPU haga un TRAP al
20K-24K 3
... 16K-20K OS. A este TRAP se le llama fallo de página. El OS
16K-20K 4
... 12K-16K
selecciona un marco de página que se utilice poco y
12K-16K 0 escribe su contenido de vuelta al disco (si no es que ya
... 8K-12K
8K-12K 6 está ahí). Después obtiene la página que se acaba de
4K-8K 1 ... 4K-8K referenciar en el marco de página que se acaba de
0K-4K 2 ... 0K-4K liberar, cambia la asociación y reinicia la instrucción que
Marco de Página
originó el TRAP.
Paginación
Paginación con
con Memoria
Memoria Virtual
Virtual
Estructura de la tabla de páginas. El mecanismo básico de lectura de una palabra de la memoria
implica la traducción de la dirección virtual, o lógica, consistente en un número de página y un
desplazamiento, a la dirección física, consistente en un número de marco y un desplazamiento,
usando para ello la tabla de páginas. Debido a que la tabla de páginas es de longitud variable
dependiendo del tamaño del proceso, no podemos suponer que se encuentra almacenada en los
registros. En lugar de eso, debe encontrarse en la memoria principal para poder ser accedida.
Número de página Desplazamiento Dirección virtual - Paginación Computadora Tamaño de Página
Atlas 512 48bits words
Otros bits
PM de control Número de marco Entrada de la tabla de páginas Honeywell-Multics 1024 36bits words
IBM 370/XA an 370/ESA 4KB
Segmento Desplazamiento Dirección virtual - Segmentación VAX Family 512 bytes
IBM AS/400 512 bytes
PM
Otros bits
de control Longitud Comienzo de segmento Entrada de la tabla
de segmentos DEC Alpha 8KB
Dirección virtual MIPS 4KB a 16MB
Segmento de página Número de página Desplazamiento Segmentación de
paginas UltraSPARC 8KB a 4MB
Bits de control Longitud Comienzo de segmento Entrada de la tabla Pentium 4KG a 4MB
de segmentos
Intel Itanium 4KB a 256MB
Otros bits Intel Core i7 4KB a 1GB
PM de control Número de marco Entrada de la tabla de páginas
Paginación
Paginación con
con Memoria
Memoria Virtual
Virtual
En la mayoría de sistemas, existe una única tabla de página por proceso. Pero cada proceso
puede ocupar una gran cantidad de memoria virtual. Por ejemplo, en la arquitectura VAX, cada
proceso puede tener hasta 231 = 2 GB de memoria virtual. Usando páginas de 29 = 512 bytes, que
representa un total de 222 entradas de tabla de página por cada proceso. Evidentemente, la
cantidad de memoria demandada por las tablas de página únicamente puede ser
inaceptablemente grande. Para resolver este problema, la mayoría de esquemas de memoria
virtual almacena las tablas de páginas también en la memoria virtual, en lugar de en la memoria
real. Esto representa que las tablas de páginas están sujetas a paginación igual que cualquier otra
página.
Cuando un proceso está en ejecución, al menos parte de su tabla de páginas debe encontrarse en
memoria, incluyendo la entrada de tabla de páginas de la página actualmente en ejecución.
Algunos procesadores utilizan un esquema de dos niveles para organizar las tablas de páginas de
gran tamaño. En este esquema, existe un directorio de páginas, en el cual cada entrada apuntaba
a una tabla de páginas. De esta forma, si la extensión del directorio de páginas es X, y si la
longitud máxima de una tabla de páginas es Y, entonces un proceso consistirá en hasta X ≥ Y
páginas. Normalmente, la longitud máxima de la tabla de páginas se restringe para que sea igual a
una página.
Paginación
Paginación con
con Memoria
Memoria Virtual
Virtual
Dirección Virtual
Nro página Desplazamiento Nro marco Desplazamiento
Registro desplaza
miento
Puntero tabla
de páginas
Marco de
n bits m bits página
Tabla de paginas
Nro. Marco
.
6
4
A las
3
2
páginas
1
0
Aceleración
Aceleración de
de Paginación
Paginación
Para los espacios de direcciones virtuales de 32 bits, la tabla de páginas multinivel funciona
bastante bien. Sin embargo, en computadoras de 64 la situación cambia de manera drástica. Si el
espacio de direcciones es de 264 bytes, con páginas de 4 KB, necesitamos una tabla de páginas
con 252 entradas. Si cada entrada es de 8 bytes, la tabla es de más de 30 millones de gigabyes (30
PB). En consecuencia, se necesita una solución diferente para los espacios de direcciones
virtuales paginados de 64 bits.
Una de esas soluciones es la tabla de páginas invertida. En este diseño hay una entrada por
cada marco de página en la memoria real, en vez de tener una entrada por página de espacio de
direcciones virtuales. Por ejemplo, con direcciones virtuales de 64 bits, una página de 4 KB y 4 GB
de RAM, una tabla de páginas invertida sólo requiere 1,048,576 entradas. La entrada lleva el
registro de quién (proceso, página virtual) se encuentra en el marco de página.
Aunque las tablas de página invertidas ahorran grandes cantidades de espacio, al menos cuando
el espacio de direcciones virtuales es mucho mayor que la memoria física, tienen una seria
desventaja: la traducción de dirección virtual a dirección física se hace mucho más difícil. Cuando
el proceso n hace referencia a la página virtual p, el hardware ya no puede buscar la página física
usando p como indice en la tabla de paginas. En vez de ello, debe buscar una entrada (n, p) en
toda la tabla de páginas invertida. Lo que es peor: esta búsqueda se debe realizar en cada
referencia a memoria, no sólo en los fallos de página.
Aceleración
Aceleración de
de Paginación
Paginación
La forma de salir de este dilema es utilizar el TLB. Si el TLB puede contener todas las páginas de
uso frecuente, la traducción puede ocurrir con igual rapidez que con las tablas de páginas
regulares. Sin embargo, en un fallo de TLB la tabla de páginas invertida tiene que buscarse
mediante software. Una manera factible de realizar esta búsqueda es tener una tabla de hash
arreglada según el hash de la dirección virtual. Todas las páginas virtuales que se encuentren en
memoria y tengan el mismo valor de hash se encadenan en conjunto. Si la tabla de hash tiene
tantas ranuras como las páginas físicas de la máquina, la cadena promedio tendrá sólo una
entrada, con lo cual se acelera de manera considerable la asociación. Una vez que se ha
encontrado el número de marco de página, se introduce el nuevo par (virtual, física) en el TLB.
Tabla de páginas
tradicional con una
entrada para cada
La memoria física de Pagina Marco de
una de las 252 páginas
1 GB tiene 218 marcos virtual Pagina
252-1 de páginas de 4KB Tabla de hash
.
.
218-1 218-1
.
. .
. .
6 . .
5 2 Indexada 2 s
4 1 por hash 1
3 0 en página 0 s s
Indexada virtual
2
por página
1
virtual
0
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
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.
Al momento en que ocurre un fallo de página, hay cierto conjunto de páginas en memoria y una de
éstas se referenciará en la siguiente instrucción (la página que contiene la instrucción); otras
páginas tal vez no se referencien sino hasta 10, 100 o tal vez 1000 instrucciones después. El
problema es que al momento del fallo de página, el sistema operativo no tiene forma de saber
cuándo será la próxima referencia a cada una de las páginas, este es El algoritmo de reemplazo
de páginas óptimo y es inaplicable.
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
Para permitir que el sistema operativo recolecte estadísticas útiles sobre el uso de páginas, la
mayor parte de las computadoras con memoria virtual tienen dos bits de estado asociados a cada
página. R se establece cada vez que se hace referencia a la página (lectura o escritura); M se
establece cuando se escribe en la página (es decir, se modifica). Los bits están contenidos en
cada entrada de la tabla de páginas. Es importante tener en cuenta que estos bits se deben
actualizar en cada referencia a la memoria, por lo que es imprescindible que se establezcan
mediante el hardware. Una vez que se establece un bit en 1, permanece así hasta que el sistema
operativo lo restablece.
Los bits R y M se pueden utilizar para construir un algoritmo simple de paginación de la siguiente
manera. Cuando se inicia un proceso, ambos bits de página para todas sus páginas se establecen
en 0 mediante el OS. El bit R se borra en forma periódica (en cada interrupción de reloj) para
diferenciar las páginas a las que no se ha hecho referencia de las que si se han referenciado.
Cuando ocurre un fallo de página, el sistema operativo inspecciona todas las páginas y las divide
en 4 categorías con base en los valores actuales de sus bits R y M:
●
Clase 0: no ha sido referenciada, no ha sido modificada.
●
Clase 1: no ha sido referenciada, ha sido modificada.
●
Clase 2: ha sido referenciada, no ha sido modificada.
●
Clase 3: ha sido referenciada, ha sido modificada.
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
El algoritmo NRU (Not Recently Used, No usada recientemente) elimina una página al azar de
la clase de menor numeración que no esté vacía. En este algoritmo está implícita la idea de que es
mejor eliminar una página modificada a la que no se haya hecho referencia en al menos un pulso
de reloj (por lo general, unos 20 mseg) que una página limpia de uso frecuente. La principal
atracción del NRU es que es fácil de comprender, moderadamente eficiente de implementar y
proporciona un rendimiento que, aunque no es óptimo, puede ser adecuado.
Otro algoritmo de paginación con baja sobrecarga es el de Primera en entrar, primera en salir
(First-In, First-Out, FIFO). El sistema operativo mantiene una lista de todas las páginas
actualmente en memoria, en donde la llegada más reciente está en la parte final y la menos
reciente en la parte frontal. En un fallo de página, se elimina la página que está en la parte frontal y
la nueva página se agrega a la parte final de la lista. Este algoritmo no se utiliza ya que la primer
pagina podría ser de un proceso importante o recurrente por mas que halla sido el primero en
encontrarse en la tabla.
Una modificación simple al algoritmo FIFO que evita el problema de descartar una página de uso
frecuente es inspeccionar el bit R de la página más antigua. Si es 0, la página es antigua y no se
ha utilizado, por lo que se sustituye de inmediato. Si el bit R es 1, el bit se borra, la página se pone
al final de la lista de páginas y su tiempo de carga se actualiza, como si acabara de llegar a la
memoria. Después la búsqueda continúa. Se llama 2da oportunidad.
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
Aunque el algoritmo segunda oportunidad es razonable, también es innecesariamente ineficiente
debido a que está moviendo constantemente páginas en su lista. Un mejor método sería mantener
todos los marcos de página en una lista circular en forma de reloj. La manecilla apunta a la página
más antigua.
Cuando ocurre un fallo de página, la página a la que apunta la manecilla se inspecciona. Si el bit R
es 0, la página se desaloja, se inserta la nueva página en el reloj en su lugar y la manecilla avanza
una posición. Si R es 1, se borra y la manecilla avanza a la siguiente página. Este proceso se
repite hasta encontrar una página con R = 0. El algoritmo se llama de reloj.
A
L B
HH FF
G
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
Una buena aproximación al algoritmo óptimo se basa en la observación de que las páginas que se
hayan utilizado con frecuencia en las últimas instrucciones, tal vez se volverán a usar con
frecuencia en las siguientes. Por el contrario, las páginas que no se hayan utilizado por mucho
tiempo probablemente seguirán sin utilizarse por mucho tiempo más. Esta idea sugiere un
algoritmo factible: cuando ocurra un fallo de página, hay que descartar la página que no se haya
utilizado durante la mayor longitud de tiempo. A esta estrategia se le conoce como paginación LRU
(Least Recently Used, Menos usadas recientemente).
Para implementar el LRU por completo, es necesario mantener una lista enlazada de todas las
páginas en memoria, con la página de uso más reciente en la parte frontal y la de uso menos
reciente en la parte final. La dificultad es que la lista debe actualizarse en cada referencia a
memoria. Buscar una página en la lista, eliminarla y después pasarla al frente es una operación
que consume mucho tiempo, incluso mediante hardware (suponiendo que pudiera construirse
dicho hardware).
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
En la forma más pura de paginación, los procesos inician sin ninguna de sus páginas en la
memoria. Tan pronto como la CPU trata de obtener la primera instrucción, recibe un fallo de
página, causando que el OS tenga que traer la página que contiene la primera instrucción. a este
fallo le siguen otros fallos de página por las variables globales y la pila. Después de cierto tiempo,
el proceso tiene la mayoría de las páginas que necesita y se establece para ejecutarse con
relativamente pocos fallos de página. A esta estrategia se le conoce como paginación bajo
demanda, debido a que las páginas se cargan sólo según la demanda, no por adelantado.
La mayoría de los procesos exhiben una localidad de referencia, lo cual significa que el proceso
hace referencia sólo a una fracción relativamente pequeña de sus páginas en fases de ejecución .
El conjunto de páginas que utiliza un proceso en un momento dado se conoce como su conjunto
de trabajo. Si todo el conjunto de trabajo está en memoria, el proceso se ejecutará sin producir
muchos fallos hasta que avance a otra fase de ejecución. Si la memoria disponible es demasiado
pequeña como para contener todo el conjunto de trabajo completo, el proceso producirá muchos
fallos de página y se ejecutará lentamente, ya que para ejecutar una instrucción se requieren unos
cuantos nanosegundos y para leer una página del disco se requieren en general 10 milisegundos.
A una proporción de una o dos instrucciones por cada 10 milisegundos, se requeriría una
eternidad para terminar. Se dice que un programa que produce fallos de página cada pocas
instrucciones está sobrepaginando (thrashing)
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
En un sistema de multiprogramación, los procesos se mueven con frecuencia al disco (es decir,
todas sus páginas se eliminan de la memoria) para dejar que otros procesos tengan oportunidad
de usar la CPU. Aquí surge la pregunta de qué hacer cuando un proceso se regresa una y otra
vez. Técnicamente, no hay que hacer nada. El proceso producirá fallos de página sólo hasta que
se haya cargado su conjunto de trabajo. El problema es que tener 20, 100 o incluso 1000 fallos de
página cada vez que se carga un proceso es algo lento, además de que se desperdicia un tiempo
considerable de la CPU, ya que el sistema operativo tarda unos cuantos milisegundos de tiempo
de la CPU en procesar un fallo de página.
Por lo tanto, muchos sistemas de paginación tratan de llevar la cuenta del conjunto de trabajo de
cada proceso y se aseguran que esté en memoria antes de permitir que el proceso se ejecute.
Este método se conoce como modelo del conjunto de trabajo
Hay que tener en cuenta que el conjunto de trabajo cambia con el tiempo.
Para implementar el modelo del conjunto de trabajo, es necesario que el sistema operativo lleve la
cuenta de cuáles páginas están en el conjunto de trabajo. Tener esta información también conduce
de inmediato a un posible algoritmo de reemplazo de páginas: cuando ocurra un fallo de página,
hay que buscar una página que no se encuentre en el conjunto de trabajo y desalojarla.
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
Para implementar dicho . Tiempo virtual actual 2204
.
algoritmo se requiere una .
manera precisa de determinar Información acerca
de una página
cuáles páginas están en el 2084 1 Bit R (referencia)
conjunto de trabajo. Por
definición, el conjunto de trabajo 2003 1
es el conjunto de páginas
utilizadas en las k referencias a Tiempo de último 1980 1 Explora todas las páginas examinando el bit R:
uso
memoria más recientes. Para Si (R == 1)
implementar cualquier algoritmo 1213 0 establece el tiempo del ultimo uso al
de conjunto de trabajo se debe Página referenciada
tiempo virtual actual
elegir por adelantado cierto durante este pulso 2014 1
Si (R == 0 y edad > t)
valor de k. Una vez que se ha elimina esta página
seleccionado cierto valor, 2020 1
Si (R == 0 y edad <= t)
después de cada referencia a recuerda el menor tiempo
memoria, el conjunto de páginas Página no
2032 1
inmediato.
2003 1 2020 1 2003 1 2020 1
1213 0 2204 1
Nueva página
Algoritmos
Algoritmos de
de reemplazo
reemplazo de
de Paginas
Paginas
Algoritmo Comentario
Reloj Realista
LRU (menos usadas recientemente) Excelente, pero difícil de implementar con exactitud
desplaza
Registro miento
Puntero tabla Segmento
de segmentos
n bits
Tabla de segmentos
1
Longitud | Base
Memoria Principal
Programa Mecanismo de segmentación
Bibliografía
Bibliografía &
& Licencia
Licencia
1) Tanenbaum, A. y Bos, H. (2015). Modern Operating Systems, 4th. Ed.Pearson.
2) Stallings, W. (2018). Operating Systems Internals and Design Principles, 9th Ed. Pearson.
3) Silberschatz, A. Galvin, P. y Gagne G. (2018). Operating System Concepts, 10th Ed. Wiley.
4) Este documento se encuentra bajo Licencia Creative Commons 2.5 Argentina (BY-NC-SA),
por la cual se permite su exhibición, distribución, copia y posibilita hacer obras derivadas a
partir de la misma, siempre y cuando se cite la autoría del Prof. Matías E. García y sólo
podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.
5) Autor:
Matías E. García
.
Prof. & Tec. en Informática Aplicada
www.profmatiasgarcia.com.ar
[email protected]