Gestión de memoria en el sistema operativo

El término Memoria se puede definir como una colección de datos en un formato específico. Se utiliza para almacenar instrucciones y datos procesados. La memoria comprende una gran array o grupo de palabras o bytes, cada uno con su propia ubicación. El motivo principal de un sistema informático es ejecutar programas. Estos programas, junto con la información a la que acceden, deben estar en la memoria principal durante la ejecución. La CPU obtiene instrucciones de la memoria de acuerdo con el valor del contador del programa. 

Para lograr un grado de multiprogramación y una utilización adecuada de la memoria, la gestión de la memoria es importante. Existen muchos métodos de administración de memoria, que reflejan varios enfoques, y la efectividad de cada algoritmo depende de la situación. 

Aquí, cubriremos los siguientes temas de administración de memoria:                                          

  • ¿Qué es la memoria principal?
  • ¿Qué es la gestión de memoria?
  • Por qué se requiere la gestión de memoria
  • Espacio de direcciones lógicas y espacio de direcciones físicas
  • Carga estática y dinámica
  • Enlace estático y dinámico
  • Intercambio
  • Asignación de memoria contigua
    • Asignación de memoria
      • primer ajuste
      • Mejor ajuste
      • peor ajuste
    • Fragmentación
      • Fragmentación interna
      • Fragmentación externa
    • Paginación

Ahora, antes de comenzar la administración de memoria, infórmenos sobre qué es la memoria principal.

¿Qué es la memoria principal?

La memoria principal es fundamental para el funcionamiento de una computadora moderna. La memoria principal es una gran variedad de palabras o bytes, que varían en tamaño desde cientos de miles hasta miles de millones. La memoria principal es un depósito de información rápidamente disponible compartida por la CPU y los dispositivos de E/S. La memoria principal es el lugar donde se guardan los programas y la información cuando el procesador los utiliza de manera efectiva. La memoria principal está asociada con el procesador, por lo que mover instrucciones e información dentro y fuera del procesador es extremadamente rápido. La memoria principal también se conoce como RAM (memoria de acceso aleatorio). Esta memoria es una memoria volátil. La RAM perdió sus datos cuando se produjo un corte de energía.

Figura 1: jerarquía de memoria

 

¿Qué es la gestión de memoria?

En una computadora multiprogramadora, el sistema operativo reside en una parte de la memoria y el resto es utilizado por múltiples procesos. La tarea de subdividir la memoria entre diferentes procesos se denomina gestión de memoria. La administración de memoria es un método en el sistema operativo para administrar operaciones entre la memoria principal y el disco durante la ejecución del proceso. El objetivo principal de la gestión de la memoria es lograr una utilización eficiente de la memoria.  

Por qué se requiere la gestión de memoria:

  • Asignar y desasignar memoria antes y después de la ejecución del proceso.
  • Para realizar un seguimiento del espacio de memoria utilizado por los procesos.
  • Para minimizar los problemas de fragmentación.
  • A la correcta utilización de la memoria principal.
  • Para mantener la integridad de los datos durante la ejecución del proceso.

Ahora estamos discutiendo el concepto de espacio de direcciones lógicas y espacio de direcciones físicas: 

Espacio de direcciones lógico y físico:

Espacio de direcciones lógicas: una dirección generada por la CPU se conoce como «Dirección lógica». También se conoce como dirección virtual. El espacio de direcciones lógicas se puede definir como el tamaño del proceso. Se puede cambiar una dirección lógica.

Espacio de direcciones físicas: una dirección vista por la unidad de memoria (es decir, la cargada en el registro de direcciones de memoria de la memoria) se conoce comúnmente como «Dirección física». Una dirección física también se conoce como dirección real. El conjunto de todas las direcciones físicas correspondientes a estas direcciones lógicas se conoce como espacio de direcciones físicas. MMU calcula una dirección física. El mapeo en tiempo de ejecución de direcciones virtuales a físicas se realiza mediante una Unidad de administración de memoria (MMU) del dispositivo de hardware. La dirección física siempre permanece constante.

Carga estática y dinámica:

La carga de un proceso en la memoria principal se realiza mediante un cargador. Hay dos tipos diferentes de carga:

  • Carga estática : – cargar todo el programa en una dirección fija. Requiere más espacio de memoria.
  • Carga dinámica : todo el programa y todos los datos de un proceso deben estar en la memoria física para que se ejecute el proceso. Entonces, el tamaño de un proceso está limitado al tamaño de la memoria física. Para obtener una utilización adecuada de la memoria, se utiliza la carga dinámica. En la carga dinámica, una rutina no se carga hasta que se la llama. Todas las rutinas residen en el disco en un formato de carga reubicable. Una de las ventajas de la carga dinámica es que las rutinas no utilizadas nunca se cargan. Esta carga es útil cuando se necesita una gran cantidad de código para manejarlo de manera eficiente.

 Enlace estático y dinámico:

