sábado, 10 de octubre de 2015

Ensamblador y arquitectura de microprocesadores


Descripción de la arquitectura de 64 bits

Introducción

En una entrada anterior hacía una descripción general de la arquitectura de un ordenador,  en esta entrada voy a afinar un poco y voy a hacer una breve visión de la arquitectura de 64 bits  también conocida como x86-64 porque se trata de  una ampliación de la arquitectura x86. La arquitectura x86 comenzó con Intel con el procesador Intel 8086 en el año 1978 como arquitectura de 16 bits. Después esta arquitectura evolucionó hasta una arquitectura de 32 bits cuando apareció el procesador Intel 80386 en el año 1985, denominada  i386 o x86-32. AMD amplió esta arquitectura de 32 bits de Intel hasta una de 64 bits y la llamó x86-64. Intel pronto adoptó las extensiones de la arquitectura de AMD bajo el nombre Intel 64.

arquitectura de 64 bits
Tomado de datuopinion.com


Con el procesador Itanium, Intel lanzó la arquitectura denominada IA-64, derivada de la IA-32 y que no es compatible con las arquitecturas x86, x86-32 o x86-64. La arquitectura IA-64 se originó en Hewlett-Packard (HP) y más tarde fue desarrollada con Intel para utilizarse en sistemas de alto rendimiento. 

Modos de operación

Los procesadores con arquitectura x86-64 deben mantener la compatibilidad con los procesadores de 32 bits por eso presentan los mismos modos de operación lo que permite ejecutar aplicaciones de 16 y 32 bits, por otra parte incluyen un modo nuevo llamado modo extendido en el que es posible trabajar en modo real de 64 bits.

Además de los múltiples modos de operación con los que puede contar un microprocesador, existen dos modos fundamentales que todo microprocesador debe tener: El modo supervisor y el modo protegido.

El modo supervisor

Es el que utilizar el núcleo del sistema para ejecutar tareas de bajo nivel que precisan de un acceso sin restricciones al hardware, suelen ser tareas como el control de la memoria o la comunicación con otros dispositivos.

El modo protegido

Se utiliza para casi todo el resto de las tareas. Al ejecutar programas en modo protegido utilizaremos el hardware haciendo llamadas al sistema operativo, que a su vez es el que lo controla en modo supervisor.

Puede haber otros modos similares al protegido, por ejemplo el modo virtual  se utiliza para emular otros procesadores de la misma familia, y de este modo  mantiene la compatibilidad con procesadores anteriores.

Cuando se enciende un equipo, se ejecutan los programas de la BIOS que tienen acceso ilimitado al hardware en modo, una vez iniciado el sistema operativo, se pasa el control a otros programas con lo que el procesador se pone ya en modo protegido.

En modo protegido, los programas pueden acceder a un conjunto de instrucciones más limitado,  sólo podrán abandonar el modo protegido realizando  una petición de interrupción que devuelva el control al sistema operativo; de este modo se garantiza el control para acceder al hardware.
microprocesador de 64 bits modos de operación

modos de operación procesador de 64 bits
Tomado de Cartagena99.com

El modo de 64 bits

Los elementos que son visibles desde el punto de vista del programador son los siguientes:

Espacio de memoria: un programa trabajando este modo tiene acceso a un espacio de direcciones de 264 bytes. El espacio real que  puede gestionar el procesador depende de la  implementación de la arquitectura.
Registros: suelen consistir en 16 registros de propósito general de 64 bits cada uno, y permiten operaciones de byte (8 bits), palabra (16 bits), palabra doble (32 bits) y palabra cuadruple (64 bits).
Además dispone de un registro contador de programa (RIP, instruction pointer register)  de 64 bits.
El registro de bits de estado también es de 64 bits (RFLAGS). Los 32 bits de la parte alta están reservados y son inaccesibles; los 32 bits de la parte baja son accesibles y corresponden a los mismos bits que una  arquitectura  de 32 bits. (registro EFLAGS).

ensamblador de 64 bits


Organización de la memoria

El procesador lee la memoria usando direcciones físicas de memoria.

El tamaño físico de la memoria accesible para los procesadores depende de la implementación: supera los 4 Gbytes, pero es inferior a los 264 bytes posibles.

En el modo de 64 bits, la arquitectura permite un espacio de direcciones virtual o lineal de 64 bits (direcciones de 0 a 264 – 1), pero el espacio de direcciones físico es inferior al espacio de direcciones lineal, esto hace necesario un mecanismo de correspondencia entre las direcciones lineales y las direcciones físicas que llamaremos mecanismo de paginación.

Paginación

Este mecanismo lo gestiona el hardware del procesador y el sistema operativo. Las direcciones virtuales son traducidas a direcciones físicas de memoria utilizando un sistema jerárquico de tablas de traducción gestionadas por el software del sistema (sistema operativo).

Una dirección virtual se divide en campos, y cada campo se comporta como un índice dentro de una de las tablas de traducción. Cada uno de estos valores en la posición indexada actuará como una dirección base de la tabla de traducción siguiente.

ensamblador de 64 bits

Orden de los bytes

Los procesadores 64 bits utilizan un sistema de ordenación de los bytes cuando se accede a los datos que se encuentran almacenados en la memoria. En concreto, se utiliza un sistema en el cual el byte de menos peso de un dato ocupa la dirección más baja de memoria (little-endian).

Los registros también utilizan el modelo little-endian y por este motivo el byte menos significativo de un registro se denomina byte 0.


bytes de 64 bits

Tamaño de las direcciones

Los programas que son ejecutados en modo de 64 bits generan directamente direcciones de 64 bits.

Modo compatibilidad

Los programas que se ejecutan en el modo compatibilidad generan direcciones de 32 bits.

Estas direcciones se extienden a 64 bits añadiendo ceros a los 32 bits más significativos de la dirección. Este proceso es gestionado por el hardware del procesador.

Tamaño de los desplazamientos y de los valores inmediatos

En el modo de 64 bits las instrucciones de desplazamiento de los direccionamientos relativos y los valores inmediatos es de 32 bits excepto la instrucción MOV que permite cargar un valor inmediato de 64 bits.

No hay comentarios:

Publicar un comentario