Segmentación de Memoria
Segmentación de Memoria
Segmentación de Memoria
Desde los sistemas de ejecución en lotes hasta las primeras computadoras personales, sólo un programa se
ejecutaba a la vez. Posteriormente, cuando se crearon los sistemas multitarea, surgió la necesidad para el
sistema operativo de resolver cómo ubicar los programas en la memoria física disponible y cómo asignar el
espacio en memoria a diferentes procesos.
Pero, ¿qué es la memoria física? También conocida como almacenamiento primario, es el único espacio de
almacenamiento que el procesador puede utilizar directamente.
¿Y cómo podría el sistema operativo, administrar la memoria física? Segmentándola, es decir, dividiéndola en
segmentos o secciones. La segmentación de memoria es una técnica utilizada para administrar aquella de
manera tal, que el equipo pueda funcionar de acuerdo a lo que espera el usuario del mismo, es decir, que
pueda acercarse más al punto de vista de éste y para permitir que varios procesos la compartan.
Desde esta perspectiva, cada uno de los espacios asignados a un proceso es una partición. Cuando el sistema
operativo inicia, toda la memoria disponible es vista como un sólo bloque y conforme se van ejecutando
procesos, este bloque va siendo subdividido para satisfacer sus requisitos.
Cada que se termina de ejecutar un proceso, se va liberando memoria y si estos espacios libres no quedan uno
junto al otro, es decir, contiguos, se genera la FRAGMENTACIÓN. Ahora, para iniciar un nuevo proceso y
utilizar esos espacios libres, existen 3 estrategias de colocación:
1. Primer ajuste: Tomar el primer bloque con el tamaño suficiente para alojar el nuevo proceso
2. Mejor ajuste: Buscar entre todos los bloques disponibles cuál es el que mejor se ajusta al tamaño
requerido por el nuevo proceso.
3. Peor ajuste: Buscar cuál es el bloque más grande disponible y asignárselo al nuevo proceso
Hay 2 tipos de fragmentación: Externa que se da cuando existe el espacio total de memoria para satisfacer un
requerimiento, pero no es contigua; Interna, cuando la memoria asignada puede ser ligeramente mayor a la
requerida. La fragmentación externa se puede reducir mediante la COMPACTACIÓN para colocar toda la
memoria libre en un solo gran bloque, es decir, moviendo los contenidos en memoria de los bloques
asignados para que ocupen espacios contiguos, permitiendo unificar varios bloques libres contiguos en uno
solo.
Tanto la fragmentación externa como la necesidad de compactación pueden evitarse por completo empleando
la PAGINACIÓN. Ésta consiste en que cada proceso está dividido en varios bloques de tamaño fijo (más
pequeños que los segmentos) llamados páginas, dejando de requerir que la asignación sea de un área contigua
de memoria. Las páginas son los bloques unitarios que se van transfiriendo entre memoria secundaria y
memoria RAM.
Un sistema que emplea paginación, suele utilizar la memoria virtual, ya que esta técnica permite hacer ver a
un sistema que dispone de más memoria de la que verdaderamente tiene: ofrece a los procesos mayor espacio
en memoria con el que se cuenta físicamente, el sistema emplea espacio en almacenamiento secundario
(típicamente, disco duro), mediante un esquema de intercambio (swap) guardando y trayendo páginas enteras.
La paginación sobre demanda es un sistema de paginación con el cual se busca disminuir los tiempos de
respuesta y aumentar la cantidad de programas en memoria. Para lograrlo, hace uso de un intercambiador
llamado “paginador flojo”, el cual carga a memoria solo las páginas que serán utilizadas por el programa en
ejecución, de esta manera se logra un menor tiempo de carga y un ahorro en cuanto a espacio utilizado por el
mismo. La paginación sobre demanda puede impactar fuertemente el rendimiento de un proceso ya que un
acceso a disco es varios miles de veces más lento que el acceso a memoria.
En la gestión de la memoria virtual, toma gran importancia lo que se denomina política de reemplazo, que es
la que decide que página de las presentes en memoria es la que va a ser sustituida. Por lo anterior, el
reemplazo de páginas es una parte fundamental de la paginación, ya que es la pieza que posibilita una
verdadera separación entre memoria lógica y física.
La hiperpaginación es la situación en la que se utiliza una creciente cantidad de recursos para hacer una
cantidad de trabajo cada vez menor.
Se denomina intercambio (swap) a una zona de disco que se utiliza como memoria auxiliar. Todo proceso
para ejecutarse debe estar en memoria. Utilizando una zona de disco como intercambio puede aumentarse el
grado de multiprogramación.
La segmentación es un concepto que se aplica directamente a la arquitectura del procesador y permite separar
las regiones de la memoria lineal en segmentos, cada uno de los cuales puede tener diferentes permisos de
acceso. También ayuda a incrementar la modularidad de un programa.
Una de las principales ventajas del uso de segmentación consiste en permitir que cada uno de los segmentos
tenga un distinto juego de permisos para el proceso en cuestión. De esta forma se puede evitar que un error en
la programación resulte en que datos proporcionados por el usuario o por el entorno, modifiquen el código
que está siendo ejecutado. La segmentación también permite distinguir niveles de acceso a la memoria.
Hay muchos escenarios en que diferentes procesos pueden beneficiarse de compartir áreas de su memoria.
Uno de ellos es como mecanismo de comunicación entre procesos, en que dos o más procesos pueden
intercambiar estructuras de datos complejas sin incurrir en el costo de copiado que implicaría copiarlas por
medio del sistema operativo. Otro caso, es el de compartir código. Si un mismo programa es ejecutado varias
veces y dicho programa no emplea mecanismos de código auto-modificable, no tiene sentido que las páginas
en que se representa cada una de dichas instancias ocupe un marco independiente — el sistema operativo
puede asignar a páginas de diversos procesos el mismo conjunto de marcos, con lo cual puede aumentar la
capacidad percibida de memoria.
Suponga que posee un rango de memoria que va de 70000h hasta 7FFFFh el cual será administrado en modo
real. Divídalo en 3 segmentos, uno de código de 800 bytes, uno de datos de 692bytes y uno de pila de 80
bytes.
Los segmentos pueden empezar donde queramos, en este ejemplo los vamos a poneruno después del otro.
Segmento de código:
El tamaño del segmento lo pasamos a hexadecimal pero primero le restamos uno paratomar en cuenta la
primera posición de memoria.Tamaño del segmento en hexa: 800-1 = 799 -> 31Fh
La posición del segmento tiene que ser múltiplo de 16. O sea 10h en hexadecimal.
Para el segmento de código sólo podemos usar el IP como registro de desplazamiento. Los registros de
desplazamiento siempre toman valores desde cero hasta el tamaño del segmento.
IP = (0000h, 031Fh)
Los rangos de memoria que direccionan los registros de desplazamiento son
IP = (70000h, 7031Fh)
BIBLIOGRAFÍA
https://es.wikipedia.org/wiki/Segmentaci%C3%B3n_de_memoria
http://gmpri.blogspot.com/p/fragmentacion.html
https://www.dc.fi.udc.es/~so-grado/SO-Memoria.pdf
https://www.fing.edu.uy/tecnoinf/paysandu/cursos/2do/so/material/2016/teo/8-SO-Teo-
AdministracionMemoria.pdf
https://sisoperativoutp2587.wordpress.com/2016/08/09/manejo-de-la-memoria-memoria-virtual-
y-paginacion/
https://es.scribd.com/doc/55103024/Ejemplo-Segmentacion-de-Memoria
https://es.slideshare.net/FreddyPatricioAjilaZ/gestin-de-memoria-40543289