resumen_organizacion_y_arquitectura_de_computadores

12
Fragmentos extraídos de: ORGANIZACIÓN Y ARQUITECTURA DE COMPUTADORES - WILLIAM STALLINGS - SÉPTIMA EDICIÓN Un computador es un sistema complejo; los computadores de hoy en día contienen millones de componentes electrónicos básicos. ¿Cómo podríamos describirlos claramente? La clave está en reconocer la naturaleza jerárquica de la mayoría de los sistemas complejos, incluyendo el computador. Un sistema jerárquico es un conjunto de subsistemas interrelacionados cada uno de los cuales, a su vez, se organiza en una estructura jerárquica hasta que se alcanza el nivel más bajo del subsistema elemental. La naturaleza jerárquica de los sistemas complejos es esencial tanto para su diseño, como para su descripción. El diseñador necesita tratar sólamente con un nivel particular del sistema a la vez. En cada nivel el sistema consta de un conjunto de componentes y sus interrelaciones. El comportamiento en cada nivel depende sólo de una caracterización abstracta y simplificada del sistema que hay en el siguiente nivel más bajo. De cada nivel al diseñador le importan la estructura y el funcionamiento: Estructura; el modo en que los componentes están interrelacionados. Funcionamiento: la operación de cada componente individual como parte de la estructura. FUNCIONAMIENTO Tanto la estructura como el funcionamiento de un computador son en esencia sencillos. En términos generales hay sólo cuatro funciones básicas que un computador puede llevar a cabo: Procesamiento de datos Almacenamiento de datos Transferencia de datos Control El computador, por supuesto, tiene que ser capaz de procesar datos. También es esencial que un computador almacene datos. Incluso si el computador está procesando datos al vuelo (es decir, los datos se introducen, se procesan, y los resultados se obtienen inmediatamente), el computador tiene que guardar temporalmente al menos aquellos datos con los que está trabajando en un momento dado. Así, hay al menos una función

Upload: edward-ibague

Post on 01-Jul-2015

188 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: resumen_Organizacion_y_arquitectura_de_computadores

Fragmentos extraídos de:

ORGANIZACIÓN Y ARQUITECTURA DE COMPUTADORES - WILLIAM STALLINGS - SÉPTIMA EDICIÓN

Un computador es un sistema complejo; los computadores de hoy en día contienen millones de componentes electrónicos básicos. ¿Cómo podríamos describirlos claramente? La clave está en reconocer la naturaleza jerárquica de la mayoría de los sistemas complejos, incluyendo el computador. Un sistema jerárquico es un conjunto de subsistemas interrelacionados cada uno de los cuales, a su vez, se organiza en una estructura jerárquica hasta que se alcanza el nivel más bajo del subsistema elemental.

La naturaleza jerárquica de los sistemas complejos es esencial tanto para su diseño, como para su descripción. El diseñador necesita tratar sólamente con un nivel particular del sistema a la vez. En cada nivel el sistema consta de un conjunto de componentes y sus interrelaciones. El comportamiento en cada nivel depende sólo de una caracterización abstracta y simplificada del sistema que hay en el siguiente nivel más bajo. De cada nivel al diseñador le importan la estructura y el funcionamiento:

• Estructura; el modo en que los componentes están interrelacionados.• Funcionamiento: la operación de cada componente individual como parte de la estructura.

FUNCIONAMIENTOTanto la estructura como el funcionamiento de un computador son en esencia sencillos. En términos generales hay sólo cuatro funciones básicas que un computador puede llevar a cabo:

• Procesamiento de datos• Almacenamiento de datos• Transferencia de datos• Control

El computador, por supuesto, tiene que ser capaz de procesar datos.

También es esencial que un computador almacene datos. Incluso si el computador está procesando datos al vuelo (es decir, los datos se introducen, se procesan, y los resultados se obtienen inmediatamente), el computador tiene que guardar temporalmente al menos aquellos datos con los que está trabajando en un momento dado. Así, hay al menos una función de almacenamiento de datos a corto plazo. Con igual importancia, el computador lleva a cabo una función de almacenamiento de datos a largo plazo. El computador almacena ficheros de datos para que se recuperen y actualicen en un futuro.

