Sie sind auf Seite 1von 8

Direccionamiento Modo Real

Direccionar la Memoria El direccionamiento de la memoria puede considerarse desde dos puntos de vista: Fsico y lgico. El primero se refiere a los medios electrnicos utilizados en el ordenador para acceder a las diversas posiciones de memoria. El segundo, a la forma en que se expresan y guardan las direcciones. En este epgrafe nos referiremos exclusivamente a la forma en que son tratadas las direcciones de memoria del PC. Advirtiendo desde ahora, que este asunto, como muchos otros, ha sufrido mutaciones a lo largo del tiempo, y que arrastra modos que solo tienen una justificacin de tipo histrico, en razn de las caractersticas del hardware de los primeros PCs. El sistema de numeracin utilizado por los informticos para representar las direcciones de memoria en el texto escrito no suele ser la decimal (como parecera razonable), sino el hexadecimal ( E2.2.4b). La razn es que los nmeros hexadecimales guardan cierta concordancia con las potencias de 2. Por ejemplo, un bus de direcciones de 8 bits puede acceder a 256 posiciones (en hexadecimal es el rango 00-FFh). En caso de direcciones de 16 bits, se puede acceder 65.536 posiciones (es el rango 0000-FFFFh). El bus de direcciones del PC XT, que tiene 20 bits, las posibilidades son 1.048.576 (es el rango 00000-FFFFFh). Como veremos a continuacin, puede utilizarse una doble notacin: Direcciones absolutas, indicadas por un hexadecimal de cinco dgitos, en el rango 00000-FFFFFh, o en direcciones segmentadas, que utiliza dos grupos de cuatro dgitos hexadecimales.

Direccionamiento segmentado
Hemos indicado que el bus de direcciones del PC XT era de 20 bits ( H2), por lo que tericamente podan manejarse un total de 220 posibilidades (1.048.576). Sin embargo, el procesador 8088 utilizado tiene registros de 16 bits, por lo que solo puede contener directamente 216 posiciones (65.536). La solucin consisti en expresar las direcciones mediante dos palabras de 16 bits, denominadas desplazamiento y segmento que, por consiguiente, pueden ser representadas mediante un hexadecimal de cuatro cifras en el rango 0000-FFFFh. Estas dos palabras pueden ser traducidas a una direccin de 20 bits mediante la operacin denominada suma con desplazamiento. Por ejemplo, suponiendo que el desplazamiento y el segmento fuesen respectivamente ABCDh y E 1 F Ah, la forma de obtener la direccin resultante es como sigue: Una de las palabras, el desplazamiento, se desplaza una posicin aadindole un cero a la derecha (equivale a multiplicarla por 16, ya que las direcciones se expresan en hexadecimal). En nuestro caso, si el desplazamiento es ABCDh resulta ABC D0h?. Puesto que inicialmente es un hexadecimal de 4 cifras (ABCD en nuestro caso), el desplazamiento la transforma en un hexadecimal de 5 cifras (ABCD0). El valor obtenido se suma con el valor del segmento (E 1 F Ah), as que la direccin resultante, sera 69ECAh. Para distinguirla de la anterior, esta ltima forma se denomina direccin absoluta. Nota: Es frecuente escribir las direcciones segmentadas en forma de los dos cantidades separadas por dos puntos, poniendo a la izquierda el valor ms alto (el desplazamiento) y a la derecha el ms bajo (el segmento). En forma segmentada, la direccin anterior se expresara ABCD:E1FA , y es equivalente a la direccin absoluta 69ECAh. 4 Segmentos y prrafos

