ARQUITECTURA Y CONJUNTO DE INSTRUCCIONES (RESUMEN)
Presentado por: JHON OSCAR SALAZAR OROZCO C贸d. 89061357140
Profesor: JAIME ALBERTO BUITRAGO
UNIVERSIDAD DE L QUINDIO FACULTAD DE INGENIERIA PROGRAMA DE INGENIERIA DE SISTEMAS ARMENIA /QUINDIO 2011
ARQUITECTURA LA DE COMPUTADORA Introducción
El lenguaje entendido por el hardware de la computadora, se refiere al lenguaje de máquina. El lenguaje máquina se suele tratar en términos de lenguaje ensamblador, que es funcionalmente equivalente al lenguaje de máquina correspondiente, salvo que el lenguaje ensamblador utiliza nombres más intuitivos, tales como mover, agregar y saltar en lugar de las palabras binarias. Como por ejemplo instrucciones tales como "Añadir r0, r1, r2" es más fácil de entender que 0110101110101101. Se comenzara por describir el conjunto de instrucciones de la Arquitectura (ISA) desde el punto de vista de la máquina y sus operaciones. El punto de vista ISA corresponde al nivel de la Asamblea de códigos de idiomas que se encuentra entre el punto de vista de lenguaje de alto nivel, donde poco o nada del hardware de la máquina es visible y donde las instrucciones de la máquina se interpretan como acciones de transferencia de registro, a nivel de unidad funcional. Se describirá la naturaleza del lenguaje ensamblador y su programación como tal, para esto se elige el modelo ARC de la arquitectura de la máquina, que es una simplificación de la arquitectura SPARC comercial común en las computadoras. Se ilustra la utilidad de las diferentes clases de instrucción con ejemplos prácticos de programación en lenguaje ensamblador, y se concluye con un estudio de caso de la Java bytecodes como un ejemplo de un lenguaje común, el montaje portátil que puede ser implementado usando el lenguaje nativo de otra máquina.
Componentes hardware de la arquitectura del conjunto de instrucciones En el ISA de un equipo se presenta el programador de lenguaje ensamblador con el fin de que la máquina, que incluye todo el hardware y las instrucciones que manipulan los datos sean accesibles por el programador. Se Analizaran los componentes de hardware desde el punto de vista del programador de lenguaje ensamblador. En donde la CPU interactúa con sus memorias internas y el rendimiento de entrada y salida con el mundo exterior.
El bus de sistema
El objetivo del bus es reducir el número de interconexiones entre los CPU y sus subsistemas. En lugar de tener caminos diferentes de comunicación entre la memoria y los dispositivos de E / S, la CPU está conectada con la memoria y sistemas I / O a través de un bus de sistema compartida. En sistemas más complejos puede haber buses separados entre la CPU y la memoria, ó la CPU y E / S. No todos los componentes están conectados al bus del sistema de la misma manera. La CPU genera direcciones que se colocan en el bus de direcciones, y la memoria recibe las direcciones del bus de direcciones. La memoria no genera direcciones, y la CPU no recibe las direcciones, por lo tanto no hay conexiones correspondientes en esas direcciones. En un escenario típico, un usuario escribe un programa de alto nivel, que se traduce en un compilador de lenguaje ensamblador. El lenguaje ensamblador se traduce como programa en código máquina, que se almacena en un disco. Antes de la ejecución, el programa en código máquina se carga desde el disco a la memoria principal de un del sistema operativo. Durante la ejecución del programa, cada instrucción se pone en la ALU de la la memoria, una instrucción a la vez, junto con los datos que se necesita para ejecutar la instrucción. La salida del programa se coloca en un dispositivo tal como una vídeo pantalla, o un disco. Todas estas operaciones son procesadas por una unidad de control y la comunicación entre los tres componentes (CPU, memoria y E / S) se maneja con los autobuses. Se debe tener en cuenta que las instrucciones se ejecutan dentro de la ALU, a pesar de que todas las instrucciones y los datos se almacenan en la memoria. Esto significa que las instrucciones y los datos se deben cargar desde la memoria en los registros ALU, y los resultados deben ser almacenados a la memoria de la ALU de los registros.
MEMORIA La memoria del ordenador se compone de una colección consecutiva de registros, cada uno de los que normalmente tiene un byte. Un byte es un conjunto de ocho bits (llamado como un octeto). Cada registro tiene una dirección, conocida como una ubicación de memoria. El significado de la palabra depende del procesador, los tamaños mas típicos de la palabra son 16, 32, 64 y 128 bits, la palabra de 32 bits es la forma mas común para ordenadores en la actualidad y la palabra de 64 bits está creciendo. Se supone que las palabras son de 32 bits de ancho a menos que se especifique lo contrario. Comparación de los tipos de datos
En una máquina de byte-direccionable, el objeto más pequeño que se puede hacer referencia en la memoria es el byte, por lo general las instrucciones que leen y escriben palabras son llamadas multi-byte. El multi-byte de palabras es almacenado como una secuencia de bytes, se dirige al byte de la palabra que tiene la dirección más baja. La mayoría de las máquinas de hoy tienen instrucciones que pueden tener acceso a bytes, la mitad de las palabras, palabras y palabras dobles. Cuando se utiliza el multi-byte de palabras, hay dos opciones sobre el orden en que los bytes son almacenados en la memoria: 1) Big-endian: el byte de mayor peso o más significativo se almacena en la dirección más baja y el byte de menor peso en la dirección más alta. 2) Little-endian: el byte de menor peso o menos significativo se almacenada en la dirección más baja y el byte de mayor peso en la más alta.
Formatos Big-endian y Little-endian
Los bytes en una palabra multi-byte son almacenados en direcciones consecutivas, como se muestra en figura. En una memoria byte-direccionable cada byte se accede por su dirección, como por ejemplo una palabra de 4 bytes se accede haciendo referencia a la dirección mas baja del byte en este caso X. Esto es independientemente si se trata de Big-endian o Little-endian, ya que las direcciones se cuentan a partir de secuencias con cero, la más alta dirección es uno menos que el tamaño de la memoria, la dirección más alta de un byte de memoria de 32 es (232 - 1 ) y la dirección más baja es 0.
Esta memoria tiene un espacio de direcciones de 32 bits, lo que significa que un programa puede acceder a un byte de memoria en cualquier parte del rango de 0 hasta 2 a la 32 -1. El espacio de direcciones de la arquitectura de nuestro ejemplo se divide en regiones distintas que se utilizan para el sistema operativo de entrada
y salida (I / O), los programas de usuario, y la pila del sistema, que comprende el mapa de memoria. El mapa de memoria difiere de una implementación a otra, que es en parte por qué programas compilados para el mismo tipo de procesador puede no ser compatible con otros sistemas. Cuanto menor sea 211 = 2048direcciones del mapa de memoria, se reservan para uso del sistema operativo. El espacio de usuario es donde el programa reunió a un usuario y lo carga, el cual puede crecer durante la operación de localización 2048 hasta que se encuentra con la pila del sistema. La pila de sistema se inicia en la ubicación 231 - 4 y crece hacia direcciones más bajas. La porción del espacio de direcciones entre 231 y 232 - 1 es reservada para dispositivos I / O. Los dispositivos de E / S son tratados como posiciones de memoria, la memoria común lee y escribe comandos que seutilizan para leer y escribir los dispositivos. Esto se conoce como memoria de E / S mapeada. Es importante mantener una clara distinción entre lo que es una dirección y lo que se dispone de datos. Una dirección de memoria en este ejemplo es de 32 bits de ancho, y la palabra es también 32 bits de ancho, pero no son la misma cosa. Una dirección es un puntero a la memoria ubicación, que contiene los datos. Se asume que la memoria del ordenador se organiza en un solo espacio de direcciones. El espacio de direcciones se refiere a la gama de la memoria numérica de direcciones, a las que la CPU se puede referir.
La CPU La CPU se compone de una sección de datos que contiene los registros, ALU y una sección de control, que interpreta las instrucciones y los efectos de registrar las transferencias.
La unidad de control de una computadora se encarga de ejecutar las instrucciones del programa, que se almacenan en la memoria principal. Hay dos registros que forman la interfaz entre el mando y la unidad de datos, conocido como el contador de programa (PC) y el registro de instrucción (IR). El PC contiene la dirección de la instrucción que se está ejecutando, la instrucción que está apuntado por el PC es obtenida de la memoria, y se almacena en el IR en el que se interpreta. Las medidas que la unidad de control lleva a cabo en la ejecución de un programa son los siguientes: 1) Obtener la siguiente instrucción a ser ejecutada desde la memoria. 2) Decodificar el código de operación. 3) Lea operando (s) de la memoria principal, en su caso. 4) Ejecutar la instrucción y almacenar los resultados. 5) Ir al paso 1. Esto se conoce como el ciclo de captación a ejecutar. La unidad de control se encarga de coordinar las diferentes unidades en la ejecución de un programa de computadora. Se puede considerar como una forma de un ordenador " dentro de un equipo "en el sentido de que toma las decisiones en cuanto a cómo el resto de la máquina se comporta. El camino de datos se compone de una colección de registros conocido como el archivo de registro y la unidad aritmética y lógica (ALU). Camino de datos
El archivo de registro puede ser pensado como un recuerdo pequeño, rápido, independiente de la memoria del sistema, que se utiliza para el almacenamiento temporal durante el cálculo. Al igual que la memoria del sistema, cada registro en el archivo de registro se le asigna una dirección en la secuencia de arranque desde cero. Estos registros de direcciones son mucho menores que las direcciones de memoria principal: un archivo de registro que contiene 32 registros sólo tendría una dirección de 5 bits. Por ejemplo la principal diferencia entre el archivo de registro y la memoria del sistema es que el archivo de registro se encuentra dentro de la CPU, y por lo tanto es mucho más rápido. Una instrucción que opera sobre los datos del archivo de registro con frecuencia puede correr diez veces más rápido que la misma instrucción que opera sobre los datos de la memoria. Se debe tener cuenta que hay varios autobuses en el interior del camino de datos como esta en la figura, tres autobuses conecta el camino de datos para el bus del sistema, esto permite que los datos sean transferidos hacia y desde la memoria principal y el archivo de registro. Tres buses adicionales que conectan el archivo de registro de la ALU, estos buses permiten dos operando que se obtienen de los archivo de registro al mismo tiempo, los cuales son operados por la ALU, con los resultados devueltos al archivo de registro.
El conjunto de instrucciones Son las instrucciones que un procesador puede ejecutar, y en efecto, se define el procesador. Los conjuntos de instrucciones para cada tipo de procesador es completamente diferente uno de los otros. Se diferencian en el tamaño de las instrucciones, el tipo de operaciones que permiten, el tipo de operando que usa, y el tipo de resultados que proporciona, dicha incompatibilidad en el conjunto de instrucciones está en marcado en los lenguajes de alto nivel como C, Pascal, y Ada. Los programas escritos en estos lenguajes de alto nivel se pueden ejecutar casi sin cambios en diferentes procesadores si se re-compila para el procesador. Debido a esta incompatibilidad entre los conjuntos de instrucciones, los sistemas informáticos se identifica por el tipo de CPU que se incorpora dentro de estos sistemas. El sistema de instrucción determina los programas que el sistema puede ejecutar y tiene un impacto significativo en el rendimiento. Los programas compilados para un PC IBM (o compatible) del sistema utilizan el conjunto de instrucciones de una CPU 80x86, donde la “x” corresponde a la versión como 80586, más comúnmente conocido como un procesador Pentium. Estos programas no se ejecutarán en un Apple Macintosh o un ordenador IBM RS6000, ya que el Macintosh e IBM ejecutan el conjunto de instrucciones de la CPU Motorola PowerPC. Esto no significa que todos los sistemas informáticos que utilizan la misma CPU pueden ejecutar los mismos programas, sin embargo. Un programa escrito para el PowerPC de IBM RS6000 no se ejecutará en el Macintosh sin grandes modificaciones.
Software para la generación de programas en lenguaje de máquina Un compilador es un programa de ordenador que transforma los programas escritos en un lenguaje de alto nivel como C, Pascal, Fortran o en lenguaje de máquina. Compiladores para el lenguaje de alto nivel en general los mismos tienen el mismo "back ends", la parte que reconoce las declaraciones en el lenguaje de alto nivel. Ellos tienen diferentes "back ends", sin embargo, uno para cada procesador de destino. Al final el compilador de nuevo se encarga de generar código de máquina para un procesador de destino específico. Por otro lado, el mismo programa, elaborado por diferentes compiladores de C para la misma máquina puede producir diferentes programas compilados para el mismo código fuente. En el proceso de compilar un programa de alto nivel, el programa fuente se transforma en lenguaje ensamblador, y el lenguaje ensamblador se traduce en código de máquina para la máquina destino. Estas traducciones tienen lugar en tiempo de compilación y tiempo de montaje, respectivamente. El programa objeto resultante se puede vincular con los programas de otro objeto, en tiempo de enlace. El programa relacionado, normalmente se almacena en un disco, se carga en memoria principal, en tiempo de carga, y ejecutado por la CPU, en tiempo de ejecución. Aunque la mayoría del código está escrito en lenguajes de alto nivel, los programadores pueden utilizar en lenguaje ensamblador para los programas o fragmentos de programas que son el tiempo o espacio crítico. Además, los compiladores pueden no estar disponibles para algunos procesadores de propósito especial.