Você está na página 1de 14

FIE

Departamento de Ingeniería Sistemas Operativos


Informática

TEMA #3 ADMINISTRACION DEL SISTEMA

CONFERENCIA #11 MEMORIA

Sumario:

 Aspectos introductorios.
 Intercambio de trabajos. Solapamiento.
 Multiprogramación con particiones fijas. Fragmentación interna.
 Multiprogramación con particiones variables. Fragmentación externa.
 Técnicas de asignación de memoria.
 Paginado.
 Segmentado.
 Memoria virtual.

Bibliografía:

 Sistemas Operativos Modernos, Andrew S. Tanenbaum, gestión de memoria.


 Operating System: Design and Implementation, Tenenbaum, pág 191-206.
 Fundamntos de Sistemas Operativos, Silberschatz, pág 263-290.

Aspectos Introductorios.

La memoria es uno de los recursos más importantes de la computadora y por ello


debe ser asignada y utilizada en forma cuidadosa. La parte del sistema operativo
que se encarga de la asignación de este recurso se nombra administrador de
memoria.

Como es conocido, la memoria está compuesta por un arreglo de bytes o


palabras, donde cada uno de ellos consta de una dirección.

Existen diferentes esquemas para la administración de memoria y ellos dependen


en gran medida de las posibilidades que brinde el hardware.

La forma más simple de administración de memoria es que no halla. Los


programas son cargados completos a la memoria y utilizan todos los recursos del
sistema de cómputo. Fue el método utilizado hasta aproximadamente 1960.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Intercambio de trabajos. Solapamiento.

Aún con monoprogramación es posible instrumentar un sistema operativo de


tiempo compartido y por ende multiusuario. A este fin se hace uso de otra técnica
conocida como intercambio de trabajos (“swapping”).

La técnica consiste en tener los trabajos almacenados en un medio de


almacenamiento y uno sólo en memoria ejecutándose. Cuando éste finaliza, se va
a bloquear o se le acabó su tiempo, entonces su imagen en memoria es
trasladada al dispositivo y se carga la correspondiente al próximo. El intercambio
de trabajos requiere del uso de dispositivos de acceso rápido y con alta velocidad
de transferencia.

Dado que el cambio de contexto puede ser algo largo se podría afectar el tiempo
de espera de los usuarios o la eficiencia del sistema. Una solución consistiría en
utilizar el solapamiento. En este caso, se dividiría la memoria en 3 áreas: en la
primera estaría el trabajo que ya terminó y se está transfiriendo al dispositivo, en la
segunda el que se está ejecutando y hacia la tercera se estará transfiriendo el
próximo a atender.

Aún cuando se explicó el intercambio de trabajos en un sistema operativo de


monoprogramación, esta técnica se continúa utilizando en las instrumentaciones
de multiprogramación.

Multiprogramación con particiones fijas. Fragmentación interna.

Como ya se conoce, la multiprogramación presupone la existencia en memoria de


varios procesos que comparten el tiempo del procesador.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Una primera alternativa de administración de la memoria en este caso, es


particionarla en varias áreas llamadas particiones o regiones. Cada programa se
almacenará en una de estas particiones.

Debido a lo antes indicado, el grado de la multiprogramación vendrá dado por el


número de particiones existentes. Cuando se libera una partición, el planificador
de trabajos selecciona uno de la cola de entrada existente en el dispositivo.

Por supuesto que en este esquema, con varios procesos en memoria, requiere
también de un mecanismo de protección. Una alternativa es el uso de dos
registros, uno indicando la dirección inicial y otro la dirección final del proceso que
se está ejecutando en cada momento.

Otra alternativa es tener igualmente dos registros, uno que indique la dirección
inicial del proceso corriente (el que se está ejecutando) y el otro la longitud del
espacio asignado.

Una tercera alternativa fue la usada por la IBM/360. Aquí se dividió la memoria en
bloques de 2K y a cada uno se le asociaban 4 bits de protección. Cuando un
programa se cargaba en memoria a todos sus bloques se les daba el mismo
código. Un programa sólo podía acceder los bloques que tenían su código.

El número de particiones existentes y la longitud de estas puede ser fijo, definidas


estáticamente en el momento de la carga del sistema. En este caso se habla de
multiprogramación con particiones fijas o MFT (Multi Fixed Tasks).

Generalmente, cada partición tiene asociada una cola de entrada y una