El computador tiene que ser capaz de transferir datos entre él mismo y el mundo exterior. El entorno de operación del computador se compone de dispositivos que sirven bien como fuente o bien como destino de datos. Cuando se reciben o se llevan datos a un dispositivo que está directamente conectado con el computador, el proceso se conoce como entrada-salida (E/S), y este dispositivo recibe el nombre de periférico. El proceso de transferir datos a largas distancias, desde o hacia un dispositivo remoto, recibe el nombre de comunicación de datos.

Finalmente, debe haber un control de estas tres funciones. Este control es ejercido por el(los) ente(s) que proporciona(n) al computador instrucciones. Dentro del computador, una unidad de control gestiona los recursos del computador y dirige las prestaciones de sus partes funcionales en respuesta a estas instrucciones.

A este nivel general de discusión, el número de operaciones posibles que pueden ser realizadas es pequeño

Page 2: resumen_Organizacion_y_arquitectura_de_computadores

Procesa-mientoAlmacenamiento

Control

Transfe-rencia

Procesa-mientoAlmacenamiento

Control

Transfe-rencia

Procesa-mientoAlmacenamiento

Control

Transfe-rencia

Procesa-mientoAlmacenamiento

Control

Transfe-rencia

(a)(b)(c)(d)Figura 1.2

La Figura 1.2 muestra los cuatro posibles tipos de operaciones. El computador puede funcionar como un dispositivo de transferencia de datos (Figura 1.2a), simplemente transfiriendo datos de un periférico o línea de comunicaciones a otro. También puede funcionar como un dispositivo de almacenamiento de datos (Figura 1.2b), con datos transferidos desde un entorno externo al almacén de datos del computador (leer) y viceversa (escribir). Los dos diagramas siguientes muestran operaciones que implican procesamiento de datos, en datos, o bien almacenados (Figura 1.2c) o en tránsito entre el almacén y el entorno externo (Figura 1.2d).

ESTRUCTURALa Figura 1.3 es la representación más sencilla posible de un computador. El computador es una entidad que interactúa de alguna manera con su entorno externo. En general, todas sus conexiones con el entorno externo pueden ser clasificadas como dispositivos periféricos o líneas de comunicación.

Hay cuatro componentes estructurales principales:

• Unidad central de procesamiento (CPU Central Processing Unit): controla el funcionamiento del computador y lleva a cabo sus funciones de procesamiento de datos. Frecuentemente se le llama simplemente procesador.

• Memoria principal: almacena datos.• E/S: transfiere datos entre el computador y el entorno externo. .• Sistema de interconexión: es un mecanismo que proporciona la comunicación entre la CPU, la

memoria principal y la E/S.

Puede que haya uno o más de cada uno de estos componentes. Tradicionalmente ha habido sólo una CPU. En los últimos años ha habido un uso creciente de varios procesadores en un solo sistema. Para nuestros objetivos, el componente más interesante y de algún modo el más complejo es la CPU; su estructura se muestra en la Figura 1.5. Sus principales componentes estructurales son:

• Unidad de control: controla el funcionamiento de la CPU y por tanto del computador.• Unidad aritmético-lógica (ALU, Aríthmetic Logic Unit): lleva a cabo las funciones de procesamiento

de datos del computador.• Registros: proporcionan almacenamiento interno a la CPU.

Page 3: resumen_Organizacion_y_arquitectura_de_computadores

• Interconexiones CPU: son mecanismos que proporcionan comunicación entre la unidad de control, la ALU y los registros.

