Resumen Paginación y segmentación
de la memoria
Los
sistemas operativos con el pasar de los años han buscado ser más eficiente, es
por eso que es vital que el uso de la memoria principal como lo es la RAM sea
de la manera más inteligente posible,
para que los sistemas operativos sean más eficientes.
La
segmentación es un proceso de dividir el programa en unidades lógicas, como subsunciones,
arreglos, variables, etc. consiguiendo tener procesos divididos en trozos para
que sea fácil de acceder a cada uno de los procesos que este conlleva a su
ejecución. La paginación divide así mismo así mismo el programa en trozos
pequeños pero sin mirar lo que coge.
Conocer conceptos sobre la paginación y segmentación
de los sistemas operativos.
3. MARCO
TEÓRICO
3.1. SISTEMA DE PAGINACIÓN /
SEGMENTACIÓN
Tanto la Segmentación como la paginación ofrecen
significativas ventajas, algunos sistemas (Multics y la Serie 370 de IBM)
combinan ambas técnicas en donde los segmentos tienen un tamaño múltiplo de página.
Este método utiliza Segmentación y Paginación tal y como su nombre lo indica,
el proceso es el siguiente, Se hace la solicitud de acceso por medio de una
dirección “V” la cual contiene los campos Segmento, Pagina y Desplazamiento,
Con el campo Segmento, lo que se trata es de acceso a una tabla de segmentos,
cada campo de dicha tabla apunta directamente a la tabla de páginas asignada
para ese segmento conteniendo una dirección que será sumada a una dirección en
la Tabla Asociativa para por fin formar una dirección real con el
desplazamiento de “V”. (Quintuña,
et al., 2010)
3.2. PAGINACIÓN
Es una técnica de manejo de memoria, en la cual el
espacio de memoria se divide en secciones físicas de igual tamaño, denominadas
marcos de página los programas se dividen en unidades lógicas, denominadas
páginas, que tienen el mismo tamaño que los marcos de páginas de esta forma, se
puede cargar una página de información en cualquier marco de página. (Quintuña,
et al., 2010)
Las páginas sirven como unidad de almacenamiento de
información y de transferencia entre memoria principal y memoria auxiliar o
secundaria cada marco se identifica por la dirección de marco, que está en la
posición física de la primera palabra en el marco de página. (Quintuña, et al., 2010)
Para tener el control de las páginas, debe
mantenerse una tabla en memoria que se denomina tabla de Mapas de Pagina (PMT)
para cada uno de los procesos hasta ahora, los métodos que hemos visto de la
administración de la memoria principal, nos han dejado con un problema:
fragmentación, (huecos en la memoria que no pueden usarse debido a lo pequeño
de su espacio) lo que nos provoca un desperdicio de memoria principal. (Quintuña,
et al., 2010)
Una posible solución para la fragmentación externa
es permitir que espacio de direcciones lógicas lleve a cabo un proceso en
direcciones no contiguas, así permitiendo al proceso ubicarse en cualquier
espacio de memoria física que esté disponible, aunque esté dividida. (Quintuña,
et al., 2010)
Figura 1.
Esquema de traducciones direcciones.
El almacenamiento a un sólo nivel puede
llevarse a cabo mediante una técnica llamada paginación, según la cual el
espacio de direcciones virtuales se divide en páginas del mismo tamaño, la
memoria principal se divide también en marcos o páginas físicas del mismo
tamaño, estos marcos son compartidos entre los distintos procesos que haya en
el sistema, de forma que en cualquier momento un proceso dado tendrá unas
cuantas páginas residentes en la memoria principal (sus páginas activas) y el
resto en la memoria secundaria (sus páginas inactivas). (Quintuña,
et al., 2010)
3.2.1. CARACTERÍSTICAS DE LA PAGINACIÓN
• El espacio de direcciones lógico de un proceso puede ser no contiguo.
• Se divide la memoria física en bloques de tamaño fijo llamados marcos
(frames).
• Se divide la memoria en bloques de tamaño llamados páginas.
• Se mantiene información en los marcos libres.
• Para correr un programa de n páginas de tamaño, se necesitan encontrar
n marcos y cargar el programa.
• Se establece una tabla de páginas para trasladar las direcciones
lógicas a físicas.
• Se produce fragmentación interna. (Quintuña, et al., 2010)
3.2.2. VENTAJAS DE LA PAGINACIÓN
1. Es posible comenzar a ejecutar un programa,
cargando solo una parte del mismo en memoria, y el resto se cargara bajo la
solicitud.
2. No es necesario que las paginas estén contiguas
en memoria, por lo que no se necesitan procesos de compactación cuando existen
marcos de páginas libres dispersos en la memoria. (Quintuña, et al., 2010)
3. Es fácil controlar todas las páginas, ya que
tienen el mismo tamaño.
4. El mecanismo de traducción de direcciones (DAT)
permite separar los conceptos de espacio de direcciones y espacios de memoria.
5. Se libera al programador de la restricción de
programar para un tamaño físico de memoria, con lo que s e aumenta su
productividad.
6. Al no necesitarse cargar un programa completo en
memoria para su ejecución, se puede aumentar el número de programas
multiprogramándose. (Quintuña, et al.,
2010)
3.2.3. DESVENTAJAS DE LA PAGINACIÓN
1. El costo de hardware y software se incrementa,
por la nueva información que debe manejarse y el mecanismo de traducción de
direcciones necesario. Se consume mucho más recursos de memoria, tiempo en el
CPU para su implantación. (Quintuña, et
al., 2010)
2. Se deben reservar áreas de memoria para las PMT
de los procesos. Al no ser fija el tamaño de estas, se crea un problema
semejante al de los programas (Quintuña, et
al., 2010)
3. Aparece el problema de fragmentación interna.
Así, si se requieren 5K para un programa, pero las paginas son de 4K, deberán
asignárseles 2 páginas (8k), con lo que quedan 3K sin utilizar. La suma de los
espacios libres dejados de esta forma puede ser mayor que el de varias páginas,
pero no podrá ser utilizado. Debe asignarse un tamaño promedio a las páginas,
evitando que si son muy pequeñas, se necesiten TABLAS BMT y PMT muy grandes, y
si son muy grandes, se incremente el grado de fragmentación interna. (Quintuña,
et al., 2010)
3.3. SEGMENTACIÓN
Es un esquema de manejo de memoria mediante el cual
la estructura del programa refleja su división lógica; llevándose a cabo una
agrupación lógica de la información en bloques de tamaño variable denominados
segmentos, cada uno de ellos tienen información lógica del programa: subrutina,
arreglo, etc. Luego, cada espacio de direcciones de programa consiste de una
colección de segmentos, que generalmente reflejan la división lógica del
programa. (Quintuña, et al., 2010)
Modularidad de programas: cada rutina del programa
puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al
resto del programa.
Estructuras de datos de largo variable: ejm. Stack,
donde cada estructura tiene su propio tamaño y este puede variar.
Protección: se puede proteger los módulos del
segmento contra accesos no autorizados. Quintuña, et al., 2010)
Comparación: dos o más procesos pueden ser un mismo
segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.
Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. ( Quintuña, et al., 2010)
Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. ( Quintuña, et al., 2010)
Dado que en cada proceso se manejan direcciones
lógicas, el sistema operativo debe obtener una dirección lógica el sistema
operativo debe también asegurarse de que cada dirección lógica esté dentro del
rango de direcciones empleado por el proceso para esto el sistema operativo
implementa la tabla de segmentos (Quintuña, et
al., 2010)
Figura 2. Segmentación
3.3.1. ORGANIZACIÓN
En el estudio de la
segmentación simple, se llegó a la conclusión de que cada proceso tiene su
propia tabla de segmento y que, cuando todos los segmentos se encuentran en la
memoria principal, la tabla de segmentos del proceso se crea y se carga en la
memoria. Cada entrada de la tabla contiene la dirección de comienzo del
segmento correspondiente de la memoria principal, así como su longitud.
La misma estructura se
necesitará al hablar de un esquema de memoria virtual basado en la segmentación
donde las entradas de la tabla de segmentos pasan a ser más complejas. Puesto
que sólo algunos de los segmentos de un proceso estarán en la memoria
principal, se necesita un bit en cada entrada de la tabla de segmentos para
indicar si el segmento correspondiente está presente en la memoria principal.
Si el bit indica que el segmento está en la memoria, la entrada incluye también
la dirección de comienzo y la longitud del segmento. (Boscan, et al., 2011)
3.3.2. PROTECCIÓN
Y COMPARTIMIENTO
Además la segmentación se
presta a la implementación de políticas de protección, puesto que cada entrada
de la tabla de segmentos incluye la longitud, además de la dirección base, un
programa no podrá acceder por descuido a una posición de la memoria principal
más allá de los límites de un segmento.
Para conseguir la
compartición, es posible que un segmento se referencia desde las tablas de
segmentos de más de un proceso. Este mismo mecanismo es válido en un sistema de
paginación. (Boscan, et
al., 2011)
.
3.3.3. HARDWARE
DE SEGMENTACIÓN
Una dirección lógica consta de dos partes: un número de segmentos (s), y un desplazamiento de dicho segmento, (d). El número de segmentos se utiliza
como un índice en la tabla de segmentos. El desplazamiento (d) de la dirección lógica debe estar
entre 0 y el límite del segmento. De no ser así, se ocasiona una trampa al sistema operativo (intento
de direccionamiento lógico más allá del final del segmento). Si este
desplazamiento es legal, se agrega a la base del segmento para producir la
dirección en la memoria física del byte deseado. (Boscan,
et al., 2011)
3.3.3. CON PAGINACIÓN: MULTICS
Si
los segmentos son extensos, puede ser inconveniente (o incluso imposible)
mantenerlos completos en memoria principal. Esto nos lleva a la idea de
paginarlos, de manera que sólo las páginas que realmente se necesiten tengan
que estar presentes. Varios sistemas importantes han soportado segmentos de
páginas. En esta sección describiremos el primero: MULTICS. En la siguiente
analizaremos uno más reciente: el Intel Pentium. . (Tanenbaum,
2009)
MULTICS
operaba en las máquinas Honeywell 6000 y sus descendientes; proveía a cada
programa con una memoria virtual de hasta 218 segmentos (más de 250,000), cada
uno de los cuales podría ser de hasta 65,536 palabras (36 bits) de longitud.
Para implementar esto, los diseñadores de MULTICS optaron por considerar a cada
segmento como una memoria virtual y la paginaron, combinando las ventajas de la
paginación (tamaño de página uniforme y no tener que mantener todo el segmento
en la memoria, si sólo se está utilizando parte de él) con las ventajas de la
segmentación (facilidad de programación, modularidad, protección,
compartición).
Cada
programa de MULTICS tiene una tabla de segmentos, con un descriptor por
segmento. . (Tanenbaum, 2009)
Como
hay en potencia más de un cuarto de millón de entradas en la tabla, la tabla de
segmentos es en sí un segmento y se página. Un descriptor de segmentos contiene
una indicación acerca de si el segmento está en memoria principal o no. Si
cualquier parte del segmento está en memoria, se considera que el segmento está
en memoria y su tabla de páginas estará en memoria. Si el segmento está en
memoria, su descriptor contiene un apuntador de 18 bits a su tabla de página.
Como las direcciones físicas son de 24 bits y las páginas se alinean en límites
de 64 bytes (implicando que los 6 bits de menor orden de las direcciones de
página son 000000), sólo se necesitan 18 bits en el descriptor para almacenar
una dirección de la tabla de páginas. El descriptor también contiene el tamaño
del segmento, los bits de protección y unos cuantos elementos más. ilustra un descriptor de segmento de MULTICS. La dirección del segmento
en la memoria secundaria no está en el descriptor de segmentos, sino en otra tabla
utilizada por el manejador de fallos de segmento. Cada segmento es un espacio
de direcciones virtual ordinario y se página de la misma forma que la memoria
paginada no segmentada descrita anteriormente en este capítulo. El tamaño
normal de página es de 1024 palabras (aunque unos cuantos segmentos utilizados
por MULTICS en sí no están paginados o están paginados en unidades de 64
palabras para ahorrar memoria física).
Una
dirección en MULTICS consiste en dos partes: el segmento y la dirección dentro
del segmento. . (Tanenbaum, 2009)
La
dirección dentro del segmento se divide aún más en un número de página y en una
palabra dentro de la página. Cuando ocurre una referencia memoria, se lleva a
cabo el siguiente algoritmo. (Tanenbaum, 2009)
Figura
3. La memoria virtual Multicast
3.3.4. VENTAJAS DE LA SEGMENTACIÓN
El programador puede conocer las unidades lógicas
de su programa, dándoles un tratamiento particular.
• Es posible compilar módulos separados como
segmentos el enlace entre los segmentos puede suponer hasta tanto se haga una
referencia entre segmentos.
• Debido a que es posible separar los módulos se
hace más fácil la modificación de los mismos. Cambios dentro de un módulo no afecta
al resto de los módulos. (Quintuña, et al.,
2010)
• Es fácil el compartir segmentos.
• Es posible que los segmentos crezcan
dinámicamente según las necesidades del programa en ejecución.
• Existe la posibilidad de definir segmentos que aún
no existan. Así, no se asignara memoria, sino a partir del momento que sea
necesario hacer usos del segmento. Un ejemplo de esto, serían los arreglos cuya
dimensión no se conoce hasta tanto no se comienza a ejecutar el programa. (Quintuña,
et al., 2010)
3.3.5. DESVENTAJAS DE LA SEGMENTACIÓN
• Hay un incremento en los costos de hardware y de
software para llevar a cabo la implantación, así como un mayor consumo de
recursos: memoria, tiempo de CPU, etc.
• Debido a que los segmentos tienen un tamaño
variable se pueden presentar problemas de fragmentación externas, lo que puede
ameritar un plan de reubicación de segmentos en memoria principal. (Quintuña, et al., 2010)
• Se complica el mane-jo de memoria virtual, ya que
los discos almacenan la información en bloques de tamaños fijos, mientras los
segmentos son de tamaño variable. Esto hace necesaria la existencia de
mecanismos más costosos que los existentes para paginación.
• Al permitir que los segmentos varíen de tamaño,
puede ser necesarios planes de reubicación a nivel de los discos, si los
segmentos son devueltos a dicho dispositivo; lo que conlleva a nuevos costos. (Quintuña,
et al., 2010)
• No se puede garantizar, que al salir un segmento
de la memoria, este pueda ser traído fácilmente de nuevo, ya que será necesario
encontrar nuevamente un área de memoria libre ajustada a su tamaño.
• La compartición de segmentos permite ahorrar
memoria, pero requiere de mecanismos adicionales da hardware y software. (Quintuña,
et al., 2010)
4.
CONCLUSIÓN
En la memoria RAM o memoria principal son
ejecutados todos los programas y procesos de un ordenador y es el espacio real
que existe en memoria para que se ejecuten los procesos que estos conllevan.
• La paginación y la segmentación es una técnica de
gestión de memoria que divide un programa cuando esta ejecución en segmentos
para así acceder a las tareas necesarias cuando este lo requiera sin tener que
mirar todo el proceso entero.
5. BIBLIOGRAFÍA
Boscan,
J. Morrillo, D. Carrasco, G. 2011. Paginación y segmentación. (En Línea).
Consultado el 30 de Enero. 2016. Formato HTML. Disponible en:
http://es.slideshare.net/menes21/paginacion-y-segmentacion-de-memoria
Tanenbaum,
A. 2009. Sistemas Operativos Modernos. 3 ed. México. D. F. PEARSON EDUCACIÓN.
p. 275-276
Quintuña, C. Mullo, X. Trujillo, M. 2010. Sistemas
de segmentación y paginación. (En Línea). Consultado el 30 de Enero. 2016.
Formato HTML. Disponible en:
http://arqordenadores.wiki-site.com/index.php/Paginaci%C3%B3n_y_Segmentaci%C3%B3n