>>0 DOS y el Acceso a Memoria de Acceso Aleatoio Para entender los temas de memoria que rodeaban al DOS, necesitamos saber un poco de su historia. En 1977, cuando Intel diseñaba el micro 8088 y 8086 en los cuales se basaría la primer generación de computadoras con DOS (las IBM PC original de 1981 y la IBM PC XT de 1983 en adelante), a los ingenieros se les ocurrió que nadie necesitaría usar más de 1 MB (1024 Kb) 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. El problema es que esta especulación estaba equivocada... muy equivocada. Modo Real vs. Modo Protegido Cuando en 1981 Intel desarrolló el microprocesador 80286, desarrolló para él un nuevo modo de funcionamiento, que permitía que la CPU direccionara la memoria por encima del límite de diseño impuesto anteriomente de 1MB total. Junto a esto, permitía funcionar a más de un programa a la vez, en 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ía 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. >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. 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. Pronto los usuarios más avanzados y los negocios - que compraban PC XT o sus clones sólo para correr Lotus 1-2-3 - comprendieron que podían armar planillas tan grandes que se topaban con el límite de 1 MB de memoria RAM que excedía los límites del procesador 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 XT instalada, 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. 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 e 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: memoria convencional, memoria expandida, y memoria extenidida. Es útil entender las diferencias: Memoria Convencional Como se comentó en el hilo, la generación de computadoras personales que precedieron a la IBM PC y al DOS tenían, como mucho, 64 KB de memoria RAM. El procesador Intel 8088 direccionaba 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 estaban disponibles para el uso del DOS y los programas que corrían bajo este sistema operativo. Los 384 KB restantes se reservaban para uso del sistema (controlador de disco, controlador de ROM, ROM de video, páginador de memoria expandida, RAM de video, etc). Esto no significaba que de los 640 KB fundamentales de memoria convencional del DOS, todo estuviese disponible para el usuario: el mismo DOS tomaba 1KB para armar una tabla de registro de uso de memoria, mas algunos pocos KB variables para Buffers de DOS y tablas de dispositivos, y unos varios KBs para controladores de dispositivos de hardware. En DOS, las direcciones de memorias usaban una notación segmento:offset, que se usaba para indicar la localización exacta donde debían almacenarse los datos o instrucciones del programa. Estas direcciones de memoria siempre se especificab usando un sistema de número hexadecimal. Cada segmento tiene una longitud de 64 KB, pero cada segmento arranca 16 bytes por encima del segmento lindante. La dirección de offset especifica cuantos bytes de la direccion se deben dejar desde el comienzo del segmento. Los programadores tenían que aprender que un podían lograr sacar un bloque extra de memoria útil específicando el último segmento posible del área de 1MB en la porción del segemnto de la dirección de memoria. Al recurrir a este truquito, sacabas 64KB extras (menos los 16 KB que quedan debajo del límite de 1024avo KB, es decir, 1024 KB - 16 KB = el kilobyte 1008 o bien el byte offset 1.032.192). Esto significaba que podían direccionarse esa cantidad de memoria en modo real sin colgar al microprocesador. Esta área de memoria resultante del "truquito" fue colonizada casi inmediatamente por los diseñadores de redes de datos. Se dieron cuenta que esta zona de memoria era un aguantadero seguro para poner sus búffers de datos, sin sacarle RAM a los programas en ejecución que ya empezaban a sentirse acogotados. >A partir del lanzamiento de MS-DOS 5.0 en 1990, los usuarios pudieron comenzar usar las direcciones de memoria no utilizadas residentes por encima de los 640KB y por debajo del 1024 KB para ejecutar programas DOS, algo que anteriormente había estado vedado desde el punto de vista del sistema operativo. Esto se lograba con un programa incluído denominado HIMEM.SYS y EMM386.EXE, los encargados de habilitar este espacio. Se usaba 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 moda 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 d e RAM). La Especificaciones de MEMORIA EXPANDIDA deja más memoria disponible a los procesadores que trabajban en el viejo MODO REAL heredado del 8088 de la PC XT. Simplemente se reservaban bloques de 64 KB de memoria superior (el éarea 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 mememoria 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 direccional la memoria que se encontraba por encima del 1er MB de memoria RAM. Hubo pocos programas de DOS que usaban la memoria extendida (principalmente algunos juegos tardíos y avanzados de DOS). Sin embargo, las excepciones a esto son los ambientes de operación Microsoft Windows 3.1 y superior, y sus programas, que recurren a esta memoria extendida.