Esta forma de representacin segmentada de las direcciones es en realidad una imagen de como son manejadas internamente en el procesador. Los procesadores 8088 tienen registros de 16 bits que pueden servir para almacenar los desplazamientos, es decir, cualquier direccin dentro de una zona de 64 KB (que se conoce como segmento). Disponen adems de 4 registros de segmento de 16 bits (CS, SS, DS y ES H3.2), en los que se almacenan las direcciones de inicio del segmento activo en cada momento. Resulta as, que pueden direccionar un total absoluto de 1MByte, y hasta 64 x 4 = 256 KB sin necesidad de cambiar los registros de segmento. Esto es lo que se conoce como funcionamiento en modo real (como puede verse, en realidad es una forma de manejar la memoria). La figura adjunta muestra como se utilizan los registros para sealar las direcciones de inicio de los diversos mdulos de un programa cargado en memoria ( E1.3.2) dentro del espacio de memoria direccionable con 20 bits (00000-FFFFFh). En la figura 1 se muestra una divisin de este Mega en 16 segmentos cuyos desplazamientos son justamente 0h, 1h, 2h Fh. 5 Modelos de memoria DOS Las 220 posibilidades de direccionamiento antes comentadas, constituyen el famoso lmite del Megabyte de memoria de los primeros PCs, de los cuales se reservaron los no menos famosos 640 primeros K Bytes? como mximo disponible para programas de usuario. Nota: Como ver a continuacin, gran parte del Sistema se cargaba en realidad en la memoria supuestamente reservada a usuario, con lo que en realidad el especio para programas de aplicacin resultaba siempre muy precario. Desde entonces, y en referencia a que el sistema operativo era MS-DOS, el primer Megabyte de memoria se conoce como Memoria DOS; los primeros 640 KB como memoria convencional o memoria base. Los 384 KB restantes (1024 - 640) son la memoria superior o del Sistema (Upper memory). Esta zona superior contena cosas como adaptadores y memoria de video; chips de la ROM-BIOS; ROMs de los controladores de disco, y adaptadores de red, aunque existan agujeros sin uso que podan ser aprovechados. En la figura 1 se muestra un mapa aproximado de la distribucin de esta memoria en el Sistema MS DOS. Nota: Aunque para el programador toda esta memoria RAM es un nico espacio lgico, muchas de estas cosas estn fsicamente fuera de lo que es la memoria RAM (si se abre la caja del ordenador). Por ejemplo, gran parte de la memoria de video est fsicamente en las propias placas de los adaptadores de video. Los programas DOS requieren la existencia de una zona contigua de memoria convencional (preferiblemente de 640 KB), aunque en realidad este espacio debe ser compartido con la tabla de vectores de interrupcin; rea de datos de la ROM BIOS ( H4) y buena parte del propio Sistema Operativo DOS. Por ejemplo, controladores de dispositivos (los famosos device= del fichero CONFIG.SYS). Como consecuencia de la escasez de espacio, se desarrollaron tcnicas para permitir que controladores de dispositivos y TSRs [2] se cargaran en otras zonas de memoria. Generalmente este tipo de instrucciones de carga se sitan en los ficheros CONFIG.SYS y

AUTOEXEC.BAT, y aprovechan que no todo el espacio de memoria superior es utilizado por el Sistema, de modo que existen zonas ociosas en las que podan situarse los citados controladores. 6 Memoria expandida Muy pronto se comprob que el Megabyte de memoria inicialmente previsto era claramente insuficiente, por lo que se arbitraron diversos tipos de soluciones. Los ingenieros de software, en cooperacin con los de hardware, debieron hacer verdaderos juegos malabares para tratar de suplir la cortedad de miras de los diseadores del PC [1]. Concretamente hubo dos soluciones que fuero muy utilizadas y populares en su poca. La primera, fue resultado de una iniciativa conjunta de Lotus e Intel, que desarrollaron una variedad de la tcnica de direccionamiento conocida como conmutacin de bancos, a la que llamaron EMS (Expanded Memory Specification), que proporcionaba 8 MB de espacio adicional. Ms tarde fue aceptada tambin por Microsoft con alguna pequea modificacin, pasando a denominarse especificacin de memoria expandida LIM (Lotus, Intel Microsoft). Poco ms tarde Quadram, Ahston-Tate y el fabricante de tarjetas de memoria AST publicaron otra ms flexible denominada EEMS (Enhanced EMS); adems, la especificacin LIM fue perfeccionada para proporcionar 32 MB adicionales mediante una combinacin hardware/software. El procedimiento consista en aadir al ordenador una placa adicional de memoria de conmutacin de bancos de hasta 32 MB, que era conducida por un driver adecuado, el EMM (Expanded Memory Manager) cargado por el CONFIG.SYS. El truco consiste en que en un rea en desuso de la memoria superior , se sita una zona 64 KB, denominada marco de pgina, en la que existen 4 secciones de 16 KB (ventanas) que se emplean como punteros a una pgina ms grande en la memoria de conmutacin de bancos. Los programas podan utilizar segmentos de datos muy grandes ( E1.3.2), ya que el gestor de memoria EMM se encargaba de traer automticamente a la ventana la zona necesaria en cada momento.