planificación por separado, es decir múltiples colas de entrada. Cada vez que
termina el programa que se ejecuta en una partición se toma el próximo de la cola

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

correspondiente. Los programas van a una cola o a la otra en dependencia de sus


requerimientos de memoria.

La desventaja fundamental de la instrumentación anterior consiste en que puede


haber una partición cuya cola esté vacía, mientras hay varios trabajos esperando
en otras.

Una alternativa consiste en colocar todos los trabajos en una sola cola de entrada,
entonces, siempre que una partición esté libre se escoge uno de la cola que quepa
en el espacio de memoria. En este caso se pueden utilizar numerosas políticas de
planificación para la cola las que están explicadas en detalles en el libro de
Silberschatz.

El sistema OS/MFT combinaba las dos alternativas antes explicadas. Es decir, una
partición podía tener asociadas varias colas de entrada y también una cola de
entrada podía estar asociada a más de una partición.

Una situación crítica en la multiprogramación con particiones fijas es la decisión de


los tamaños. Si se dan tamaños pequeños, los programas grandes puede que no
quepan en ninguna. Por otra parte, si se les dan tamaños grandes, entonces los

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

programas pequeños malgastan memoria. Al gasto de memoria antes indicado se


le llama fragmentación interna.

Multiprogramación con particiones variables. Fragmentación externa.

Si en el esquema de administración de memoria no existe un número


predeterminado de particiones ni las longitudes son fijas, sino que dependen de
las necesidades planteadas por cada trabajo, estamos en presencia de la
multiprogramación con particiones variables o MVT (“Multi Variable Tasks”).

Como es de suponer en esta asignación dinámica de la memoria no existirá


fragmentación interna debido a que cada proceso recibe justamente la cantidad de
memoria que necesita.

En ese esquema, un trabajo se carga en memoria siempre que haya un espacio


libre contiguo. A cada espacio libre se le llama un hueco (“hole”). El sistema de
operación mantiene una estructura de datos indicando que espacios están libres
(los huecos). Si el espacio aparece, entonces se le asigna la cantidad que
necesita. Si existiera sobrante, éste se mantiene como un hueco.

Lógicamente, al inicio de la operación toda la memoria dedicada a los procesos


usuarios constituirá un gran hueco.

Cuando un proceso termina, libera el bloque de memoria que ocupaba y éste se


coloca como libre. Si este hueco nuevo es adyacente a otro, entonces se unen
para formar una de mayor longitud. Nótese que la adyacencia puede ser por
cualquiera de los extremos. En ese momento, se chequea si hay trabajos
esperando por memoria y si el espacio liberado o recombinado satisface los
requerimientos.

Es evidente que a medida que avanza el tiempo la memoria pudiera quedar


fragmentada en varias particiones y varios huecos pequeños que no pueden ser
usados por los trabajos que están esperando, ya que sus requerimientos son
superiores. A esta situación se le llama fragmentación externa.

Una solución a la fragmentación externa es mover todos los procesos a un


extremo de la memoria cada vez que se realiza una liberación de espacio. Es
evidente que en este caso siempre la memoria libre estará constituida por un solo
hueco. Al procedimiento antes indicado se le llama compactación de memoria.
Lógicamente, para que esto sea posible deberá existir relocalización dinámica.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Generalmente esta técnica no se utiliza ya que consume mucho tiempo de uso del
CPU.

En general la utilización de la memoria en el modo MVT es superior al MFT y de


aquí que el esquema que se utiliza en la actualidad es el primero.

En los aspectos discutidos anteriormente sobre el uso de memoria se ha señalado


que los trabajos deberán indicar la cantidad de este recurso que requieren. En
este caso se deberá tener en cuenta el posible crecimiento del área de memoria
de un proceso debido al uso de la pila o de la asignación dinámica (¨heap¨).

Dicha memoria adicional podrá estar incluida en la solicitud o adicionada por el


propio sistema operativo.

El área de memoria de un proceso generalmente tiene el esquema siguiente:

Técnicas de asignación de memoria.

Un aspecto importante en la administración de memoria es que disciplina o


algoritmo utilizar en la asignación de memoria a un proceso.

El algoritmo más simple consiste en buscar el primer hueco que tenga una
longitud igual o mayor que el bloque necesario. Si el bloque libre es mayor que el
necesario entonces es dividido en dos, uno para ser ocupado y otro que
permanecerá libre. El algoritmo antes descrito se conoce como primer acceso
(“first fit” o “first access”). Esta técnica tiende a reducir el tamaño de los bloques al
inicio de la lista y por ello, con el tiempo, demorar las búsquedas.