A alto nivel, un computador está constituido por CPU (unidad central de procesamiento), memoria, y unidades de E/S. con uno o varios módulos de cada tipo. Estos componentes se .interconectan de modo que se pueda llevar a cabo la función básica del computador, que es ejecutar programas. Así, a este nivel, se puede describir un computador (1) mediante el comportamiento de cada uno de sus componentes, es decir, mediante los datos y las señales de control que un componente intercambia con los otros, y (2) mediante la estructura de interconexión y los controles necesarios para gestionar el uso de dicha estructura.

Esta visión de alto nivel en términos de estructura y funcionamiento es importante debido a su capacidad explicativa de cara a la comprensión de la naturaleza del computador. Igualmente importante es su utilidad para entender los cada vez más complejos problemas de evaluación de prestaciones. Entender la estructura y el funcionamiento a alto nivel permite hacerse una idea de los cuellos de botella del sistema, los caminos alternativos, la importancia de los fallos del sistema si hay un componente defectuoso, y la facilidad con que se pueden mejorar las prestaciones. En muchos casos, los requisitos de mayor potencia y capacidad de funcionamiento tolerante a fallos se satisfacen mediante cambios en el diseño más que con un incremento en la velocidad y en la fiabilidad de los componentes individuales.

Prácticamente todos los computadores actuales se han diseñado basándose en los conceptos desarrollados por John von Neumann en el Instituto de Estudios Avanzados (Institute for Advances Studies) de Princeton. Tal diseño se conoce con el nombre de Arquitectura de von Neumann y se basa en tres conceptos clave:

• Los datos y las instrucciones se almacenan en una sola memoria de lectura-escritura.

Page 4: resumen_Organizacion_y_arquitectura_de_computadores

• Los contenidos de esta memoria se direccionan indicando su posición, sin considerar el tipo de dato contenido en la misma,

• La ejecución se produce siguiendo una secuencia de instrucción tras instrucción (a no ser que dicha secuencia se modifique explícitamente).

Las razones que hay detrás de estos conceptos merecen ser resumidas aquí. Hay un conjunto pequeño de componentes lógicos básicos que pueden combinarse de formas diferentes para almacenar datos binarios y realizar las operaciones aritméticas y lógicas con esos datos. Si se desea realizar un cálculo concreto, es posible utilizar una configuración de componentes lógicos diseñada específicamente para dicho cálculo. Se puede pensar en el proceso de conexión de los diversos componentes para obtener la configuración deseada como si se tratase de una forma de programación. El «programa» resultante es hardware y se denomina programa cableado (hardwired program).

Considérese ahora la siguiente alternativa. Se construye una configuración de uso general de funciones lógicas y aritméticas. Este hardware realizará funciones diferentes según las señales de control aplicadas. En el caso del hardware específico, el sistema acepta datos y produce resultados. Con el hardware de uso general, el sistema acepta datos y señales de control y produce resultados. Así, en lugar de reconfigurar el hardware para cada nuevo programa, el programador simplemente necesita proporcionar un nuevo conjunto de señales de control.

¿Cómo se suministran las señales de control? La respuesta es simple pero ingeniosa. El programa es realmente una secuencia de pasos. En cada paso, se realiza una operación aritmética o lógica con ciertos datos. Para cada paso, se necesita un nuevo conjunto de señales de control. La solución consiste en asociar un código específico a cada posible conjunto de señales de control, y añadir al hardware de uso general una paite encargada de generar las señales de control a partir del código.

Programar es ahora mucho más fácil. En lugar de tener que reconfigurar el hardware para cada programa, todo lo que se necesita es proporcionar una nueva secuencia de códigos. Cada código es, de hecho, una instrucción, y una parte del hardware interpreta cada instrucción y genera las señales de control. Para distinguir este nuevo método de programación, una secuencia de códigos o instrucciones se denomina software. Los componentes esenciales de estos sistemas son: un intérprete de instrucciones y un módulo de uso general para las funciones aritméticas y lógicas. Estos dos elementos constituyen la CPU. Se requieren varios componentes adicionales para que el computador pueda funcionar. Los datos y las instrucciones deben introducirse en el sistema. Para eso se necesita algún tipo de módulo de entrada. Este módulo contiene los componentes básicos para captar datos e instrucciones en cierto formato y traducirlos al fórmalo de señales que utiliza el sistema. Se necesita un medio para proporcionar los resultados, el módulo de salida. Globalmente, estos módulos se conocen con el nombre de componentes de E/S (Entrada/Salida).