Modo Protegido
El modo protegido es un modo operacional de los CPUs compatibles x86 de la serie 80286 y posteriores. El modo protegido tiene un nmero de nuevas caractersticas diseadas para mejorar las multitareas y la estabilidad del sistema, como proteccin de memoria, y soporte de hardware para memoria virtual as como de conmutacin de tareas. A veces es abreviado como p-mode y tambin llamado Protected Virtual Address Mode (Modo de Direccin Virtual Protegido) en el manual de referencia de programador del iAPX 286 de Intel, (Nota, iAPX 286 es solo otro nombre para el Intel 80286). En el 80386 y procesadores de 32 bits posteriores se agreg un sistema de paginacin que es parte del modo protegido. La mayora de los sistemas operativos x86 modernos corren en modo protegido, incluyendo Linux, Free BSD, Open BSD?, Net BSD, y Microsoft Windows 3.0 y posteriores. (Windows 3.0 tambin corra en el modo real para la compatibilidad con las aplicaciones de Windows 2.x). El otro modo operacional principal del 286 y CPUs posteriores es el modo real, un modo de compatibilidad hacia atrs que desactiva las caractersticas propias del modo protegido, diseado para permitir al software viejo correr en los chips ms recientes. Como una especificacin de diseo, todos los CPUs x86 comienzan en modo real en el momento de carga (boot time) para

asegurar compatibilidad hacia atrs con los sistemas operativos heredados, excepto el oscuro Intel 80376 diseado para aplicaciones empotradas. Estos procesadores deben ser cambiados a modo protegido por un programa antes de que est disponible cualquier caracterstica este modo. En computadores modernos, este cambio es generalmente una de las primeras tareas realizadas por el sistema operativo en el tiempo de carga. Mientras que la multitarea en sistemas corriendo en modo real es ciertamente posible mediada por software, las caractersticas de proteccin de memoria del modo protegido previenen que un programa errneo pueda daar la memoria propia de otra tarea o del ncleo del sistema operativo. El modo protegido tambin tiene soporte de hardware para interrumpir un programa en ejecucin y cambiar el contexto de ejecucin a otro, permitiendo pre-emptive multitasking. Compatibilidad con aplicaciones de modo real El Manual de Referencia del Programador del iAPX 286 de Intel indica que el modo protegido es solo una cubierta sobre el conjunto de instrucciones del 80186, y de hecho, para los programadores de aplicaciones, el modo protegido 80286 no agreg mucho ms all de tener acceso de hasta 16 MB de memoria fsica y de 1 GB de memoria virtual (512 MB global, 512 MB local). Tambin era compatible con el cdigo del modo real a nivel binario, as que en teora, el cdigo de aplicacin del 8086 y 80186 poda correr en modo protegido si segua las siguientes reglas, (aunque correra ms lento que en el modo real porque la carga registros de segmento es ms lenta): No aritmtica de segmento No uso de instrucciones privilegiadas No acceso directo de hardware No escritura al segmento de cdigo (lo que significa que cdigo automodificable nunca est permitido) No ejecucin de datos (eso, junto con la segmentacin, proporciona una cierta proteccin de desbordamiento buffer) No presuncin que los segmentos se solapan En realidad, casi todos los programas de aplicaciones del DOS violaron estas reglas, por la carencia de reemplazo de llamadas del DOS o del BIOS, o debido al insuficiente nivel de desempeo de tales llamadas. Las violaciones ms comunes eran aritmtica de segmento y el acceso directo del hardware. Tambin algunas de las interrupciones del BIOS usaban nmeros que fueron reservados por Intel. En otras palabras, el modo protegido era menos compatible con aplicaciones de DOS que con aplicaciones de modo real y por lo tanto haba una necesidad del modo 8086 virtual, que vino con el 386. Niveles privilegiados En modo protegido, hay cuatro niveles de privilegio o anillos, numerados de 0 a 3. El cdigo del ncleo (kernel) del sistema operativo, que necesita usar instrucciones privilegiadas corre en el anillo 0, y las aplicaciones del usuario corren normalmente en el anillo 3.