Una ligera variación se puede lograr utilizando el algoritmo del próximo acceso
(“next fit” o “next access”), que comienza la búsqueda en el lugar donde se quedó

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

la vez anterior y no por el principio. De todas formas, ambas técnicas tienden a


reducir los tamaños de los bloques grandes.

Otro algoritmo bien conocido es el del mejor acceso (“best fit” o “best access”).
Este recorre toda la lista buscando el más pequeño de todos los que puedan
utilizarse. Esta técnica es más lenta (revisa toda la lista) y está demostrado que
tiende a generar huecos muy pequeños que después no pueden ser utilizados. Al
utilizarse este algoritmo resulta más conveniente tener ordenada la lista de huecos
por longitud que por direcciones.

Para solventar la dificultad antes indicada se puede hacer uso del peor
acceso (“worse fit” o “worse access”) que consiste en buscar el hueco
mayor. Simulaciones realizadas demuestran que no es una buena idea.

Un problema cardinal en la administración de memoria, consiste en que estructura


de datos utilizar para conservar la información sobre el espacio ocupado y el libre
(los huecos) a los efectos de las asignaciones. En general se utilizan tres formas
fundamentales con este objetivo:

 Mapa de Bits (“Bit Map”).


 Listas enlazadas.
 Sistema camarada (“Buddy Method”).

En los mapas de bits, la memoria se divide en unidades asignables. A cada una de


estas unidades le corresponde un bit en el mapa. Si el bit está en cero significa
que la unidad o bloque está libre, en caso contrario estará en 1. Si es necesario
asignar una longitud de K unidades, entonces se busca en el mapa K bits
consecutivos que se encuentren en 0.

Un aspecto a tener en cuenta es la longitud de las unidades. Si se toman muy


pequeñas, entonces el mapa de bits crece demasiado. Si se toman muy grandes,
entonces existirá una fragmentación importante en el último bloque de cada
asignación. La búsqueda en un mapa de bits resulta por lo general lenta y por ello
ésta técnica no es muy usada.

Una variante que se utiliza frecuentemente es mantener los bloques de memoria,


en uso o libres, enlazados en una lista ordenada en forma ascendente por
direcciones.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Cuando un proceso termina se libera el bloque que ocupaba. Como la lista está
ordenada ascendentemente por direcciones es fácil conocer si algunos de los
bloques vecinos (el anterior, el posterior o ambos) es un hueco. Si esto ocurriera,
entonces deben unirse en un solo bloque libre.

Para aumentar la velocidad de búsqueda de los huecos se pueden tener dos listas
separadas, una de bloques en uso y otra de huecos. Sin embargo esta técnica es
más lenta cuando se va a liberar un bloque.

También, en lugar de tener una estructura especial para construir la lista de


huecos, se puede hacer uso de los propios bloques de memoria para enlazarse
entre si. En este caso, la primera palabra del bloque será su longitud y la segunda
contendrá la dirección del próximo.

Una última e importante variante a utilizar para la administración de la memoria


libre es el conocido sistema camarada (“buddy system”). Esta técnica trata de
resolver las dificultades que se presentan al liberarse un bloque de memoria
usando una e incluso varias listas de huecos libres. La dificultad se presentaba en
la búsqueda de los vecinos del bloque que se libera.

Su funcionamiento consiste en mantener listas de bloques libres con longitudes de


1, 2, 4, 8, 16, 32, 64, 128, 256, 512..., etc., hasta el tamaño de la memoria. Por
ejemplo, con una memoria de 1Mb se necesitan 21 listas. Inicialmente toda la
memoria está libre y por ello todas las listas estarán vacías, excepto la de 1Mb
que tendrá un bloque.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Los bloques se asignan en longitudes que son potencias de 2. Por ello, cuando un
proceso solicita una cantidad dada de memoria se busca la primera potencia de 2
que da un valor mayor o igual que la cantidad solicitada.

La potencia obtenida indicará la cola donde se deberá buscar. Si existe un bloque,


se asigna. Si no lo hay se irá a la lista inmediata superior, si hay un bloque se pica
en dos parte iguales entregándose la primera mitad al proceso y la otra mitad se
coloca en la lista que le corresponde de acuerdo con su longitud. Si en la lista
siguiente no hay bloques libres se continúa a la próxima y así sucesivamente.

