Capítulo 5: Gestión de la memoria principal
Gestión de memoria con particiones fijas
El administrador (o incluso un operador) divide la memoria en fragmentos antes del inicio de la ejecución de los programas. Cuando llega un nuevo proceso, el planificador lo ubica en la partición con el tamaño más adecuado y, cuando un proceso acaba, su partición queda libre para un nuevo uso.
Este método recibe también el nombre de Multiprogramación con un número fijo de tareas, o MFT (del inglés, Multitasking with a Fixed number of Tasks).
Era frecuente organizar la carga de trabajo según las particiones de memoria, creando una lista para cada una de ellas en función de su tamaño.
Otra opción es disponer de una cola única y elegir las tareas que se adapten a las particiones que quedan libres, aunque esto discrimina a las tareas con menos requisitos, porque tienden a desperdiciar espacio.
En este tipo de esquema surge el concepto de intercambio (en inglés, swapping), que consiste, básicamente en mover a memoria secundaria (normalmente disco), los procesos que se encuentran bloqueados en espera de un suceso. De esta forma, se puede dar cabida a nuevos procesos.
El módulo del sistema operativo que se encarga del intercambio se llama, precisamente, intercambiador y se encarga de elegir los procesos que deben moverse de memoria principal a secundaria y a la inversa. También administra el espacio reservado en la memoria secundaria para estos fines.
Relacionado con el concepto de intercambio se encuentra el concepto de reubicación que consiste, básicamente, en que un determinado proceso puede ejecutarse en diferentes particiones de memoria, no sólo en sucesivas ejecuciones, sino incluso durante la misma ejecución. De esta forma, cuando un programa haga referencia a una posición de memoria x, en realidad estará refiriéndose a una posición relativa al comienzo de la partición. Es decir, si la partición comienza en la dirección y, la posición exacta a la que hace referencia el programa sería la y + x.
Por consiguiente, podremos hablar de dos tipos de direcciones de memoria:
-
La dirección lógica o virtual, que es la dirección a la que hace referencia el programa (en la explicación anterior, la dirección x)
-
La dirección física, que es la dirección real a la que se accede (en la explicación anterior, la dirección y + x).
Para realizar estos cálculos a gran velocidad, el procesador dispondrá de un registro base que contiene la dirección de inicio de la partición que ocupa el proceso.
Además, es necesario establecer un mecanismo de protección para evitar que un proceso, por error o de forma intencionada, pueda acceder a posiciones de memoria que se encuentren más allá del espacio que tenga asignado. Para lograrlo, se implementa un registro límite que contiene la longitud de la partición que se está utilizando. De esta forma, las referencias de cada proceso se calculan añadiendo al registro base la dirección lógica y comprobando que no se excede el registro límite.
La dificultad en este esquema de memoria es obtener el equilibrio entre el tamaño de las particiones y el de los procesos que deben ubicarse en ellas. En este sentido, podemos encontrarnos con dos formas diferentes de desaprovechamiento:
-
Fragmentación interna: Ocurre cuando existen particiones grandes y la mayoría de los procesos no las ocuparán enteras. Es decir, el derroche de memoria se produce dentro de la asignación al proceso.
-
Fragmentación externa: Ocurre cuando hay particiones excesivamente pequeñas y es difícil encontrar procesos que quepan dentro. Es decir, el derroche se produce entre la memoria que no está asignada a ningún proceso.
Un ejemplo de este esquema lo representan los grandes ordenadores de IBM que incorporaban el sistema operativo OS/360.
La Gestión de memoria con particiones fijas tiene las ventajas de una implementación sencilla y que necesita poco software por parte del sistema operativo. Además, ofrece poca sobrecarga de procesamiento.
Sin embargo, el número de procesos que pueden estar activos es limitado. El resto deben encontrase Suspendidos (descargados a memoria secundaria). Además, los procesos más pequeños tienden a desperdiciar gran parte del tamaño de las particiones.