Se necesita un componente más. Un dispositivo de entrada proporcionará los datos y las instrucciones secuencialmente, uno tras otro. Pero un programa no siempre ejecuta las instrucciones según la misma secuencia; puede saltarse ciertas instrucciones. De la misma forma, las operaciones con datos pueden necesitar acceder a más de un operando y según una secuencia determinada. Por ello, debe existir un sitio para almacenar temporalmente tanto las instrucciones como los datos. Ese módulo se llama memoria, o memoria principal para distinguirlo de los periféricos y la memoria externa. Von Neumann indicó que la misma memoria podría ser usada tanto para las instrucciones como para los datos.

La Figura 3.2 muestra estos componentes de alto nivel y sugiere las interacciones entre ellos. Típicamente, la CPU se encarga del control. Intercambia datos con la memoria. Para ello, usualmente utiliza dos registros internos (en la CPU): un registro de direcciones de memoria (MAR, Memory Address Register), que

Page 5: resumen_Organizacion_y_arquitectura_de_computadores

especifica la dirección en memoria de la próxima lectura o escritura, y un registro para datos de memoria (MBR, Memory Buffer Register), que contiene el dato que se va a escribir en memoria o donde se escribe el dató que se va a leer de memoria. Igualmente, un registro de direcciones de E/S (E/SAR, EIS Address Register) especifica un dispositivo de E/S. Un registro para datos de E/S (E/S BR, E/S Buffer Register) se utiliza para intercambiar datos entre un módulo de E/S y la CPU.

Un módulo de memoria consta de un conjunto de posiciones, designadas por direcciones numeradas secuencialmente. Cada posición contiene un número binario que puede ser interpretado como una instrucción o como un dato. Un módulo de E/S transfiere datos desde los dispositivos externos a la CPU y a la memoria, y viceversa. Contiene los registros (buffers) internos para almacenar los datos temporalmente, hasta que puedan enviarse.

Tras esta breve descripción de los principales componentes, revisaremos cómo funcionan estos cuando ejecutan programas.

FUNCIONAMIENTO DEL COMPUTADORLa función básica que realiza un computador es la ejecución de un programa, constituido por un conjunto de instrucciones almacenadas en memoria. El procesador es precisamente el que se encarga de ejecutar las instrucciones especificadas en el programa. Esta sección proporciona una revisión de los aspectos clave en la ejecución de un programa, que en su forma más simple consta de dos etapas: El procesador lee (capta) la instrucción de memoria, y la ejecuta. La ejecución del programa consiste en la repetición del proceso de captación de instrucción y ejecución de instrucción. Por supuesto, la ejecución de la instrucción puede a su vez estar compuesta de cierto número de pasos.

Page 6: resumen_Organizacion_y_arquitectura_de_computadores

El procesamiento que requiere una instrucción se denomina ciclo de instrucción. Se representa en la figura 3.3 utilizando la descripción simplificada de dos etapas explicada más arriba. Los dos pasos se denotan como ciclo de captación y ciclo de ejecución. La ejecución del programa se para sólo si la máquina se desconecta, se produce algún tipo de error irrecuperable o ejecuta una instrucción del programa que detiene al computador.

LOS CICLOS DE CAPTACIÓN Y EJECUCIÓNAl comienzo de cada ciclo de instrucción, la CPU capta una instrucción de memoria. En una CPU típica, se utiliza un registro llamado contador de programa (PC, Program Counter) para seguir la pista de la instrucción que debe captase a continuación. A no ser que se indique otra cosa, la CPU siempre incrementa el PC después de captar cada instrucción, de forma que captará la siguiente instrucción de la secuencia (es decir, la instrucción situada en la siguiente dirección de memoria). Considérese, por ejemplo, un computador en el que cada instrucción ocupa una palabra de memoria de 16 bits. Se supone que el contador de programa almacena el valor 300. La CPU captará la próxima instrucción almacenada en la posición 300. En los siguientes ciclos de instrucción, captará las instrucciones almacenadas en las posiciones 301, 302, 303, y así sucesivamente. Esta secuencia se puede alterar, como se explicará en breve.

La instrucción captada se almacena en un registro de la CPU conocido como registro de instrucción (IR, Instruction Register). La instrucción se escribe utilizando un código binario que especifica la acción que debe realizar la CPU. La CPU interpreta la instrucción y lleva a cabo la acción requerida. En general, esta puede ser de cuatro tipos:

• Procesador-Memoria: deben transferirse datos desde la CPU a la memoria, o desde la memoria a la CPU• Procesador-E/S: deben transferirse datos a o desde el exterior mediante transferencias entre la CPU y

un módulo de E/S.• Procesamiento de Datos: la CPU datos. ha de realizar alguna operación aritmética o lógica con los • Control: una instrucción puede especificar que la secuencia de ejecución se altere. Por ejemplo, la CPU

capta una instrucción de la posición 149 que especifica que la siguiente instrucción debe captarse de la posición 182. La CPU registrará este hecho poniendo de captación, poniendo en el contador de programa 182. Así, en el próximo ciclo de captación, la instrucción se cargará desde la posición 182 en lugar de hacerlo desde la posición 150.

La ejecución de una instrucción puede implicar una combinación de estas acciones.

Considérese un ejemplo sencillo utilizando una máquina hipotética que incluye las características enumeradas en la Figura 3.4. El procesador posee un único registro de datos llamado acumulador (AC). Tanto las instrucciones como los datos son de 16 bits. Así, es conveniente organizar la memoria utilizando posiciones de 16 bits. El formato de instrucción indica que puede haber 24 = 16 códigos de operación (codops o opcodes) diferentes, y se pueden direccionar directamente hasta 212 = 4096 (4K) palabras de memoria.

Page 7: resumen_Organizacion_y_arquitectura_de_computadores

La Figura 3.5 ilustra la ejecución de una parte de un programa, mostrando las partes relevantes de la memoria y los registros de la CPU. Se utiliza notación hexadecimal. El fragmento de programa suma el contenido de la palabra de memoria en la dirección 940 con el contenido de la palabra de memoria en la dirección 941 y almacena el resultado en esta última posición. Se requieren tres instrucciones, que consumen tres ciclos de captación y tres de ejecución:

1. El contador de programa (PC) contiene el valor 300, la dirección de la primera instrucción. Esta instrucción (el valor hexadecimal 1940) se carga en el registro de instrucción (IR). Este proceso implicaría el uso del registro de dirección de memoria (MAR) y el registro de datos de memoria (MBR). Por simplicidad, se han ignorado estos registros intermedios.

2. Los primeros cuatro bits de IR (primer dígito hexadecimal=1) indican que el acumulador (AC) se va a cargar. Los restantes 12 bits (tres dígitos hexadecimales=940) especifican la dirección del dato que se va a cargar.

Figura 3.5 a

3. El registro PC se incrementa, y se capta la siguiente instrucción (5 941) desde la dirección 301.4. El contenido anterior de AC y el de la posición de memoria 941 se suman, y el resultado se

almacena en AC.

Figura 3.5 b

Page 8: resumen_Organizacion_y_arquitectura_de_computadores

5. El registro.PC se incrementa, y se capta la siguiente instrucción (2 941) desde la posición 302.6. El contenido de AC se almacena en la posición 941.

Figura 3.5 c

En este ejemplo, se necesitan tres ciclos de instrucción, cada uno con un ciclo de captación y un ciclo de ejecución, para sumar el contenido de la posición 940 y el contenido de la 941. Con un conjunto de instrucciones más complejo, se hubieran necesitado menos ciclos. Así, en algunos procesadores más antiguos se incluían instrucciones con más de una dirección. De esta forma, el ciclo de ejecución de una instrucción generaría más de una referencia a memoria. Además, en lugar de referencias a memoria, una instrucción puede especificar una operación de E/S.

Por ejemplo, la instrucción del PDP-11 expresada simbólicamente como ADD B,A almacena la suma de los contenidos de las posiciones B y A en la posición de memoria A. Se produce un solo ciclo de instrucción con los siguientes pasos:

• Se capta la instrucción ADD.• El contenido de la posición de memoria A se lee y pasa al procesador• El contenido de la posición de memoria B se lee y pasa al procesador. Para que el contenido de A

no se pierda, el procesador debe tener al menos dos registros para almacenar valores de memoria, en lugar de un solo acumulador.

• Se suman los dos valores.• El procesador escribe el resultado en la posición de memoria A.

Así, el ciclo de ejecución de una instrucción particular puede ocasionar más de una referencia a memoria. Además, en lugar de referencias a memoria, una instrucción puede especificar una operación de E/S. Con estas consideraciones adicionales en mente, la Figura 3.6 proporciona una visión más detallada del ciclo de instrucción básico de la Figura 3.3. La figura tiene la forma de un diagrama de estados. Para un ciclo de instrucción dado, algunos estados pueden no darse y otros pueden visitarse más de una vez. Los estados se describen a continuación:

• Cálculo de la dirección de la instrucción (iac, Instruction Address Calculation): determina la dirección de la siguiente instrucción a ejecutar. Normalmente, esto implica añadir un número fijo a la dirección de la instrucción previa. Por ejemplo, si las instrucciones tienen un tamaño de 16 bits y la memoria se organiza en palabras de 16 bits, se suma 1 a la dirección previa. En cambio, si la memoria se organiza en bytes (8 bits) direccionables individualmente, entonces hay que sumar 2 a la dirección previa.

• Captación de instrucción (if, Instruction Fetch): la CPU lee la instrucción desde su posición en memoria.

• Decodificación de la operación indicada en la instrucción (iod, Instruction Operation Decoding): analiza la instrucción para determinar el tipo de operación a realizar y el (los) operando(s) a utilizar.

• Cálculo de la dirección del operando (oac, Operand Address Calculation): si la instrucción implica una referencia a un operando en memoria o disponible mediante E/S, determina la dirección del operando.

Page 9: resumen_Organizacion_y_arquitectura_de_computadores

• Captación de operando (of, Operand Fetch): capta el operando desde memoria o se lee desde el dispositivo de E/S.

• Operación con los datos (do, Data Operatioti): realiza la operación indicada en la instrucción.• Almacenamiento de operando (os, Operand Store): escribe el resultado en memoria o lo saca a

través de un dispositivo de E/S.

Los estados en la parte superior de la Figura 3.6 ocasionan intercambios entre la CPU y la memoria o un módulo de E/S. Los estados en la parte inferior del diagrama solo ocasionan operaciones internas a la CPU. El estado oac aparece dos veces, puesto que una instrucción puede ocasionar una lectura, una escritura, o ambas cosas. No obstante, la acción realizada en ese estado es la misma en ambos casos, y por eso sólo se necesita un único identificador de estado.

Obsérvese además que en el diagrama se considera la posibilidad de múltiples operandos y múltiples resultados puesto que se necesitan en algunas instrucciones de ciertas máquinas. Por ejemplo, la instrucción ADD A,B del PDP-1 1 da lugar a la siguiente secuencia de estados: iac,if,iod,oac,of,oac,of,oac,os.

Por último, en algunas máquinas, con una única instrucción se puede especificar una operación a realizar con un vector (matriz unidimensional) de números o con una cadena (matriz unidimensional) de caracteres. Como indica la Figura 3.6, esto implicaría una repetición de estados de captación y/o almacenamiento de operando.