Los dos bloques que se obtienen como resultado de un corte se dice que son
camaradas. Al liberarse un bloque de una longitud determinada se coloca en su
lista correspondiente, pero si su camarada está libre, entonces se unen y pasan
como un solo bloque a la lista correspondiente. El proceso de unión antes indicado
se continúa mientras se van encontrando camaradas en forma sucesiva. Veamos
el ejemplo que aparece en el Tanenbaum.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

La mayor dificultad del sistema camarada es que produce fragmentación interna,


pues las asignaciones siempre se hacen en bloques potencias de 2 (para 33K se
asignan 64K).

El sistema camarada antes explicado corresponde con el binario, es posible seguir


otros criterios a la hora de la partición, lo que conduciría a otros sistemas
camaradas, por ejemplo siguiendo la serie de Fibonaci.

Se han visto algunos métodos de asignación de espacio de memoria. Si se está


utilizando intercambio de trabajo, entonces, se usarán algoritmos similares para la
asignación del espacio en disco.

Paginado.

Existen ventajas en buscar un mecanismo que permita a los procesos tener la


memoria a utilizar distribuida por distintas partes dentro de la existente. Esto
permitiría que el proceso utilice huecos que en otras condiciones no tendrían uso.
Un primer esquema en el sentido indicado lo constituye el llamado paginado.

Cuando se utiliza el paginado, los programas se dividen en unidades de tamaño


fijo. A estas unidades se les llama páginas. Es decir, un programa está compuesto
por un conjunto de estas páginas (probablemente la ultima no esté completa).

Por otro lado, la memoria de la máquina se divide en bloques de igual longitud,


coincidiendo ésta con la que tienen las páginas. A estos bloques se les llaman
marcos de páginas (“frames”). En cada marco de página se puede almacenar
justamente una página.

En un sistema paginado, toda dirección generada está compuesta por dos partes:
un número de página y el desplazamiento dentro de ésta. Es decir, un grupo de

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

bits codificarán la primera información y otros la segunda. Ahora nuestro objetivo


es poder colocar cada página en cualquier marco que se encuentre disponible.
Para lograr este objetivo se requiere mantener la correspondencia (“mapping”)
entre las páginas y los bloques donde se encuentran almacenadas.

A los efectos de lo antes indicado, se mantiene, para cada proceso, una tabla (un
arreglo) indexada por el número de página, donde cada entrada contendrá la
dirección base del marco de página correspondiente. Como es lógico, si a esta
dirección se le suma el desplazamiento arribaremos a la posición física en
memoria donde está la información.

A las direcciones existentes en los programas se les identifica como direcciones


lógicas y a las que se obtienen como resultado de la transformación se les
identifica como direcciones físicas.

Todo lo antes señalado se puede resumir en el siguiente esquema gráfico:

Como es de suponer, esta conversión se tiene que realizar con cada


direccionamiento y por ello no puede ser función del software hacerlo, sino del
hardware. Es decir, que para poder instrumentar el paginado se requiere que el
sistema de cómputo brinde la posibilidad.

La parte del hardware que se encarga de convertir las direcciones lógicas en


direcciones físicas se llama unidad de administración de memoria (MMU).

Al sistema operativo le corresponde, en el momento de la carga de un trabajo,


localizar la cantidad de marcos de página libres que sean necesarios, construir la
tabla de páginas y colocar en un registro base la dirección de ésta, si el trabajo va

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

a ser ejecutado de inmediato. Normalmente la tabla de páginas es conservada en


el PCB del proceso.

Los marcos de páginas libres se conservan mediante una lista o tabla.

Es de notar que el paginado presupone la relocalización dinámica de los procesos.


O mejor dicho, el paginado en sí es una relocalización dinámica.

En el paginado no existe la fragmentación externa, pero si se presenta la interna


en el último marco de página, pues normalmente tendrá una parte de su espacio
sin uso. La solución parece ser utilizar páginas pequeñas. Normalmente se usan
espacios entre 1 y 4 Kbytes.

Una ventaja derivado del paginado es la posibilidad de que en un instante de


tiempo dos o más procesos estén haciendo uso de un código común, o sea, exista
una sola copia del código (programa). Lo antes indicado se logra con facilidad si
en las tablas de páginas aparecen entradas que apuntan a los mismos marcos de
páginas. Para que un programa pueda ser compartido en la forma antes indicada
tiene que ser reentrante o código puro, lo que implica que no se puede
automodificar como resultado de su ejecución.

