La gestión de la memoria es una de las funciones básicas del sistema operativo. Los sistemas operativos modernos permiten que cada proceso obtenga más memoria virtual que el tamaño total de la memoria real (física) en un sistema informático determinado. El objetivo principal de la administración de memoria es que al combinar una memoria grande pero lenta con una memoria pequeña pero de alta velocidad, para lograr el efecto de una memoria de alta velocidad más grande.
La separación entre la partición fija y la variable es ineficaz en términos de utilización de la memoria, ya que la partición fija resulta en interna, mientras que la fragmentación externa es dinámica. Una posible solución al problema de la fragmentación es permitir que el proceso no se escriba en un bloque de memoria continuo. El programa puede ser dispersado arbitrariamente en la memoria. En este caso, la memoria de trabajo se divide en bloques más pequeños de tamaño fijo llamados marcos. El espacio de direcciones lógicas del programa también se divide en bloques del mismo tamaño, llamados páginas. Cuando se ingresa un programa en la memoria, las páginas se escriben en marcos de memoria libre. Para facilitar la transferencia de programas desde un disco a una memoria de trabajo, el disco también se divide en marcos del mismo tamaño que los marcos de memoria. Por lo tanto, un marco del disco se escribe en un marco de la memoria de trabajo. El sistema de paginación funciona de la siguiente manera: cuando se acepta la ejecución del programa, se calcula su tamaño, que se expresa con el número de páginas requerido. Si hay una cantidad suficiente de cuadros libres, el proceso se registra en la página de memoria por página. Al mismo tiempo, el número de cuadros en que se escribe cada página se ingresa en la tabla de cuadros.
El programa de usuario y los datos asociados se pueden dividir en varios segmentos. Los segmentos de todos los programas no tienen que ser del mismo tamaño, aunque hay una longitud máxima de segmento. Al igual que con la paginación, la dirección lógica que utiliza la segmentación consta de dos partes, en este caso, el número de segmentos y dislocaciones dentro de ese segmento. Debido al uso de segmentos de diferentes tamaños, la segmentación es similar a la partición dinámica. En ausencia de un esquema de superposición o el uso de memoria virtual, se requiere que todos los segmentos del programa se carguen en la memoria para su ejecución. La diferencia en comparación con la partición dinámica es que la segmentación puede tomar más de una partición, y esa partición no tiene que ser adyacente. La segmentación resuelve el problema de la fragmentación interna, pero además de la partición dinámica, el problema de la fragmentación externa permanece. Sin embargo, debido a que el proceso se divide en varias partes más pequeñas, la fragmentación externa suele ser más pequeña. A diferencia de la paginación que es invisible para el programador, la segmentación suele ser visible y adecuada para organizar programas y datos. A los efectos de la programación modular, el programa o los datos se pueden dividir en varios segmentos más pequeños. El inconveniente de esta técnica es que el programador debe conocer las limitaciones del tamaño máximo del segmento. La siguiente conveniencia de usar segmentos de diferentes tamaños es que no hay una conexión prospectiva entre las direcciones lógicas y físicas. Similar a la paginación, la técnica de segmentación simple utiliza la tabla de segmentos para cada proceso y una lista de bloques disponibles en la memoria principal.
La paginación ofrece un espacio de direcciones virtual y físico, y un espacio de memoria secundaria en bloques (páginas) de igual longitud. Esto permite que el espacio de direcciones virtuales continuo se asigne al proceso de dispersión (no necesariamente distribuido continuamente) en el espacio de direcciones real y la memoria secundaria. Incluso la página, como término, se refiere a la memoria en lugar de a los objetos lógicos que son visibles en el nivel del programa. La segmentación ofrece un espacio de direcciones virtuales en bloques (segmentos) que corresponden directamente a objetos en el nivel del programa. Debido a esto, el segmento no tiene una longitud fija, por lo que incluso el tamaño del segmento se puede cambiar durante la ejecución del programa. La protección y la división son, por lo tanto, posibles a nivel de objeto, y hay procesos visibles donde se realiza la segmentación.
El desarrollador de la aplicación no es consciente de la paginación. Escribe programas como si la memoria fuera lineal, y el sistema operativo y el procesador están preocupados por su partición y conversión a direcciones virtuales. El programador en sistemas de segmentación, sin embargo, enumera dos partes de la dirección, segmento y página en sus programas. Todas las páginas son del mismo tamaño, mientras que los segmentos son diferentes. La segmentación tiene múltiples espacios de direcciones lineales, y la paginación solo uno. Los segmentos permiten la partición lógica y la protección de los componentes de la aplicación, y las páginas no.
La paginación, que es transparente para el programador, elimina la fragmentación externa y, por lo tanto, garantiza un uso eficiente de la memoria principal. Las piezas que se mueven dentro y fuera de la memoria principal son fijas y del mismo tamaño, por lo que es posible desarrollar algoritmos de administración de memoria sofisticados que exploten el comportamiento del programa. La segmentación es visible para el desarrollador y tiene la capacidad de administrar el crecimiento de la estructura de datos, la modularidad y el soporte para el intercambio y la protección.
Paginacion | Segmentación |
tamaño de páginas fijas | los segmentos no son fijos en tamaño |
invisible para el programador | visible para el programador |
un espacio de dirección lineal | múltiples espacios de direcciones lineales |
No permite la partición lógica y la protección de los componentes de la aplicación. | permite |