SO Silberschatz - Capítulo 08
SO Silberschatz - Capítulo 08
SO Silberschatz - Capítulo 08
Silberchatz
Captulo 8: Memoria Principal
Hardware Bsico:
Respecto a la velocidad:
Las nicas reas de almacenamiento en la que el CPU puede
acceder directamente son la memoria principal y los registros
internos del propio procesador. Hay instrucciones de mquina
que toman como argumentos direcciones de memoria, pero no
existe ninguna instruccin que acepte direcciones de disco. Por
eso, todas las instrucciones y los datos utilizados deben estar en
alguno de esos dispositivos de almacenamientos, si los datos no
se encuentran en memoria, debern llevarse hasta all antes de
que la CPU pueda operar con ellos. Debido al costo de tiempo
que lleva acceder a la memoria principal, para obtener las
instrucciones y los datos, se utiliza bfer intermedio llamado
memoria cach.
Respecto a la proteccin:
Debemos asegurar que cada proceso tenga un espacio de
memoria separado, para hacer esto, debemos poder determinar
el rango de direcciones legales, mediante dos registros: base y
lmite, el primero almacena la direccin de memoria fsica legal
ms pequea y el segundo especifica el tamao del rango.
Por ejemplo: si el registro base contiene el valor 300040 y el
registro lmite es 120900. Entonces el programa podr acceder
legalmente a todas las direcciones comprendidas entre 300040
y 420940 (300040 + 120900).
La proteccin del espacio de memoria se consigue haciendo que
el hardware de la CPU (el sistema operativo no puede llevar a
cabo la proteccin) comparte todas las direcciones generadas en
modo usuario con el contenido de esos registros. Cualquier
intento, por parte de un programa que se est ejecutando en
modo usuario, de acceder a la memoria del sistema operativo o
a la memoria de otros usuarios har que se produzca una
interrupcin hacia el sistema operativo.
Reasignacin de direcciones:
Para que un programa pueda ejecutarse, este deber ser
cargado en memoria y colocado dentro de un proceso.
Los procesos del disco que estn esperando a ser cargados en
memoria para su ejecucin forman lo que se denomina cola de
entrada.
El procedimiento normal consiste en seleccionar uno de los
procesos de la cola de entrada y cargar dicho proceso en
memoria. Una vez que termina su ejecucin, el espacio ser
declarado como disponible.
Las direcciones de los programas pueden representarse de
diferentes formas y puede realizarse en cualquier de estos
pasos:
Tiempo de compilacin:
Si sabemos en el momento de realizar la compilacin, dnde va
a residir el proceso en memoria, podremos generar cdigo
absoluto. Si la ubicacin inicial cambiase en algn instante
posterior, entonces sera necesario recompilar ese cdigo.
Tiempo de carga:
Si no conocemos en tiempo de compilacin dnde va a residir el
proceso en memoria, el compilador deber generar cdigo
reubicable. En este caso, se retarda la reasignacin final hasta
el momento de la carga. Si cambia la direccin inicial, tan slo
es necesario volver a cargar el cdigo de usuario para incorporar
el valor modificado
Tiempo de ejecucin:
Si el proceso puede desplazarse durante su ejecucin desde un
segmento de memoria a otro, entonces es necesario retardar la
reasignacin hasta el instante de la ejecucin. En este caso en
especial, se necesita un hardware especial.
Carga dinmica:
Como un programa necesita cargarse en la memoria fsica para
poder ejecutarse, este puede depender del tamao del
dispositivo de almacenamiento, por lo que podemos utilizar un
mecanismo denominado carga dinmica.
Este mecanismo se enfoca en cargar solamente las rutinas que
van a ser invocadas (todas se ubican en disco en un formato de
carga reubicable). Cuando una rutina necesita llamar a otra
rutina, la rutina que realiza la invocacin comprueba primero si
la otra ya ha sido cargada, si no es as, se invoca el cargado de
montaje reubicable para que se cargue en memoria la rutina
deseada y para que actualice las tablas de direcciones del
programa con el fin de reflejar este cambio. Despus, se pasa el
control a la rutina recin cargada.
Ventajas:
La ventaja de este mecanismo es que una rutina no
utilizada no se cargar nunca en memoria.
No se requiere ningn soporte especial por parte del
sistema operativo. Es responsabilidad de los usuarios
disear sus programas para poder aprovechar dicho
mtodo.
Intercambio:
Un proceso en ejecucin puede ser intercambiado
temporalmente para obtener ms memoria, sacndolo de ella y
almacenndolo en un almacn de respaldo (por ej: disco), para
luego volver a cargarlos en memoria y as continuar con su
ejecucin.
Normalmente un proceso descargado se volver a cargar en el
mismo espacio de memoria que ocupaba anteriormente. Esta
restriccin est dictada por el mtodo de reasignacin de las
direcciones. Si la reasignacin se realiza en tiempo de
ensamblado o en tiempo de carga, entonces no resulta sencillo
mover el proceso a una ubicacin diferente. En cambio, en una
reasignacin en tiempo de ejecucin no habra problemas
porque las direcciones fsicas se calculan en tiempo de
ejecucin.
Asignacin de memoria:
Uno de los mtodos ms simples para asignar memoria consiste
en dividirla en particiones de tamao fijo, donde en cada una
entra un proceso. El sistema operativo mantiene una tabla que
indica qu partes de la memoria estn disponibles y cules
estn ocupadas. Inicialmente, toda la memoria est disponible
para los procesos de usuario y se considera como un nico
bloque de gran tamao de memoria disponible, al que se
denomina agujero. Cuando llega un proceso y necesita
memoria, buscamos un agujero lo suficientemente grande como
para albergar este proceso. Incluimos ese proceso en el bloque
de memoria y declaramos la restante como disponible.
El sistema operativo debe considerar a cul proceso elegir, de la
cola de entrada, para asignarlo a la memoria. Este buscar en el
conjunto de agujeros dispersos en toda la memoria para
verificar si el tamao puede satisfacer al proceso, en el caso que
no encuentre un bloque, puede esperar a que se desocupe uno.
Adems, puede reordenar la cola de entrada mediante algn
algoritmo de planificacin.
Si un proceso libera un bloque de memoria, y este ltimo es
adyacente a otro bloque de memoria libre, ambas particiones se
unen formando una sola. En este punto, el sistema debe puede
tener que comprobar si hay procesos esperando a que se les
asigne memoria y si esta nueva memoria liberada y
recombinada permite satisfacer las demandas de algunos de los
procesos en espera.
Este procedimiento constituye un caso concreto del problema
general de asignacin dinmica de espacio de
almacenamiento, que se ocupa de cmo satisfacer una
solicitud de tamao n a partir de una lista de agujeros libres.
o Mtodo bsico
El mtodo bsico para implementar la paginacin consiste en
descomponer la memoria fsica en una serie de bloques de
tamao fijo denominados marcos (frames). Cuando hay que
ejecutar un proceso, sus pginas se cargan desde el almacn
de respaldo en los marcos de memoria disponibles. El
almacn de respaldo est divido en bloques de tamao fijo
que tienen el mismo tamao que los marcos de memoria.
Toda direccin generada por la CPU est dividida en dos
partes: en un nmero de pgina (p) y en un nmero de
desplazamiento (Offset). El nmero de pgina se utiliza
como ndice para una tabla de pginas.
La tabla de pginas contiene la direccin base de cada pgina
en memoria fsica, est direccin base se combina con la de
desplazamiento de pgina para definir la direccin de
memoria fsica que se enva a la unidad de memoria.
Segmentacin:
La segmentacin es un esquema de gestin de memoria que
interpreta a esta como un conjunto de segmentos de tamao
variable y sin ninguna ordenacin especfica.
Un espacio lgico de direcciones es una coleccin de segmentos
y cada segmento tiene un nombre y una longitud.
Las direcciones especifican tanto el nombre del segmento como
el desplazamiento dentro de ese segmento. El usuario
especifica, por tanto, cada direccin proporcionando dos valores:
un nombre de segmento y un desplazamiento (en la paginacin,
el usuario especificaba una nica direccin, que el hardware
particionaba en un nmero de pginas y en un desplazamiento
de forma invisible para el programador).
Hardware:
Aunque el usuario puede ahora hacer referencia a los objetos
del programa utilizando una direccin bidimensional, la memoria