En los sistemas paginados la protección se establece a través de la existencia, en


cada entrada de la tabla de páginas, de un conjunto de bits que codifican si en esa
página se puede leer, escribir o ejecutar.

Como un proceso puede hacer referencia a tantas páginas como lo permita la


parte correspondiente de la dirección, pero pudiera ocurrir que en realidad
disponga de menos, entonces en cada entrada de la tabla de páginas existirá un
“bit” que codificará si ésta existe realmente o no. El hardware hará uso de este
“bit” para provocar una trampa en caso de una referencia ilegal.

Segmentado.

La técnica de administración de memoria conocida como segmentación es similar


al paginado, con la diferencia de que los bloques no tienen que ser todos de la
misma longitud, de hecho un proceso puede estar conformado por varios
segmentos todos de diferentes longitudes.

Esta forma de actuar se acerca más al punto de vista del programador o usuario
que piensa en su aplicación como varias partes, por ejemplo, un segmento de
código, un segmento de datos, una pila, etc.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

Cada segmento se almacena en una parte diferente de la memoria. Todos los


segmentos que forman una aplicación constituyen su espacio lógico. Cada
elemento de este espacio lógico está caracterizado por un nombre y una longitud.

En un sistema segmentado, toda dirección lógica está compuesta por dos partes:
el nombre del segmento y el desplazamiento dentro de éste. Normalmente, el
nombre del segmento se toma como un número para facilitar la instrumentación.

Mientras que el paginado es una organización de la cual el programador no tiene


conciencia, en la segmentación si, pues deberá decidir en su aplicación cuales
serán los segmentos y que elementos formarán parte de cada uno.

Para convertir una dirección lógica en la dirección física donde la información se


encuentra se hace uso de una estructura de datos conocida como tabla de
segmentos. Cada una de sus entradas contendrá la dirección base del segmento y
su longitud.

La transformación consiste en sumar a la dirección base del segmento el


desplazamiento, que a su vez no puede ser mayor que la longitud.

Todo lo indicado se resume en el siguiente esquema:

Al igual que en el paginado, esta conversión se tiene que realizar con cada
direccionamiento y por ello se requiere también que el sistema de cómputo brinde
el hardware necesario para su operación.

En el momento de la carga de un trabajo le corresponde al sistema operativo


localizar los huecos libres existentes con las capacidades requeridas para los
segmentos, construir la tabla de segmentos y colocar en un registro base la

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018
FIE
Departamento de Ingeniería Sistemas Operativos
Informática

dirección de ésta, si el trabajo va a ser ejecutado de inmediato. Normalmente la


tabla de segmentos es conservada en el PCB del proceso.

Para la administración del espacio libre se utilizará una cualquiera de las técnicas
ya estudiadas: Mapa de bits, listas enlazadas o sistema camarada.

Dado el carácter dinámico de los bloques de memoria libre, el segmentado


adolece del fenómeno de fragmentación externa que ya fue analizado para la
técnica de MVT. Nótese que la analogía es evidente, ya que MVT es el
segmentado cuando todos los trabajos ocupan un solo segmento.

Los mismos mecanismos de protección indicados en el caso del paginado se


instrumentan con el segmentado, es decir bits con los atributos e inclusive
derechos de pertenencia.

Con algunas dificultades adicionales con respecto al paginado, pero aquí también
es posible compartir segmentos entre diferentes procesos.

Memoria virtual.

En ocasiones se pueden elaborar programas que sobrepasan la capacidad de


memoria disponible y la interrogante es que hacer en este caso.

Por otro lado, se ha dicho que la eficiencia en el uso del CPU se incrementa con el
grado de la multiprogramación. Pero a su vez, dicho grado está limitado por la
memoria disponible para almacenar los procesos.

La solución a las dos dificultades antes indicadas se encuentra en el uso de la


llamada memoria virtual. Esta técnica consiste en permitir la ejecución de
procesos que puedan no estar completamente en memoria. Dicho de otra forma,
ejecutar programas que son más largos que el espacio de memoria disponible
para su almacenamiento.

La forma más común de instrumentar la memoria virtual es por medio del


paginado. Es tal la relación que a veces se pierde la noción de que el uso de
páginas de memoria no necesariamente implica un espacio virtual.

Curso:
Profesor: Ing. Jose Antonio García Lorenzo
2017 - 2018

Você também pode gostar