El sistema operativo puede asignar los anillos 1 y 2 a servicios de sistema, como protocolos de red o la gerencia de ventanas, que las aplicaciones pueden llamar. El hacer esto, le permite a los servicios accesar directamente los datos de la aplicacin, mientras que se protegen de stas, as como el ncleo queda protegido de los servicios. Sin embargo, esto requiere, al sistema operativo, especificar la proteccin de memoria a nivel de segmento (porque en el 80386, la proteccin de nivel de pgina no puede distinguir entre los anillos 0, 1, y 2) y puede ser difcil si el sistema operativo necesita ser portable a procesadores que soporten solamente dos anillos. En lugar de ello, un sistema operativo puede alcanzar una proteccin equivalente o ms fuerte al correr los servicios en el anillo 3 pero en un diferente espacio de direccin. Sin embargo, esto cuesta ms, al tener una conmutacin de contexto ms compleja a la hora de la llamada, a menos que al servicio le sea dado un Task State Segment (segmento de estado de tarea) separado, el procesador primero debe cambiar al anillo 0 para cambiar el espacio de direccin, y despus retornar al anillo 3 para ejecutar el servicio. El procesador comprueba niveles de privilegio en las siguientes situaciones. Si el cdigo que corre no tiene suficientes privilegios, el resultado es generalmente una excepcin que el sistema operativo puede manejar; pero tambin estn las instrucciones que hacen los mismos chequeos sin levantar excepciones. Instruccin privilegiada. Algunas instrucciones solo se pueden ejecutar en el anillo 0: por ejemplo LGDT (Load Global Descriptor Table) (Carga Descriptor Global de Tabla), que puede redefinir segmentos arbitrariamente y por lo tanto derrotar el mecanismo de proteccin. POPF (Pop Flags desde el stack) siempre es permitido, pero solo puede cambiar el campo IOPL desde el anillo 0. Entrada/salida. El nivel de privilegio requerido para las instrucciones de I/O y para modificar el flag de interrupcin es definido por medio del campo IOPL del registro EFLAGS. Incluso si el nivel actual de privilegios no es suficiente, todava puede ser permitido I/O a puertos especficos va el mapa de bits de permisos de I/O en el segmento de estado de tarea (no soportado por el 80286). Cargar un registro de segmento, far jumps y llamadas a subrutinas. Cada segmento tiene un descriptor que defina el descriptor privilege level (DPL) (nivel de privilegio del descriptor) requerido para usar ese segmento. El valor del selector cargado en un registro de segmento tambin codifica un requestors privilege level (RPL) (nivel de privilegio del solicitante), que debe ser fijado con la instruccin ARP, para marcar los selectores recibidos desde cdigo menos privilegiado. El procesador hace diferentes comprobaciones para accesos de los datos, la conmutacin del stack, transferencias de control directas, y transferencias de control indirectas por medio de una puerta. Retornando a cdigo menos privilegiado. El procesador limpia todos los registros de segmentos que contengan selectores que codifican en el nuevo nivel de privilegio que no hubieran podido cargarse all por s mismos. La paginacin (no soportada por el 80286). Un bit en cada entrada de tabla de pgina controla si la pgina se puede usar solamente en los anillos 0, 1, y 2 (modo supervisor), o tambin en el anillo 3 (modo usuario). El RPL en el registro CS (segmento de cdigo) es siempre el nivel actual de privilegio. La lectura de este registro no puede ser atrapada, lo que complica la virtualizacin nativa de sistemas operativos, puesto que stos normalmente esperan tener el anillo 0 para s mismos. Ver virtualizacin x86.

Extensiones del 386 al modo protegido stas incluyen: paginacin Offsets de segmento de 32 bits (estos segmentos y la paginacin hicieron posible, en el 80386, hacer un espacio de direccin plano de 32 bits usado en sistemas operativos modernos) Espacio de direccin fsico de 32 bits (esta extensin no est presente en los procesadores 80386 que tienen un bus tipo 80286, por ejemplo el 80386SX) Capacidad de retornar al modo real Modo 8086 virtual Bitmaps con permisos de I/O Algunas de ellas usaron lo qu estaba documentado como bits reservados en el anterior procesador 286 en el manual de referencia del programador del iAPX 286 de Intel.

Modo Real Virtual