Para realizar una tarea de enlace se utiliza un enlazador. Un enlazador es un programa que toma uno o más archivos de objetos generados por un compilador y los combina en un solo archivo ejecutable.

  • Enlace estático: en el enlace estático, el enlazador combina todos los módulos de programa necesarios en un solo programa ejecutable. Por lo tanto, no hay dependencia del tiempo de ejecución. Algunos sistemas operativos solo admiten enlaces estáticos, en los que las bibliotecas de idiomas del sistema se tratan como cualquier otro módulo de objeto.
  • Vinculación dinámica: el concepto básico de la vinculación dinámica es similar a la carga dinámica. En el enlace dinámico, se incluye «Stub» para cada referencia de rutina de biblioteca apropiada. Un stub es una pequeña pieza de código. Cuando se ejecuta el stub, comprueba si la rutina necesaria ya está en la memoria o no. Si no está disponible, el programa carga la rutina en la memoria.

 

Intercambio:

han residido en el despliegue terminando el trabajo de mayor prioridad, el

La memoria principal debe obligar tanto al sistema operativo como a los diferentes procesos del cliente. Por lo tanto, la asignación de memoria se convierte en una tarea importante en el sistema operativo. La memoria generalmente se divide en dos particiones: una para el sistema operativo residente y otra para los procesos del usuario. Normalmente necesitamos que varios procesos de usuario residan en la memoria simultáneamente. Por lo tanto, debemos considerar cómo asignar la memoria disponible a los procesos que están en la cola de entrada a la espera de ser llevados a la memoria. En la asignación de memoria adyacente, cada proceso está contenido en un solo segmento contiguo de memoria.  

Asignación de memoria:

Para obtener una utilización adecuada de la memoria, la asignación de memoria debe asignarse de manera eficiente. Uno de los métodos más simples para asignar memoria es dividir la memoria en varias particiones de tamaño fijo y cada partición contiene exactamente un proceso. Así, el grado de multiprogramación se obtiene por el número de particiones. 

Asignación de particiones múltiples : en este método, se selecciona un proceso de la cola de entrada y se carga en la partición libre. Cuando finaliza el proceso, la partición queda disponible para otros procesos. 

Asignación de partición fija: en este método, el sistema operativo mantiene una tabla que indica qué partes de la memoria están disponibles y cuáles están ocupadas por procesos. Inicialmente, toda la memoria está disponible para los procesos del usuario y se considera un gran bloque de memoria disponible. Esta memoria disponible se conoce como “Agujero”. Cuando llega el proceso y necesita memoria, buscamos un agujero que sea lo suficientemente grande para almacenar este proceso. Si se cumple el requisito, asignamos memoria para procesar, de lo contrario, mantenemos el resto disponible para satisfacer futuras requests. Mientras se asigna una memoria, a veces ocurren problemas de asignación de almacenamiento dinámico, que se refieren a cómo satisfacer una solicitud de tamaño n de una lista de huecos libres. Hay algunas soluciones a este problema:

Primer ajuste: – 

En el primer ajuste, el primer agujero libre disponible cumple con el requisito del proceso asignado. 

Aquí, en este diagrama, el bloque de memoria de 40 KB es el primer espacio libre disponible que puede almacenar el proceso A (tamaño de 25 KB), porque los primeros dos bloques no tenían suficiente espacio de memoria.

 Mejor ajuste:-

En el mejor ajuste, asigne el orificio más pequeño que sea lo suficientemente grande para procesar los requisitos. Para esto, buscamos en toda la lista, a menos que la lista esté ordenada por tamaño. 

Aquí, en este ejemplo, primero, recorremos la lista completa y encontramos que el último agujero de 25 KB es el mejor agujero adecuado para el Proceso A (tamaño 25 KB).

En este método, la utilización de la memoria es máxima en comparación con otras técnicas de asignación de memoria.

Peor ajuste: en el peor ajuste, asigne el agujero más grande disponible para procesar. Este método produce el agujero sobrante más grande. 

Aquí, en este ejemplo, el Proceso A (Tamaño 25 KB) se asigna al bloque de memoria más grande disponible, que es de 60 KB. La utilización ineficiente de la memoria es un problema importante en el peor ajuste.

Fragmentación:

Una fragmentación se define como cuando el proceso se carga y se elimina después de la ejecución de la memoria, crea un pequeño agujero libre. Estos agujeros no se pueden asignar a nuevos procesos porque los agujeros no se combinan o no cumplen con el requisito de memoria del proceso. Para lograr un grado de multiprogramación, debemos reducir el desperdicio de memoria o el problema de la fragmentación. En sistema operativo dos tipos de fragmentación:

Fragmentación interna: 

La fragmentación interna ocurre cuando los bloques de memoria se asignan al proceso más que el tamaño solicitado. Debido a esto, queda algo de espacio no utilizado y crea un problema de fragmentación interna.

 Ejemplo: supongamos que se usa una partición fija para la asignación de memoria y el tamaño diferente del bloque de 3 MB, 6 MB y 7 MB de espacio en la memoria. Ahora viene un nuevo proceso p4 de tamaño 2MB y demanda el bloque de memoria. Obtiene un bloque de memoria de 3 MB, pero 1 MB de memoria de bloque es un desperdicio y no se puede asignar a otros procesos también. Esto se llama fragmentación interna.

