Este artículo profundiza en el sistema de gestión de memoria de DOS, un aspecto crucial pero a menudo mal comprendido del sistema operativo. Inicialmente, DOS (versión 1.x) carecía de gestión de memoria explícita, diseñado para máquinas con poca RAM (64KB o menos). Sin embargo, con la introducción de la IBM PC/XT y su mayor capacidad de memoria (128KB estándar, 256KB disponibles), DOS 2.0 incorporó funciones de gestión de memoria para aprovechar este nuevo hardware.
Las funciones clave introducidas en DOS 2.0 son ALLOC (asignación), DEALLOC (liberación) y SETBLOCK (redimensionamiento). El sistema funciona con una estructura de 'arena de memoria' que comienza como un bloque contiguo y se subdivide a través de asignaciones. Cada bloque de memoria está precedido por un 'MCB' (Memory Control Block), una especie de encabezado que contiene información sobre el bloque, como su tamaño y propietario. Es importante destacar que DOS gestiona la memoria en unidades de párrafos (16 bytes), debido a la arquitectura segmentada del procesador 8086. Esto permite el uso de direcciones de 16 bits y evita limitaciones de tamaño de bloque.
El proceso de asignación y liberación de memoria puede fragmentar la arena, por lo que DOS implementa una estrategia de 'coalescencia' para combinar bloques libres adyacentes. Esta coalescencia no se realiza durante la liberación (DEALLOC), sino principalmente durante el redimensionamiento (SETBLOCK) y, crucialmente, durante la asignación (ALLOC), que recorre toda la cadena de MCBs para encontrar el bloque más grande disponible y combinar bloques libres. Un truco común en la programación de DOS era usar ALLOC para determinar el tamaño máximo de memoria disponible, asignando primero FFFFh párrafos (el máximo posible) y luego asignando el tamaño real reportado por el error. La función SETBLOCK es similar a realloc() en C, pero sin mover el bloque asignado.
Las limitaciones incluyen la dependencia de la arquitectura segmentada, la gestión en párrafos y la falta de una coalescencia inmediata durante la liberación. Alternativas, en sistemas operativos más modernos, incluyen gestores de memoria más sofisticados con técnicas de coalescencia más agresivas y protección de memoria más robusta. Un punto importante a tener en cuenta es que la corrupción de memoria puede llevar a errores irreparables, ya que el sistema no puede confiar en la integridad de los MCBs.