80386 DX y SX Introducido en 1985, el 80386 DX supera un nuevo escaln en el avance tecnolgico en microprocesadores. Se incorpora una nueva ampliacin y surge el nmero mgico, el 32. Los buses de datos y de direcciones se amplan hasta 32 lneas de datos, ocurriendo lo mismo con el tamao de los registros. Esta ampliacin supone un incremento en la memoria RAM fsica instalada. Puede direccionar 4 Gb de memoria fsica (DX significa Double word eXternal) y 64 Tb de memoria virtual, una cifra que en la actualidad est an muy por encima de las posibilidades econmicas de los usuarios (a ver quin instala 4.000 Megabytes de RAM, unos 20 millones de pesetas). Arranca en modo real, al igual que el 80286, e incorpora un nuevo modo de operacin: el modo real virtual del 8086, que permite tener varias sesiones 8086 trabajando simultneamente simulando una especie de pseudomultitarea. En los microprocesadores anteriores la gestin de memoria se realizaba en segmentos de 16 Kb. Con el 80286 este tamao de los segmentos de la memoria se hacan muy pequeos y el programador tena que trabajar ms para adaptarse a una gran cantidad de segmentos. El 80386 permite la definicin de segmentos de memoria de tamao variable. Aparte, Intel corrigi la deficiencia del downshifting, pudindose realizar por software. Otra de las innovaciones en la inclusin de una memoria cache interna en el chip destinada a almacenar instrucciones provenientes de memoria sin necesidad de que la unidad de ejecucin intervenga. Intel comete un nuevo error en el diseo del micro que genera inexactitudes en el clculo de 32 bits, que se presentan en los micros lanzados al mercado hasta mayo del 1987. Los

modelos corregidos van etiquetados con una doble sigma mayscula o con el identificativo DX. Este error afectaba a las operaciones de multiplicacin de 32 bits. Ocurra bajo las siguientes circunstancias: Se usa la memoria virtual y se produce una demanda de pgina. El coprocesador matemtico 80387 est instalado y en uso. Debe ocurrir una operacin de acceso directo a memoria (DMA). El 80386 debe estar en estado de espera (Wait State). Se detecta un segundo bug denominado POPAD bug. Su efecto es el vaciado del registro acumulador EAX cuando se ejecuta una instruccin de acceso a memoria inmediatamente despus de la ejecucin de la instruccin POPAD. Aparecen variaciones que afectan al consumo de energa pensadas para porttiles, se trataba de los 80386SL (Slow Low power) y 80386SLC (Slow Low power Cache), que es propiedad de IBM aunque lo fabrique Intel. Las frecuencias de funcionamiento eran de 12, 20, 25 y 33 MHz. El 80386SX (SX significa Simple word eXternal) tiene las mismas caractersticas que el 80386DX, salvo que el bus de direcciones externo se reduce a 16 bits. Introducido en 1988 daba la potencia de un 80386 a precio de un 80286. Durante mucho tiempo se rumore que el P9 podra ser compatible con los zcalos 80286, pero al final no fue as. La razn es que el 80286 multiplexa todos sus buses para conseguir con menos lneas el mismo resultado (menor coste) El 80386SX slo multiplexa el bus de direcciones. Las frecuencias de funcionamiento eran de 16, 20, 25 y 33 MHz. 80486DX 80486SX El 80486DX sali al mercado en 1989. La estructura interna hablando en trminos numricos es igual a la de un 80386. El tamao de los registros y de los buses son de 32 bits. Mantiene los tres modos de operacin: real, protegido y real virtual. Las diferencias reales con los 80386DX son que tiene un flag ms, un estado de excepcin ms, 2 bits ms en la tabla de entrada de pginas, 6 instrucciones y los registros de control tienen una longitud de 9 bits. Se realizan tambin cambios en la arquitectura interna. Se crea un mayor nmero de lneas hardware lo que implica un incremento en la velocidad. Se imponen reglas de diseo ms estrictas, lo que supone un reduccin del tamao del chip. Al reducirse el tamao se reduce tambin el consumo y consiguientemente la temperatura que alcanza el chip, con lo cual lo podemos hacer funcionar a un mayor nmero de ciclos de reloj, lo que supondr la aparicin de los Overdrives. Se incluye un coprocesador matemtico interno que dobla las prestaciones de un 80387 trabajando a la misma velocidad. Se logra un diseo mejor y la comunicacin entre el chip principal y el coprocesador matemtico es interna, lo que mejora la velocidad en las transferencias y unas sincronizaciones ms estrechas.

La memoria cache (8 Kb) del microprocesador est dividida en 4 caches de 2 Kb cada una. Esto agiliza la ejecucin de algunas aplicaciones. Si se asigna una memoria cache secundaria (L2) el rendimiento del micro puede aumentar hasta un 30 por ciento ms. El 80486SX es igual que un 80486DX, slo que el coprocesador matemtico est inhabilitado. El coprocesador matemtico 80487SX es en realidad un 80486DX puro que desactiva por completo el 80486SX, sin que podamos retirarlo de la placa. Las velocidades a las que funcionan son de 25, 33, 40 y 50 MHz. Hay versin SL para porttiles.

Das könnte Ihnen auch gefallen