Fragmentación externa:

En la fragmentación externa, tenemos un bloque de memoria libre, pero no podemos asignarlo al proceso porque los bloques no son contiguos.

Ejemplo: Supongamos (considere el ejemplo anterior) que tres procesos p1, p2, p3 vienen con un tamaño de 2 MB, 4 MB y 7 MB respectivamente. Ahora obtienen bloques de memoria de tamaño 3 MB, 6 MB y 7 MB asignados respectivamente. Después de asignar el proceso p1 y p2, quedaron 1 MB y 2 MB. Supongamos que llega un nuevo proceso p4 y exige un bloque de memoria de 3 MB, que está disponible, pero no podemos asignarlo porque el espacio de memoria libre no es contiguo. Esto se llama fragmentación externa.

Tanto los sistemas de primer ajuste como los de mejor ajuste para la asignación de memoria afectados por la fragmentación externa. Para superar el problema de la fragmentación externa se utiliza la compactación. En la técnica de compactación, todo el espacio de memoria libre se combina y forma un gran bloque. Entonces, este espacio puede ser utilizado por otros procesos de manera efectiva.

Otra posible solución a la fragmentación externa es permitir que el espacio de direcciones lógicas de los procesos no sea contiguo, permitiendo así que se asigne memoria física a un proceso siempre que esté disponible.

 Paginación:

La paginación es un esquema de administración de memoria que elimina la necesidad de una asignación contigua de memoria física. Este esquema permite que el espacio de direcciones físicas de un proceso no sea contiguo.

  • Dirección lógica o dirección virtual (representada en bits): una dirección generada por la CPU
  • Espacio de direcciones lógicas o espacio de direcciones virtuales (representado en palabras o bytes): el conjunto de todas las direcciones lógicas generadas por un programa
  • Dirección física (representada en bits): una dirección realmente disponible en una unidad de memoria
  • Espacio de direcciones físicas (representado en palabras o bytes): el conjunto de todas las direcciones físicas correspondientes a las direcciones lógicas

Ejemplo:

  • Si Dirección lógica = 31 bits, entonces Espacio de direcciones lógicas = 2 31 palabras = 2 G palabras (1 G = 2 30 )
  • Si Espacio de direcciones lógicas = 128 M palabras = 2 7 * 2 20 palabras, entonces Dirección lógica = log 2 2 27 = 27 bits
  • Si Dirección física = 22 bits, entonces Espacio de direcciones físicas = 2 22 palabras = 4 M palabras (1 M = 2 20 )
  • Si Espacio de direcciones físicas = 16 M palabras = 2 4 * 2 20 palabras, entonces Dirección física = log 2 2 24 = 24 bits

El mapeo de la dirección virtual a la física lo realiza la unidad de administración de memoria (MMU), que es un dispositivo de hardware y este mapeo se conoce como técnica de paginación.

  • El espacio físico de direcciones se divide conceptualmente en varios bloques de tamaño fijo, llamados marcos .
  • El espacio de direcciones lógicas también se divide en bloques de tamaño fijo, llamados páginas .
  • Tamaño de página = Tamaño de marco

Consideremos un ejemplo:

  • Dirección física = 12 bits, luego Espacio de direcciones físicas = 4 K palabras
  • Dirección lógica = 13 bits, luego Espacio de direcciones lógicas = 8 K palabras
  • Tamaño de página = tamaño de marco = 1 K palabras (suposición)

La dirección generada por la CPU se divide en

  • Número de página (p): número de bits necesarios para representar las páginas en el espacio de direcciones lógicas o número de página
  • Desplazamiento de página (d): Número de bits necesarios para representar una palabra en particular en una página o tamaño de página del espacio de direcciones lógicas o número de palabra de una página o desplazamiento de página.

La dirección física se divide en

  • Número de trama (f): número de bits necesarios para representar la trama del espacio de direcciones físicas o la trama del número de trama
  • Desplazamiento de trama (d): número de bits necesarios para representar una palabra en particular en una trama o tamaño de trama del espacio de direcciones físicas o número de palabra de una trama o desplazamiento de trama.

La implementación de hardware de la tabla de páginas se puede realizar utilizando registros dedicados. Pero el uso de registro para la tabla de páginas es satisfactorio solo si la tabla de páginas es pequeña. Si la tabla de páginas contiene una gran cantidad de entradas, entonces podemos usar TLB (búfer de búsqueda de traducción), un caché de hardware especial, pequeño y de búsqueda rápida.

  • La TLB es una memoria asociativa de alta velocidad.
  • Cada entrada en TLB consta de dos partes: una etiqueta y un valor.
  • la

Main memory access time = m
If page table are kept in main memory,
Effective access time = m(for page table) + m(for particular page in page table)

save2

Para obtener más detalles, debe leer Paginación en el sistema operativo

Publicación traducida automáticamente

Artículo escrito por varshachoudhary y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *