TEXTO-PLANO ===================================================================== Revista digital 04 | 02 --------------------------------------------------------------------- 02 | DOS, los micros, y su manejo de la memoria RAM EjecuTor --------------------------------------------------------------------- Para entender los temas de memoria que rodeaban al viejo y peludísimo DOS, necesitamos adentrarnos un poco en su historia. En 1977, cuando la empresa Intel (fabricante de microprocesadores) se abocaba a diseñar sus futuras CPU 8088 y 8086, sus ingenieros coincidieron en la escasa necesidad de contar con más 1 Megabytes (1024 Kbilobytes) de memoria RAM. Por entonces las minicomputadoras en uso tenían solo 64 KB de memoria, por lo que este cálculo especulativo parecía razonable. Modo Real vs. Modo Protegido El siguiente escalón del desarrollo de Intel fue el microprocesador 80286, de 1981. Para el mismo, los ingenieros habían planteado un nuevo modo de funcionamiento, con el que creían solventar el problema, pues permitía que esta CPU direccionara la memoria por encima del límite de diseño impuesto anteriormente de 1MB en total, a la vez que retenía compatibilidad con las dos CPUs anteriores. Junto a esto, permitía funcionar a más de un programa a la vez, de forma que cada programa estaba protegido de las acciones de los demás programas en ejecución. Este modo de operación fue denominado MODO PROTEGIDO. Para diferenciar esta nueva modalidad de las capacidades limitadas que tenían los viejos micros 8088 y 8086, se acuñó el término MODO REAL, con el que se designó retroactivamente a la modalidad de manejo limitada de los viejos 8088 y 8086. Los vaivenes de la historia nos llevan entonces al desarrollo y lanzamiento del producto "desangelado" de IBM: la PC. Esta debía ser una propuesta de microcómputo, una máquina de 16 bits que respondiese a las necesidades de los hobbistas, y de una nueva generación de negocios pequeños basados en software de aplicación de oficina. Situados en el mismo 1981 (con el 80286 aún en tenue proceso productivo, y con un valor desmedido), la PC se lanza con el más barato 8086, y captura el mercado y la imaginación de muchos merced de las primeras versiones del sistema operativo de Microsoft: el MS-DOS. Poco después de ocurrido el lanzamiento de la IBM PC, la compañía Lotus lanzó un programa privativo de planilla de cálculo que se volvió rompedor en el mercado de esta microcomputadora: el 1-2-3. Las modestas CPU de Intel terminarían entonces, como componentes fundamentales en los cuales se basaría la primera generación de microcomputadoras de 16 bits -especialmente la IBM PC original de 1981 y la IBM PC XT munida del 8088 de 4,77 Mhz de 1983 en adelante- que definirían las especificaciones del cómputo de negocios. Los usuarios más avanzados, y clientes de oficinas (aquellas compañías que compraban PC XT o sus clones sólo para correr Lotus 1-2-3) no tardaron en comprender que algunas de sus planillas más descomunales podían chocar de frente con el límite de 1 MB de memoria RAM que excedía los límites del microprocesador 8088 de la máquina. En 1984, IBM introdujo la IBM PC AT, basada por fin en el microprocesador 80286. El microprocesador de la AT era entre cuatro y ocho veces más rápido que el de la XT, y tenía la capacidad de acceder hasta 16 MB de memoria usando la nueva funcionalidad del MODO PROTEGIDO. Desafortunadamente, en pos de mantener compatibilidad con la base de PC y PC XTs ya instalada en el ámbito empresarial, Microsoft jamás mejoró al sistema operativo DOS para sacar ventaja de esta capacidad del 286, de modo que los programadores del mundo DOS nunca usaron las capacidades de sus 80286 al máximo. De hecho, la mayoría de las IBM PC AT vivieron y murieron sin jamás correr software de modo protegido. >En la práctica, los programadores no empezaron a utilizar en masa el nuevo modo protegido sino hasta el lanzamiento del microprocesador 80386 en 1986, cuando ya la PC y la línea de procesadores Intel estaba establecida con firmeza. Para 1986, Intel desarrolló una nueva generación de microprocesadores en la forma del 80386 y 80486, capaces ahora de direccionar hasta 4 gigabytes de memoria. Hasta la aparición de Windows 3.0 (1990), hubo poca cantidad de software capaz de correr en el modo protegido de la computadora. En lugar de ello, la mayoría de los usuarios empleaban sus máquinas como si fueran meramente PC XT rápidas. Aquellos usuarios que necesitaban más memoria que el 1er Megabyte original, tenían que recurrir bajo DOS a un esquema de memoria llamado MEMORIA EXPANDIDA, que fue creado colectivamente por los principales creadores del problema: Lotus, Intel y Microsoft. La posterior familia de microprocesadores de Intel, los Pentium (1993 en adelante, incluyen al Pentium, Pentium MMX, Pentium II, Pentium III y Pentium IV). También otras compañías fabricaron sus CPUs basados en el diseño y especificaciones como competencia directa, como AMD y Cyrix). Las CPUs basadas en Pentium podían direccionar más de 4 GB de memoria (dependiendo del sistema operativo y versión de CPU). En DOS la memoria RAM se clasifica en trees maneras: * 1 memoria convencional * 2 memoria expandida * 3 memoria extendida. Es útil entender las diferencias: Memoria Convencional Como se comentó, la generación de microcomputadoras que precedieron a la IBM PC y al DOS contaban -como mucho- con 64 KB de memoria RAM. El procesador Intel 8088 era capaz de usar hasta 1 MB (lo que por entonces significó un paso importante). De estos 1024 KB de RAM, el espacio entre el 1er KB y el 640avo KB de RAM se encontraban disponibles para el uso del DOS y los programas que corrían bajo este sistema operativo. Los 384 KB restantes por encima de éstos se reservaban para uso del sistema (controlador de disco, controlador de ROM, ROM de video, paginador de memoria expandida, RAM de video, etc). Esto no significaba que de los 640 KB fundamentales de memoria convencional del DOS, estuviesen disponible en su totalidad para el usuario: de entrada el mismo DOS se apropiaba de 1 KB para armar una tabla de registro de uso de memoria en sí, junto con algunos pocos KB más para destinarlos a Buffers de DOS y tablas de dispositivos, y una cantidad variable de KBs para controladores de dispositivos de hardware. >En la práctica, una PC con varios periféricos y utilidades podía terminar con menos de 500 KB ocupados de los 640 KB de memoria convencional, si no se hacía un uso cuidadoso. En DOS, las direcciones de memorias usaban una notación tipo segmento:offset, empleada para indicar la localización exacta donde debían almacenarse los datos o instrucciones del programa. Tales direcciones de memoria siempre se indicaban recurriendo a un sistema de número hexadecimal. Cada segmento tiene una longitud de 64 KB, si bien cada segmento arranca 16 bytes por encima del segmento colindante. La dirección de offset indica entonces cuantos bytes de la direccion se deben dejar desde el comienzo del segmento. Los programadores no tardaron en darse cuenta de que era posible "rascar" un bloque extra de memoria útil apropiando el último segmento posible del área de 1MB en la porción del segmento de la dirección de memoria. Al recurrir a este truquito, se lograban obtener entonces 64 KB anteriormente no disponibles (por debajo de los 16 KB que quedan debajo del límite de 1024avo KB, es decir, 1024 KB - 16 KB = el kilobyte offset 1008 o bien el byte offset 1.032.192, si los contamos desde el principio). Esto significaba que el microprocesador en modo real podía direccionar dicha cantidad de memoria. El área de memoria resultante de este "truquito" resultó casi inmediatamente colonizada por los diseñadores de redes de datos. Se dieron cuenta que esta zona de memoria era el "aguantadero perfecto" para colocar sus búffers de datos sin tener que expropiarle RAM a los programas en ejecución (que para este momento, ya empezaban a sentirse asfixiados). >A partir del lanzamiento de MS-DOS 5.0 en 1990, los usuarios pudieron recurrir a las direcciones de memoria superior no utilizada (aquella residente por encima de los 640KB y por debajo del 1024 KB) para ejecutar programas de DOS. Esto había estado anteriormente vedado desde el punto de vista del diseño del sistema operativo. Se lograba con programas incluídos denominados HIMEM.SYS y EMM386.EXE, encargados de habilitar este espacio. Se procedía ingresando los comandos LOADHIGH y DEVICEHIGH para colocar programas, controladores de dispositivos e incluso porciones del sistema operativo DOS propiamente dicho, en esta AREA DE MEMORIA SUPERIOR. Memoria Expandida EMS Cuando los usuarios de Lotus 1-2-3 y otros comenzaron a demandar una forma de acceder a más memoria que los 640 KB previstos originalmente por el esquema de "memoria convencional" imaginado por Bill Gates III, Lotus, Intel y Microsoft comenzaron a unificar fuerzas para salir con la Especificación de Memoria Expandida (EMS). Esta fue adoptada antes que el procesador 80286 saliera al mercado en 1982, y fue un éxito inmediato impulsando la venta de tarjetas de expansión de memoria RAM (por entonces la RAM venía en plaquetas de expansión). Esto explica en parte el hecho de que pocas compañías de software intentaron explotar las capacidades mejoradas de direccionamiento de memoria y el MODO PROTEGIDO del micro 286). Los programas que necesitaban mas de 640 KB de memoria podían ahora ser modificados para adherir al sistema EMS, de modo que no había necesidad de presionar para que el DOS usara el modo protegido del chip (aquello que permitía direccionar la memoria localizada entre el 1er MB y los 16 MB de RAM). Las especificaciones de MEMORIA EXPANDIDA dejan más memoria disponible a los procesadores que trabajaban en el viejo MODO REAL heredado del 8088 de la PC XT. Simplemente se reservaban bloques de 64 KB de memoria superior (el área entre los 640 KB y el 1er MB) como zona de paginado de memoria. Poco después de la adopción de la especificación EMS, varias compañías que quedaron por fuera (incluyendo AST Research, gran fabricante de plaquetas de memoria por entonces), convenieron con una especificación mejorada (EEMS), que usaba una técnica de llenar la memoria de arriba hacia abajo ("backfilling"), lo que elimina la necesidad de definir bloques reservados en la memoria superior como zona de paginado. La especificación de Memoria Expandida EMS siempre fue un despelote desprolijo. Hubiese sido mucho más fácil la vida para aquellos que programaban si los fabricantes de hardware y software se hubiesen puesto de acuerdo y hacer que el DOS usara la memoria extendida. El gestor de memoria expandida del DOS (EMM386) volvió obsoletas las viejas plaquetas de memoria EMS porque era capaz de simular memoria expandida en plaqueta simplemente usando la memoria extendida. Memoria extendida XMS La Especificación de Memoria Extendida (XMS) era una manera más simple de direccionar la memoria en aquellas máquinas que tenían más de 1 MB de memoria RAM. La memoria Extendida simplemente es una extensión de las direcciones de memoria convencional. En este caso, el área de memoria de 384 KB aún continúa presente, para que los programas puedan usar los 640 KB de memoria convencional y las direcciones superiores al 1er MB de RAM. Para implementar la memoria extendida se utiliza el MODO PROTEGIDO del procesador (esto significa que requiere 80286, 80286, 80486 o Pentium con más de 1 MB de memoria RAM). En DOS esto se lograba cargando el programa de gestión de memoria HIMEM.SYS durante el inicio indicándolo en el fichero CONFIG.SYS, y este permitía al DOS direccionar la memoria que se encontraba por encima del 1er MB de memoria RAM. No hubo gran cantidad de programas de DOS que usaran la memoria extendida, porque el esfuerzo no era particularmente sencillo. Pero sí se empleó en numerosos juegos tardíos y las utilidades más avanzadas de DOS de principios de la década del 90. Las aplicaciones más potentes y conocidas era el mismo ambiente, o interfaz visual de operación Microsoft Windows 3.1 y sus versiones de la década (junto con sus programas, claro) que recurrían a esta memoria extendida. ---------------------------------------------------------------------