Vous êtes sur la page 1sur 117

UNIVERSIDAD NACIONAL DE INGENIERIA

FACULTAD DE ELECTROTECNIA Y COMPUTACION


DEPARTAMENTO DE ARQUITECTURA Y SISTEMAS

Arquitecturas de Máquinas
Computadoras II
José L. Díaz Chow

Segundo Semestre 2018

Managua, Nicaragua
Arquitectura de Máquinas Computadoras II
Guía de estudio para el estudiante

Elaborado por
Ing. José Díaz Chow

Última Revisión: Septiembre 2018


Universidad Nacional de Ingeniería, UNI.
Managua, Nicaragua.
INDICE DE CONTENIDO

1 INTRODUCCION A LA ARQUITECTURA DE COMPUTADORAS 1

1.1 INTRODUCCION A LA ASIGNATURA 1


1.2 EVOLUCION DE LAS COMPUTADORAS. 1
1.3 MÁQUINA SECUENCIAL DE PROGRAMA ALMACENADO. 6
1.4 ORGANIZACION DE LA COMPUTADORA. 7
1.4.1 ENFOQUE FUNCIONAL 7
1.4.2 ENFOQUE ESTRUCTURAL 9
2 ORGANIZACION DEL PROCESADOR 11

2.1 EL PROCESADOR 11
2.2 INSTRUCCIÓN Y CICLO DE INSTRUCCIÓN 11
2.3 ELEMENTOS PARA ESTRUCTURAR EL PROCESADOR 12
2.4 ESTRUCTURA BÁSICA DEL PROCESADOR 13
2.5 ARQUITECTURAS DE ACUMULADOR, PILA Y REGISTROS. 15
2.5.1 MÁQUINA DE ACUMULADOR 15
2.5.2 MÁQUINA DE PILA 16
2.5.3 MÁQUINA DE REGISTROS. 18
3 DISEÑO DEL CONJUNTO DE INSTRUCCIONES 21

3.1 INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES 21


3.1.1 CONJUNTO DE INSTRUCCIONES 21
3.1.2 INSTRUCCIÓN 21
3.1.3 CLASIFICACIÓN DE LAS INSTRUCCIONES 22
3.1.4 FILOSOFÍAS DE DISEÑO DEL CONJUNTO DE INSTRUCCIONES 23
3.2 FORMATO DE INSTRUCCIONES 24
3.3 CODIGO DE OPERACIÓN 25
3.3.1 CODIFICACIÓN DE BLOQUE FIJO 25
3.3.2 CODIFICACIÓN DE BLOQUE EXPANDIDO 25
3.3.3 CODIFICACIÓN HUFFMAN 27
3.4 CAMPOS DE DIRECCIONAMIENTO 30
3.5 MODOS DE DIRECCIONAMIENTO 31
3.5.1 MODO INMEDIATO 31
3.5.2 MODO DIRECTO, DE REGISTRO O DIRECTO DE REGISTRO 31
3.5.3 MODO ABSOLUTO O DIRECTO DE MEMORIA 32
3.5.4 MODO INDIRECTO DE REGISTRO 32
3.5.5 MODO INDIRECTO DE MEMORIA 33
3.5.6 MODO DE AUTOINCREMENTO 33
3.5.7 MODO DE AUTODECREMENTO 34
3.5.8 MODOS DESPLAZADOS 35
3.5.9 MODO DE INDICE O INDIZADO 35
3.5.10 MODO DE BASE - DESPLAZAMIENTO 36
3.5.11 MODO DE DESPLAZAMIENTO CON ESCALACION: 36
3.5.12 MODO DE DESPLAZAMIENTO RELATIVO 37
3.6 CODIFICACIÓN DEL MD 37
4 UNIDAD DE EJECUCION 39

4.1 LA FUNCION DE PROCESAMIENTO 39


4.2 REPRESENTACION DE DATOS 39
4.2.1 REPRESENTACIÓN DE ENTEROS CON SIGNO. 39
4.2.2 NÚMEROS EN PUNTO FLOTANTE 41
4.2.3 OTROS TIPOS DE DATOS: 42
4.3 LA UNIDAD ARITMETICA 42
4.4 LA UNIDAD LOGICA 46
4.5 DISEÑO DE LA ALU 46
4.6 EXTENSIONES DE LA ALU 47
4.7 REGISTROS DE PROPOSITO GENERAL 47
4.7.1 DISEÑO DE LOS REGISTROS DE PROPÓSITO GENERAL O GPR 47
4.8 ARITMETICA EN PUNTO FLOTANTE 50
5. LA UNIDAD DE CONTROL 51

5.1 LA FUNCION DE CONTROL 51


5.2 OPERACIONES BASICAS DE CONTROL 52
5.3 PASOS DE CONTROL PARA LA EJECUCION DE UNA INSTRUCCION 54
5.4 UNIDAD DE CONTROL FIJO 58
5.5 UNIDAD DE CONTROL MICROPROGRAMADA 61
5.6 MICROPROGRAMA Y MICRORRAMIFICACIONES 67
5.7 APLICACIONES DE LA MICROPROGRAMACION 70
6. EL SISTEMA DE MEMORIA 71

6.1 LA FUNCIÓN DE ALMACENAMIENTO 71


6.2 CARACTERIZACIÓN DE LA MEMORIA. 72
6.3 ORGANIZACIÓN DE LA MEMORIA PRINCIPAL. 75
6.4 JERARQUÍA DE MEMORIA. 76
6.4.1 BASES DE LA JERARQUÍA DE MEMORIA 77
6.4.2 CARACTERÍSTICAS DE LA JERARQUÍA DE MEMORIA 77
6.5 SISTEMA DE MEMORIA CON CACHÉ 77
6.5.1 INTERCONEXIÓN CACHÉ - MEMORIA PRINCIPAL 78
6.5.2 ELEMENTOS DE DISEÑO DE LA CACHÉ 79
6.5.3 TÉCNICAS DE MAPEO 79
6.5.4 ALGORITMOS DE SUSTITUCIÓN DE BLOQUE 83
6.5.5 POLÍTICA DE ESCRITURA 83
7 EL SISTEMA DE ENTRADA-SALIDA 84

7.1 LA FUNCIÓN DE TRANSFERENCIA EXTERNA 84


7.2 ESTRUCTURA DE INTERCONEXIÓN DE LA COMPUTADORA 84
7.2.1 INTERCONEXIÓN CON BUSES 84
7.2.2 DISEÑO DEL BUS 86
7.2.3 BUSES ESTÁNDARES 87
7.3 COMUNICACIÓN CON DISPOSITIVOS EXTERNOS 89
7.3.1 DIRECCIONAMIENTO DE DISPOSITIVOS EXTERNOS 89
7.3.2 MODOS DE TRANSFERENCIA Y SINCRONIZACIÓN 90
7.4 ESTRUCTURA DEL MÓDULO DE E/S 91
7.5 INTERRUPCIONES 92
7.5.1 TIPOS DE INTERRUPCIONES 92
7.5.2 DISEÑO SIMPLE DEL SISTEMA DE INTERRUPCIONES 92
7.5.3 MÚLTIPLES DISPOSITIVOS 93
7.5.4 CONCURRENCIA DE MÚLTIPLES INTERRUPCIONES: 94
7.5.5 HABILITACIÓN E INHABILITACIÓN DE INTERRUPCIONES 95
7.5.6 ENMASCARADO SELECTIVO DE INTERRUPCIONES: 96
7.5.7 INTERRUPCIONES NO ENMASCARABLES: 96
7.5.8 EJEMPLO DE ÁRBITRO DE INTERRUPCIONES 96
7.6 ACCESO DIRECTO A MEMORIA 98
7.6.1 TRANSFERENCIA DE DATOS DE ACCESO DIRECTO A MEMORIA 99
7.6.2 MODOS DE TRANSFERENCIA DE DATOS DMA 99
7.6.3 CONFIGURACIONES DE DMA 100
7.6.4 ACCESO AL BUS DE MÚLTIPLES CONTROLADORES DE DMA 101
7.7 PROCESADORES Y CANALES DE E/S 102
7.7.1 CANAL SELECTOR 102
7.7.2 CANAL MULTIPLEXADO 103
7.7.3 CANAL MULTIPLEXADO POR BLOQUES: 103
7.8 INTERFACES ESTÁNDARES 104
7.8.1 INTERFACES SERIE 104
7.8.2 INTERFACES PARALELAS 109
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I

1 INTRODUCCION A LA ARQUITECTURA DE COMPUTADORAS

1.1 INTRODUCCION A LA ASIGNATURA

El curso de Arquitectura de Máquinas Computadoras II incorpora tanto los aspectos de Arquitectura


como de Organización de Computadoras. En ella estaremos estudiando tanto el diseño como la estructura e
implementación de las computadoras desde una perspectiva básica, orientada a conocer y comprender los
principios de diseño y el funcionamiento de las computadoras, principalmente el procesador o unidad central
de proceso (CPU).

Dado que los conceptos de Arquitectura y Organización están íntimamente relacionados, es importante
diferenciarlos. Para ello podemos partir de que:

 Arquitectura son los atributos de un sistema que son visibles para un programador. Es decir, aquellas
características que determinan la ejecución lógica de un programa.
 Conjunto de instrucciones, número de bits usados para representar datos, modos de
direccionamiento de los mismos, forma de codificación de las instrucciones, denominación de los
registros, puertos y mecanismos de E/S, técnicas para mapeo y direccionamiento de memoria.
 Ejemplo: ¿Hay una instrucción de multiplicar?

 Organización se refiere a cómo se implementan las características estructuralmente.


 Estructura y funcionamiento de la ALU, Señales de control, buses e interfaces, tecnología de
memoria.
 Ejemplo: ¿Hay una unidad de multiplicar o se hace por sumas repetidas?

Podemos relacionar la Arquitectura con la Organización si tomamos en cuenta que la organización es la forma
de implementar la Arquitectura. Por ejemplo, una Arquitectura puede tener diferentes implementaciones
generando familias de máquinas que tienen la misma arquitectura pero diferente organización. Esto permite
compatibilidad hacia atrás del software. Ejemplos claros de estas familias de máquinas son la IBM System/370
y la 80x86 de Intel.

1.2 EVOLUCION DE LAS COMPUTADORAS.


Históricamente podemos definir dos grandes eras en la evolución de las computadoras. La primera
denominada mecánica que comprende más o menos desde el año 1600 hasta 1943. En ésta se han registrado
una serie de artefactos de cálculo mecánico como la Pascalina, el cilindro de pasos de Leibniz, culminando con
una serie computadoras más o menos programables que empleaban relés electromecánicos.

La mayoría de estas máquinas no son de mucho interés, dada su tecnología y la asignatura que nos atañe, sin
embargo, es importante anotar algunos hechos relevantes que fundaron los conceptos de la arquitectura de
computadoras como la conocemos hoy día. Anotaremos algunos de estos hitos:

Blaise Pascal (1642): Matemático.


Pascalina: suma y resta.

Docente: Ing. José Díaz Chow Página 1


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Gottfried Leibniz (1673): Matemático e inventor.


Mejora Pascalina: Sumar, restar, multiplicar y dividir.

Antonius Braun (1727): Matemático


Primera calculadora mecánica completa.

Charles Babbage (1822): Matemático, “Padre del computador moderno”.


Máquina diferencial: Cálculo automático de tablas matemáticas.
Máquina analítica: Realiza cualquier operación matemática. (No se completó)

George Boole (1847): Análisis matemático lógico.


Investigación de las leyes del pensamiento, Algebra de Boole.

Herman Hollerith (1889): Máquina de tarjetas perforada moderna.


Constituyó la Tabulating Machine Company (IBM actual).
Redujo tabulación del censo de EUA de 7.5 años a dos meses.

Konrad Zuse (1938): Construyó el primer computador mecánico, el Z1.


Máquina binaria. Sin apoyo del gobierno. No quedan vestigios.

Howard Aiken (1943): Diseño el Harvard Mark 1.


Computador electromecánico inspirado en la máquina de Babbage.

En resumen, en la era mecánica se diseñaron computadores basados en dispositivos mecánicos para reducir
el tiempo de cálculo y aumentar la precisión de los resultados. Esto tuvo dos grandes desventajas: la velocidad
limitada debido a la inercia de los componentes móviles (engranajes y poleas) y un producto pesado, poco
fiable y costoso.

Destaca con especial connotación, la conceptualización de una máquina de propósito general, la máquina
analítica de Babbage que ya presenta un diseño basado en unidades especializadas (Mill, control, entrada y
salida) y el empleo de instrucciones para definir la operación a realizarse. Esta misma conceptualización fue la
base del éxito del Mark I (aunque lo venció la tecnología) e ingrediente de la arquitectura de computadoras
posterior.

La segunda era, en la cual aún vivimos, se denomina electrónica y se inicia en 1946 con el lanzamiento oficial
de la primera computadora electrónica de propósito general, el ENIAC.

El ENIAC (Electronic Numerical Integrator And Calculator) fue completado hasta en 1946, bastante tarde para
su propósito, pues el proyecto fue una respuesta a necesidades militares de los Estados Unidos en tiempos de
la segunda guerra mundial. El laboratorio de Investigación de Balística (BRL) del Ejército, una agencia
responsable del desarrollo de tablas de tiro y de trayectorias para nuevas armas, tenía dificultades para
elaborar tales tablas con exactitud y dentro de un plazo de tiempo razonable. Sin estas tablas de tiro, las nuevas
armas y piezas de artillería eran inútiles para los artilleros. El BRL empleó a más de 200 personas, la mayoría
mujeres; las cuales, utilizando calculadoras de mesa resolvían las ecuaciones balísticas necesarias. La
preparación de las tablas para una sola arma le habría llevado a una persona muchas horas, incluso días. John
Mauchly, un físico catedrático de Ingeniería Eléctrica de la Universidad de Pensilvania, y John Presper Eckert
unos de sus alumnos, propusieron construir un computador de uso general usando tubos de vacío, para
utilizarlo en las aplicaciones de la BRL. En 1943 esta proposición fue aceptada por el ejército y se comenzó a

Página 2 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I

trabajar en el ENIAC. La máquina era enorme: pesaba 30 toneladas, ocupaba 1,5000 (unos 9 x 15 metros) pies
cuadrados. Contenía más de 1,8000 tubos de vacío, unas 70,000 resistencias, 10,000 condensadores, 6, 000
conmutadores y consumía 140 kilovatios de potencia. Su ventaja era su velocidad, unas 1,000 veces más rápida
que cualquier predecesor electromecánico, ya que era capaz de efectuar 5,000 sumas por segundo. Con el
surgimiento del ENIAC se da la primera generación de Computadoras. Para hacer justicia a la historia, debe
mencionarse que aparentemente antes del ENIAC, Konrad Suze en Alemania diseñó y construyó un
computador electrónico completo y funcional, sin embargo, éste fue destruido en la segunda guerra mundial
y no existe evidencia que respalde el dato histórico.

El ENIAC era una máquina decimal y no binaria. Es decir, los números estaban representados en forma decimal
y la aritmética se hacía también en forma decimal. Su memoria consistía en 20 acumuladores cada uno capaz
de mantener un número de 10 dígitos. Cada dígito estaba representado por una serie de diez tubos de vacío.
En un momento dado sólo un tubo estaba en ON representando un dígito. Uno de los mayores inconvenientes
del ENIAC era que tenía que ser programado mediante conmutadores e interconectando cables.

Como hemos visto, la tarea de programar una máquina como el ENIAC era muy tediosa. Se llegó a la conclusión
que la programación de la misma sería más fácil y práctica si se pudiera especificar el programa de alguna
manera formal y sencilla que la máquina pudiera interpretar de la misma manera en que se interpretan los
datos. Es más, si estas “instrucciones” se guardaran en alguna parte de la memoria, el procesador podría cargar
y ejecutarlas secuencialmente desde allí. Esta idea conocida como Concepto de Programa Almacenado, se
atribuye a John Von Neumann, Matemático Húngaro asesor del proyecto ENIAC. Paralelamente Turing, había
propuesto la misma idea de una forma diferente basada en un autómata finito que lee la definición de su
comportamiento desde una cinta perforada. La arquitectura de Von Neumann, especificada como modelo para
la construcción de un computador de programa almacenado denominado IAS, fue Implementada en 1952.

Los años 50 contemplaron el nacimiento de la industria de los computadores comerciales. Dos compañías
dominaron el mercado: Sperry e IBM. En 1947 Eckert y Mauchly se asociaron y crearon la primera computadora
con fines comerciales UNIVAC I que podía realizar tanto operaciones científicas como comerciales. A la UNIVAC
I siguió una serie de computadores comercializados por la Sperry-Rand, con un predominante enfoque al
campo científico.

Un hecho importante es la invención de la memoria de ferrita en 1952 por Jay Forrester en el MIT.

IBM por su parte sacó al mercado su primera máquina de programa almacenado en 1953: el 701, diseñado
sobre todo para aplicaciones de gestión. La serie que sucedió al 701 de IBM en los 50 la puso a la cabeza del
mercado de Computadores para negocios.

También en 1953 Fujitsu lanza la primera computadora japonesa: Facom100.

La segunda generación: Los transistores. El primer cambio importante en los computadores vino con
la sustitución de tubos de vacío por transistores. El transistor es más pequeño, más barato, disipa menos calor,
se puede conectar en placas discretas evitando las grandes masas de conductores y puede ser usado de la
misma manera que los tubos en la construcción de computadores. Este fue inventado en 1947 en los
laboratorios Bell y en los 50 provocó una gran revolución electrónica. Sin embargo las computadoras
totalmente transistorizadas emergieron hasta finales de la década. Con la nueva tecnología, aparecieron
nuevos nombres en el mercado cono NCR, RCA y la DEC, creadora de las populares PDP. IBM pronto consiguió
cerrar la brecha y se puso a la cabeza en ventas con la serie 7000 donde destacó la 7094, que introdujo un
prefetch rudimentario y el multiplexor para organizar los accesos a memoria desde el CPU o los canales de
datos.

Docente: Ing. José Díaz Chow Página 3


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Emergen las supercomputadoras a principios de los sesentas.

Tercera Generación: Circuitos integrados. Con la introducción de la microelectrónica a mediado de los


60 se pudo autocontener una cantidad de componentes discretos en un solo encapsulado, logrando mejoras
en la velocidad de transferencia entre los dispositivos internos. A esta época corresponden máquinas con
tecnología de pequeña y mediana escala de integración. La memoria, antes de núcleos de ferrita, es
semiconductora ahora. Surge la línea 360 de IBM y las PDP-5 / PDP-8.

La Cuarta Generación básicamente la pauta INTEL con la invención del chip microprocesador (P). Un
procesador completo autocontenido en un integrado, gracias a las ventajas de la tecnología MOS. Debido al
gran éxito de los microprocesadores Intel, pronto aparecen otros fabricantes en el terreno, como la National
Semiconductor, Zilog y Motorola.

El 4004. El primer P del mundo era de 4 bits y podía acceder a 4,096 palabras de 4 bits. Su repertorio consistía
de 45 instrucciones que limitaban bastante su campo de aplicación. En 1971, Intel lanzó el 8008, un P de 8
bits, con 3 instrucciones nuevas y memoria direccionable de 16K x 8. Todavía muy limitado para aplicaciones
grandes, el 8008 tuvo que ser reemplazado en 1973 por el 8080, el primer P moderno. El 8080 corría 10 veces
más rápido que el 8008, podía direccionar más memoria y era TTL compatible lo que hizo al P viable para
muchas otras aplicaciones. Tenía 7 registros de 8 bits, un puntero de pila de 16 bits y un PC de 16 bits también.
Pronto las otras compañías empezaron la producción masiva de Ps de 8 bits. La explosión había comenzado.

En el 77, Intel introdujo el 8085, que era sólo un poco más rápido que el 8080 e integraba el reloj y el
controlador del sistema al chip. Zilog introdujo el Z80 de 8 bits, con 80 instrucciones más que el 8008, bus de
direcciones de 16 bits (512K en RAM) y permitía interrupciones vectorizadas. El Z80 ha sido un procesador
muy popular en la industria de controladores de hardware para mando de procesos productivos. Por este
tiempo, también Motorola lanzó su procesador 6800 de 8 bits, 16 bits de direcciones, 2 registros de datos, 1
de índice y un SP, todos de 8 bits. Pronto lo siguieron el 6801, 6803 y el 6809 que duplicaba los índices y el SP
y podía multiplicar.

En 1978 se lanza el 8086 y un año después el 8088. Ambos eran dispositivos de 16 bits, con un tiempo de
ejecución de unos 400 ns/instrucción. Además podían direccionar hasta 1MB de RAM o 512K palabras de 16
bits. Esto permitió al P poder ejecutar las aplicaciones que se corrían en minicomputadoras pequeñas. Se
agregó hardware para multiplicar y dividir. La diferencia del 8088 con el 8086 era la búsqueda de
compatibilidad hacia atrás. El 8086 tenía una ruta de datos de 16 bits en tanto el 8088 la tenía de 8, además
su capacidad de prefetch variaba pues la cola del 8086 era de 6 y la del 8088 sólo de 4 bytes.

Por ese tiempo National Semiconductor presenta el PACE de 16 bits y Texas Instruments saca al mercado su
TMS9900 que tenía todos sus registros en memoria (que para la época era más rápida que los registros).

Un hecho de necesaria mención es el surgimiento de la PC o microcomputadora personal de IBM en 1981, que


vino a revolucionar el mercado y las tendencias de la computación en los últimos años.

Pronto la revolución de los 16 bits cobra auge con la aparición de grandes mejoras en los diseños. Aquí vale la
pena mencionar el MC68000 de Motorola y el Zilog Z8000, el NS16032 de National, el i80286 y el MC68010. El
Z8000 tenía 16 registros de 16 bits utilizables como registros de 8, 16, 32 y 64 bits. Incluía multiplicación y
división de 32 bits. El 68000 era un procesador de 32 bits en realidad con empaquetado externo de 16. Su bus

Página 4 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I

de direcciones era de 24 bits y no usaba registros de segmentos. Estos procesadores permitían el uso de dos
modos de operación: usuario y supervisor o sistema operativo (protegido).

Los 80 trajeron la producción de chips de 32 bits y los procesadores RISC. El 80386 de Intel apareció en el 85.
Intel entró algo tarde a los productos de 32 bits. Sabemos que Motorola tenía procesadores de 32 bits internos
que mantenía como de 16 para estar en la competencia. Los laboratorios Bell y Hewlett Packard habían lanzado
ya procesadores de 32 bits al mercado al igual que la NS con el NS32032. Una serie de mejoras a los
procesadores de 32 bits se incluyen a finales de los 80 con la aparición del 80486 que ya incluye características
de paralelismo prestadas de RISC. Toman auge como competencia de Intel en la producción de P, las
compañías Cyrix, IBM y AMD. El campo de mayor producción y venta es el mercado de las microcomputadoras
del tipo IBM Compatibles, basadas en la familia 80x86 de Intel y sus competidores, con lo cual se lucha por
darle al microprocesador toda la potencia de las maxicomputadoras.

En el mundo del microprocesador, tan vasto, la ruta de los procesadores para IBM PC compatibles es más fácil
de seguir y afín a nuestro entorno, por tanto en el resto de esta breve reseña histórica, nos centraremos en la
evolución de estos procesadores.

En 1993, al 80486 le sucede el Pentium, un procesador de 32 bits con ruta de datos de 64. El Pentium introduce
mejoras grandes en su arquitectura, que se irán refinando con el tiempo. Los competidores lanzan el respectivo
“Pentium relative” 5x86 de Cyrix y luego el 6x86. AMD por su cuenta presenta el K5. Al Pentium le siguió
el Pentium-Pro de Intel, diseñado para sistemas de alto rendimiento. Integra muchas técnicas de paralelismo
y una gran caché en el mismo chip.

El uso de gran volumen de información gráfica y sonido en los últimos años hizo que los fabricantes pusieran
especial interés en el paralelismo y los multimedios, con lo cual aparecen en escena el MMX y posteriormente
el Pentium II de Intel. Por su lado Cyrix presenta el Media GX y 6x86MMX para competir con Intel. AMD
presenta el K6 y el K6-2 con un nuevo repertorio gráfico “3D Now”. Con la introducción del Pentium II, Intel
clasificó sus procesadores en tres categorías, según su capacidad y mercado destino: Celeron (inicialmente sin
caché y luego con solo 128 KB a velocidad plena del CPU para una PC básica), Pentium II propiamente (de 512K
de caché iniciales y orientado a estaciones de trabajo) y el Xeon que está especialmente diseñado para
servidores y que contaba con cachés de hasta 2Mb y velocidades de hasta 450 MHz.

Para evitar perder el liderazgo en el mercado, con la introducción del conjunto de instrucciones especializados
para multimedios y juegos de AMD, Intel reposta con la introducción de su propio conjunto extendido SSE que
integra en el Pentium III. La frecuencia del núcleo del procesador también es objeto de competencia y se logran
procesadores Pentium III de hasta 1,13GHz de frecuencia del núcleo y 133MHz en el bus del sistema con la
línea Coppermine. AMD introduce el Athlon, inicialmente de 1GHz y posteriormente Duron, de menor precio,
para competir con el Celeron.

Al Pentium III siguió el Pentium 4. Esta es una nueva y revolucionaria arquitectura que optimiza el paralelismo
obtenido en procesadores de 32 bits. Su frecuencia de núcleo básica es de 1.4 GHz, Nuevos Athlon y Duron
(este último, competencia del Celeron) de AMD han salido al mercado, Nuevas caras como Transmeta, han
emergido en la competencia de las pc móviles (notebooks, palms, etc). El Pentium 4 ha mantenido las tres
líneas de procesadores: Celeron con destino al mercado SOHO (Small Office and HOme) con frecuencias de
más de 2 GHz y 256kB de caché L2, el Pentium 4 para estaciones de trabajo y el Xeon para servidores. Estos
últimos con frecuencias de hasta poco más de 4 GHz, nuevas técnicas paralelas como hiperthreading y cachés
L2 de 256 y 512 en el primero y hasta 1MB en el segundo.

Docente: Ing. José Díaz Chow Página 5


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Paralelamente al P4, Intel diseño y lanzó al mercado en el año 2001 una totalmente nueva arquitectura de 64
bits en un procesador denominado Itanium, orientado a estaciones de trabajo y servidores, que guarda
compatibilidad con la arquitectura de 32 bits. Ante la dificultad de aceptación del Itanium en el mercado, y la
introducción de procesadores de AMD de 64 bits, Intel lleva su arquitectura ix86 a un nuevo nivel
expandiéndola a 64 bits con compatibilidad binaria a su arquitectura de 32 bits original. Así hoy día tenemos
en la misma línea del procesador Pentium, sucesores del P4, dos opciones de arquitectura en el mismo CPU: la
x86 tradicional y la nueva x64 que tiene un nuevo repertorio de instrucciones con espacio de direccionamiento
de 264 bytes que remueve las barreras de 4GB de la arquitectura x86.

Es ahora como nunca antes que el microprocesador ha competido con las grandes máquinas. Hoy día es posible
encontrar una máquina de escritorio de menos de mil dólares con la misma capacidad de procesamiento,
memoria y almacenamiento que una mainframe de antaño de varios millones de dólares. Actualmente la
barrera de la frecuencia de núcleo se está ganando con paralelismo, por lo cual ya los procesadores “solo” son
la excepción y el mercado se está orientando a procesadores multinúcleo que contienen varios CPUs en un
mismo chip.

Podemos finalizar diciendo que la computadora ha evolucionado a pasos agigantados desde sus orígenes a la
fecha, convirtiéndose probablemente, en la herramienta más versátil que haya inventado el hombre jamás. La
computadora ha generado toda una revolución social, tan importante como la agrícola y la industrial. Las
repercusiones de esta revolución se maximizan con las redes de computadoras, los dispositivos móviles y las
telecomunicaciones digitales. Esto ha definido una nueva era en la historia de civilización humana, la era de la
información. Era en que tenemos el privilegio de vivir.

1.3 MÁQUINA SECUENCIAL DE PROGRAMA ALMACENADO.


En uno de los reportes del proyecto ENIAC, John Von Neumann, que fungía como asesor matemático, propone
una nueva forma de diseñar y construir computadoras. Algunos de estos conceptos recogen ideas anteriores,
pero lo revolucionario de la propuesta de Von Neumann era el concepto de máquina secuencial de programa
almacenado. Este concepto establece que los principios de diseño de las computadoras deben contemplar tres
aspectos básicos:

a) Programa almacenado: Definición de instrucciones simples con las que se pueda programar
cualquier tarea de cálculo de la máquina en forma de una secuencia de instrucciones y la posibilidad
de cargar estos programas en la misma memoria que se cargan los datos.
b) Máquina secuencial: Una vez cargados el programa y los datos en la memoria, para realizar la tarea
de cómputo, basta lograr que la máquina realice el programa ejecutando instrucción tras instrucción
desde la memoria gracias a un secuenciador o dispositivo de control.
c) La implementación de tal máquina requiere cinco unidades funcionales (actualización del concepto
de Babbage): Un órgano de cálculo que ejecute las instrucciones, la memoria, el control, y finalmente
unidades de entrada y salida que permitan a la computadora obtener los datos y programas del
mundo exterior y entregar los resultados de los cálculos.

A tal especificación de diseño de máquinas computadoras se denominó Arquitectura Von Neumann o de


programa almacenado y constituyen hoy día la base de la arquitectura de computadoras modernas. Algunas
ventajas y características de la arquitectura de Von Neumann sobre las implementaciones de su época son:

Página 6 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I

 Las secuencias de instrucciones o programas se podían guardar en la memoria y por tanto, alimentar
la máquina con nuevos programas para nuevas operaciones, modificar el programa en tiempo de
ejecución y tener un computador de verdadero propósito general.

 La máquina secuencialmente ejecuta un ciclo de instrucción, leyendo instrucciones y ejecutándolas


una tras otra. El dispositivo de control recoge una instrucción desde la memoria, interpreta su
significado, trae los datos necesarios desde la memoria al órgano de cálculo, instruye al mismo
realizar la operación y luego almacena el resultado. Todas estas acciones implican traslado de datos e
instrucciones entre las unidades funcionales. Para ello existe una estructura de interconexión. Los
principales enlaces de ésta se muestran en la figura 1.1.

Entrada Memoria Salida

Control Cálculo
Camino o Flujo de los Datos

Señales de Control desde la UC


.

Solicitudes o señales hacia la UC .

Figura 1.1. Unidades Funcionales de la Arquitectura Von Neumann

1.4 ORGANIZACION DE LA COMPUTADORA.

La arquitectura Von Neumann, ha sido el punto de partida de la mayoría de las máquinas computadoras
modernas. La organización de las unidades ha cambiado un poco hoy día con los avances en tecnología, sin
embargo la esencia aún se mantiene. Se han introducido nuevos enfoques respecto a cómo se describe una
organización y los términos aplicados. Adicionalmente, en la búsqueda de mejores prestaciones se han definido
nuevas técnicas de diseño basadas en paralelismo y ejecución no secuencial, que no se ajustan a la arquitectura
Von Neumann en algunas de sus características, pero éstas máquinas serán tratadas hasta en Arquitectura de
Máquinas Computadoras III.

La organización de una computadora puede definirse tanto de forma funcional como estructural. De manera
funcional se expresa en términos de las operaciones que se realizan y el flujo de los datos entre los
componentes funcionales. Estructuralmente, la organización se define en términos de los componentes físicos
que conforman el todo y sus relaciones. En nuestro caso, decimos que un ordenador es un sistema que se
compone de subsistemas, los cuales, a su vez, se conforman de unidades o componentes. Los subsistemas se
interconectan y comunican mediante una estructura de interconexión.

1.4.1 Enfoque Funcional

Las operaciones que una computadora es capaz de hacer son:

 Procesamiento de datos

Docente: Ing. José Díaz Chow Página 7


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 Almacenamiento de Datos
 Traslado de datos
 Operaciones de control

Por tanto se requieren cuatro elementos que ejecuten estas funciones. La figura 1.2 muestra la definición
funcional de una computadora con estos elementos.

Facilidad de
Almacenamiento
de Datos

Aparato de
Traslado de Mecanismo
datos de Control

Facilidad de
Procesamiento
de Datos

Figura 1.2. Vista funcional de la computadora

Las flechas muestran la interacción entre los elementos funcionales y el camino que seguirían los datos para
recibir servicio de las diferentes operaciones de la computadora. Por ejemplo, la operación de movimiento
de datos que se efectúa desde el teclado a la pantalla, seguirá el camino mostrado en la figura 1.3. El camino
de los datos se muestra con la flecha en color rojo.

Facilidad de
Almacenamiento
de Datos

Aparato de
Traslado de Mecanismo
datos de Control

Facilidad de
Procesamiento
de Datos

Figura 1.3. – Operación de traslado de datos

Página 8 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I

1.4.2 Enfoque Estructural

Estructuralmente, podemos considerar que la computadora se compone de tres componentes: El


sistema de procesamiento o procesador, el sistema de almacenamiento o memoria y el sistema de entrada /
salida que permite la comunicación con dispositivos periféricos u otras computadoras. Interconectando los
tres sistemas tenemos a la estructura de interconexión, que en las máquinas actuales se implementa mediante
buses. Una visión general de esta propuesta se puede observar en las figura 1.4.

Periféricos Computadora

Memoria
Procesador

Computadora
Estructura de
Interconexión

E/S
Líneas de Comunicación

Figura 1.4. Estructura General de una Computadora

Las cinco unidades funcionales de la especificación original de Von Neumann, todavía son válidas, solo que
algunas de ellas se han unido para crear un subsistema. El órgano de cálculo junto al controlador constituye el
procesador o Unidad Central de Proceso (CPU). Por otro lado, la unidad de entrada y la de salida, son un mismo
subsistema al cual se denomina sistema de entrada / salida o E/S. La figura 1.5 muestra estas relaciones.

CPU

Mecanismo de
Organo de Cálculo
Control

Estructura de Interconexión

Unidad de Entrada Unidad de Salida


Sistema de Memoria

Sistema de E/S

Figura 1.5. Organización de la computadora orientada a partes o bloques constructivos.

Docente: Ing. José Díaz Chow Página 9


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

1.4.2.1 P RO C ES AD O R O CP U

Desde una perspectiva más estructural, requerimos definir cómo la máquina ejecutará las
instrucciones. Estas instrucciones regularmente se traen de la memoria al CPU, donde se ejecutan. En este
proceso, el CPU requiere algún almacenamiento temporal interno. Para suplir esta necesidad se emplean
registros. Éstos no se muestran en la organización básica a bloques, ni tampoco el camino que los datos siguen
dentro del CPU. Una organización más detallada, muestra estos detalles arquitecturales y por lo general define
nuevas clasificaciones de unidades dentro del CPU.

Hoy día el órgano de cálculo de Von Neumann se denomina Unidad de ejecución o unidad aritmética y lógica
(ALU por sus siglas en inglés) y el mecanismo de control se denomina Unidad de Control. En el CPU, además de
los elementos de cálculo (ALU y opcionalmente otros dispositivos de cálculo especializado), se encuentran los
registros de almacenamiento temporal para manipulación de datos e instrucciones, las estructuras de
interconexión internas del CPU y los elementos de acceso a la estructura de interconexión general del sistema.

1.4.2.2 SISTEMA DE MEMORIA

El sistema de memoria permite el almacenamiento de los datos y programas con los cuales interactúa
el ordenador. Podemos diferenciar, a groso modo, tres tipos de Almacenamiento: El Principal, el Secundario y
el Intermedio. El primero, llamado memoria principal, consiste en un arreglo de celdas de almacenamiento de
lectura /escritura donde deben residir los programas para que el procesador los pueda acceder. Generalmente
esta memoria es volátil, es decir, que una vez que se completa la ejecución del programa o se apaga el
ordenador los datos que no se almacenen en un medio permanente, se pierden.

El almacenamiento secundario también llamado masivo, es por lo general, permanente y permite almacenar
los datos y programas durante largo tiempo en forma de archivos. Está organizado de diferente manera que la
memoria principal, en función de la tecnología de implementación. Actualmente se emplean tecnologías
magnéticas y ópticas para implementar este tipo de almacenamiento en forma de discos y cintas.

El almacenamiento intermedio, también llamado cachés, permite acelerar el acceso a programas y datos
durante la ejecución.

1.4.2.3 S I S TEM A D E E N TRAD A / S AL I D A

Esta es la interfaz al exterior de la computadora. Le permite obtener los datos y programas desde el
exterior y poder entregar los resultados del procesamiento o una copia de parte del almacenamiento
secundario al exterior. Generalmente se denominan periféricos a todos los dispositivos que pueden conectarse
al sistema de E/S y funcionar como dispositivos de entrada o salida de la computadora. Por ejemplo, el teclado
es la unidad de entrada estándar o predeterminada de la computadora y la pantalla del monitor, la de salida.

Página 10 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

2 ORGANIZACION DEL PROCESADOR

2.1 El Procesador
Los procesadores tienen como misión ejecutar operaciones de cómputo que le indica el programador.
Sabemos del modelo de Von Neumann que estas operaciones se definen como instrucciones. El procesador,
desde que recibe energía hasta que se apaga ejecuta constantemente instrucciones. Esta función de
procesamiento es la más importante en el funcionamiento de una computadora, por lo cual al procesador se
le denomina Unidad Central de Procesamiento o CPU. En esta unidad analizaremos las estructuras que
requiere un CPU muy sencillo para poder ejecutar una instrucción siguiendo los pasos del ciclo de Instrucción.

2.2 Instrucción y ciclo de instrucción


Como hemos estudiado antes, una instrucción es una orden que emite el programador al procesador
para que ejecute una de las operaciones que forman parte de su repertorio. La instrucción debe especificar la
operación a realizar y cómo obtener los datos u operandos para realizarla. Para este fin, la instrucción debe
tener una estructura lógica denominada formato de instrucción, que se estudiará más adelante.

La secuencia de pasos que sigue el procesador para ejecutar una instrucción se denomina Ciclo de
Instrucción. El Ciclo de Instrucción, se pueden organizar en dos bloques o fases de acuerdo a la acción que
ocurre. La primera fase, denominada FETCH o de Carga. Corresponde a los pasos necesarios para cargar la
instrucción desde la memoria al procesador.

La segunda fase, denominada EXECUTE, corresponde a aquellos pasos que permiten ejecutar la operación en
sí y almacenar el resultado:

- FASE FETCH
 Cargar la siguiente instrucción
 Incrementar el secuenciador
 Interpretar la Instrucción

- FASE EXECUTE
 Cargar los operandos
 Ejecutar la operación
 Guardar el resultado
 Verificar si hay solicitudes de interrupción

Docente: Ing. José Díaz Chow Página 11


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

2.3 Elementos para estructurar el Procesador


Para poder realizar su función, el procesador, necesita una serie de estructuras. A continuación se
expondrá qué tareas requiere llevar a cabo un procesador muy simple y deduciremos qué elementos
constructivos se requieren para ejecutar estas tareas, siguiendo las pautas que nos brinda el ciclo de
instrucción.

Para estar preparado para realizar sus funciones, el procesador debe:

 Poder acceder a memoria para leer las instrucciones y los operandos así como escribir los resultados.
Se necesita acceder a la dirección de memoria que apunta el PC para leer la próxima instrucción. De
acuerdo a la instrucción, puede requerirse leer de memoria los operandos y/o escribir a memoria, los
resultados de la operación. Para esto, el CPU debe tener un registro conectado al bus de direcciones
donde poner la dirección a acceder. A este registro lo llamaremos registro de dirección de memoria o
MAR por sus siglas en inglés. También requerimos otro conectado al bus de datos donde poner el valor
a escribir o tomar el valor leído desde la memoria. Este lo llamaremos registro de datos de memoria o
MDR por sus siglas en inglés. Por supuesto, se necesita una forma de indicarle a la memoria que realice
la operación de lectura o escritura y además poder saber cuándo la memoria terminó la operación,
sobre todo la de lectura. Hasta entonces el procesador puede asumir que en el MDR hay datos válidos.
Estas señales se implementan en la unidad de control: READ, WRITE, (que puede ser una sola línea del
Procesador R/W, 0 =R; 1 =W, además de alguna línea de habilitación de Memoria.) y MFC (Que en
nuestro caso será parte de la lógica de control de Memoria y que indicará al CPU que la función de
memoria se ha completado).

 Llevar control de la secuencia de instrucciones: Se necesita un secuenciador de instrucciones, es decir,


un mecanismo que vaya indicando una a una las instrucciones a cargar desde la memoria. Para ello,
todas las instrucciones del programa a ejecutar deben estar almacenadas de forma secuencial en la
memoria. El secuenciador se implementa empleando un registro que inicialmente se hace apuntar a
la primera instrucción del programa y luego se incrementará para apuntala a la siguiente y así en lo
sucesivo. Este registro de llama contador de programa o PC por sus siglas en inglés. Este enfoque es
muy flexible pues el PC, puede incrementarse dentro del procesador una vez cargada la instrucción
para que apunte a la siguiente. Otra ventaja, es en el caso de la implementación de saltos o llamados
a subrutinas, pues sólo se pone en el PC la dirección destino del salto o la subrutina y así controlamos
el flujo de instrucciones en el programa.

 Guardar la instrucción en un lugar donde la unidad de control la pueda interpretar. Para que durante
la ejecución de la instrucción, se pueda acceder a su contenido en cualquier momento, es necesario
otro registro para almacenar la instrucción durante la fase de ejecución. Este registro se le denomina
registro de instrucciones o IR por sus siglas en inglés. El IR está conectado directamente a los circuitos
de la unidad de control.

 Poder realizar cálculos aritméticos y lógicos. Para esto el CPU requiere de una unidad de cálculos
aritméticos y lógicos a la que llamaremos ALU por sus siglas en inglés. Realiza todas las operaciones
aritméticas, como la suma y la resta. Y lógicas como AND, OR, XOR, NOT, etc. También realiza otras
operaciones como comparaciones y operaciones a nivel de Bits.

 Obtener los operandos para realizar las operaciones. Estos pueden estar en memoria, ser definidos
directamente en la instrucción o residir en un almacenamiento interno del CPU. Es ventajoso mantener

Página 12 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

los operandos dentro del CPU. Para esto se pueden disponer de registros de propósito general con los
cuales pueda la ALU realizar las operaciones.

 Mantener el estado de la máquina. Para esto se requieren tener banderas y códigos de condición. Por
ejemplo, para comparar dos números se puede restar el primero del segundo y si el resultado fue cero,
podemos asegurar que son iguales. Si el resultado de diferente de cero y positivo, el primero es mayor
pero si es negativo, el segundo es mayor. Para llegar a estas conclusiones necesitamos almacenar las
condiciones de resultados como cero (Z), Signo (S), etc. Estas banderas y códigos se almacenan en un
registro llamado F o Flags.

 Interpretar la instrucción y luego controlar la ejecución de todos los pasos para ejecutarla. Para esto
se requiere de una unidad de control o CU que tenga un decodificador capaz de interpretar los
diferentes campos lógicos del formato de instrucciones. Además esta unidad debe poder generar las
señales necesarias para que se realicen todos los pasos del ciclo de instrucción adecuadamente.

2.4 Estructura Básica del Procesador


Los elementos constructivos del CPU se organizan de acuerdo al trabajo que realizan. Para estructurar
coherentemente el procesador estos elementos se agrupan en unidades que se interconectan para estructurar
un todo. Cada elemento se debe comunicar con los otros para poder realizar su función. Esto se logra a través
de una estructura de interconexión. Existen dos formas de implementar esta estructura:

Uso de conexión directa: Consiste en realizar la conexión cableada directamente de la salida de


un elemento a la entrada del otro. En caso de requerirse lógica de enrutamiento, se emplean los
elementos digitales adecuados como multiplexores.

Uso de Buses: Consiste en definir un conjunto de líneas para interconectar múltiples elementos
entre sí. Debe, sin embargo, implementarse la lógica de control que garantice el enrutamiento del
dispositivo fuente al destino. Cabe mencionar que debe evitarse que dos dispositivos sean fuente
en el bus de forma simultánea pues esto provocaría cortocircuitos en las líneas cuando esta esté
sometida a dos valores lógicos diferentes.

La figura a continuación muestra un ejemplo de estructura de CPU con una posible interconexión de
los elementos mediante buses.

Docente: Ing. José Díaz Chow Página 13


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

CPU

R0 MAR
Entrada / Salida

R1 MDR
.
.
. SOURCE

Bus Interno del Procesador


Rn-1

Bus de Datos

Bus de Direcciones
TMP
Bus del sistema

Y SP

ALUsel PC
ALU
IR

Z
Memoria

Unidad de
Control

FLAGS
READ
WRITE
IO/M

INTACK INT

Figura 2.1 Elementos estructurales del procesador.

Modernamente se suele separar la estructura CPU


del CPU en dos vistas: El camino de los datos o Control
Datapath y el control. Conforman el Datapath Líneas de Control
Unidad de
todos los elementos por los que discurren los Control
datos dentro del CPU, especialmente la ALU, los Instrucciones
registros de propósito general, los registros de Señales de Control

acceso a memoria y los registros adicionales.


Registros Interfaz al Bus y
Dentro del Datapath se organizan los órganos de Propósito ALU Carga de
Instrucciones
Direcciones y Datos
General
de cálculo (ALU y Registros de datos) en una
entidad lógica denominada unidad de Flags

ejecución. Los registros de acceso al bus y Unidad de Ejecución Datapath


registros auxiliares se suelen organizar en una
unidad denominada “de Interfaz y carga de
instrucciones”. Figura 2.2. Organización del CPU en Datapath y Control

El control incluye a la unidad de control que se encarga de coordinar y realizar las acciones necesarias para que
se ejecuten las instrucciones.

Página 14 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Ejecución de la instrucción:

Habiendo definido una estructura organizativa para nuestro procesador, estudiemos de forma general, los
pasos para traer y ejecutar una instrucción basándonos en éstos elementos constructivos:

 El PC tiene siempre la dirección de la próxima instrucción (Cuando la máquina se enciende, éste se inicializa
por hardware para apuntar la primera instrucción del programa de arranque). Primero el contenido del PC
es transferido al MAR y la unidad de control envía una señal de lectura a la memoria.

 El PC es incrementado por el esquema de secuenciamiento para apuntar a la siguiente dirección.

 Después de un cierto tiempo correspondiente al tiempo de acceso de memoria, la palabra direccionada (la
instrucción del programa) es leída de la memoria y cargada en el MDR.

 El contenido del MDR es transferido al IR Ahora la instrucción esta lista para ser decodificada y ejecutada.

 Si dicha instrucción involucra una operación que requiere operandos y estos residen en la memoria (ya
que podrían estar en los registros generales del procesador) tienen que ser traídos enviando su dirección
al MAR e iniciando un ciclo de lectura.

 Cuando el operando ha sido leído y trasladado de la memoria al MDR, entonces será transferido del MDR
a la ALU o a algún registro de trabajo auxiliar para almacenarlo temporalmente mientras se traen otros
operandos. La operación se repite para traer todos los operandos, normalmente dos.

 Se ejecuta la operación, mediante la ALU y el resultado es enviado al MDR si debe ser almacenado en
memoria o al registro destino en el CPU. Si los operandos o el resultado requiere acceso al subsistema de
E/S, se procese de igual forma que si se accede a Memoria, excepto que la UC se encarga de habilitar el
dispositivo específico en lugar de la Memoria.

2.5 Arquitecturas de Acumulador, Pila y Registros.


Dependiendo de la forma en que trae, almacena temporalmente y trata los operandos y el resultado, los
procesadores se han clasificado en tres tipos de arquitecturas o estilos de procesador: De acumulador, de
Registros y de Pila. Cabe mencionar que en la actualidad las máquinas más exitosas combinan características
de las tres aunque predominan las máquinas orientadas a registros.

2.5.1 Máquina de Acumulador

Este es el esquema típico de Von Neumann. En un procesador basado en un solo registro denominado
acumulador, de acuerdo a su función. Se carece de registros de propósito general para manipular los operados
dentro del CPU. Todo el trabajo se realiza el acumulador y la memoria. Hoy día esto parece contraproducente,
sin embargo, en el tiempo que esta arquitectura se implementó, la memoria era más rápida que los registros
del procesador y estos últimos eran extremadamente caros de producir. Para realizar una operación, el
programador debe tomar el primer operando y llevarlo al acumulador, realizar la operación con el acumulador
y el contenido de una dirección de memoria (el resultado se guarda en el acumulador) y finalmente transferir
el contenido del acumulador a memoria. La figura 2.3 nos muestra una arquitectura típica de acumulador.

Docente: Ing. José Díaz Chow Página 15


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

PC MAR MDR

Memoria e
Interface de
E/S

IR

Acc
Unidad
de
Control

ALU F

Figura 2.3. Posible arquitectura de una máquina de Acumulador.

En este tipo de procesador tenemos dos instrucciones de acceso a memoria: la que carga un dato al
acumulador y la almacena el acumulador en memoria. Las instrucciones binarias se realizan con el
acumulador como primer operando y un operando en memoria o definido directamente como número. Por
ejemplo:

INSTRUCCION OPERACIÓN REALIZADA

LOAD X Acc  M(X) ; X es una variable de memoria


LOAD (m) Acc  M(m) ; m es una dirección de memoria
LOAD n Acc  n ; n es un número entero.
STORE X M(X)  Acc ; X es una variable de memoria
STORE (m) M(m)  Acc ; m es una dirección de memoria
ADD X Acc  (Acc) + M(X) ; X es una variable de memoria
ADD (m) Acc  (Acc) + M(m) ; m es una dirección de memoria
ADD n Acc  (Acc) + n ; n es un número entero.

Ejemplos de procesadores basados en acumulador son el IAS de Von Neumann, el M6502 y el 6809 de
Motorola. Este último cuenta con dos acumuladores A y B.

2.5.2 Máquina de Pila

Una máquina de pila es una computadora en la cual el elemento primario de almacenamiento de datos
para la CPU es una pila. Esta se implementa como un área de la memoria controlada por el CPU a la cual no
tienen acceso los programas del usuario. En las primeras máquinas de pila, todos los operandos se

Página 16 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

manejaban mediante la pila, hoy día, sin embargo, la pila se emplea como una estructura de datos auxiliar
para el CPU.

La ventaja principal de esta organización es que las manipulaciones de las pilas pueden ser realizadas en
una alta velocidad. La alta velocidad es una característica deseable en una computadora que va proporcionar
un servicio rápido de interrupciones, por ejemplo la IBM-370.

Las pilas más comunes son las de


empuje hacia abajo, es decir, que inician PC MA R SP
A rea de la
en la dirección más alta de memoria y memoria para
pila
crecen en el sentido de las direcciones
de memoria más bajas. La organización
Resto de la
de la máquina de pila es mostrada en la memoria

figura 2.4 . El registro SP es el puntero a IR

Pila, es un registro que siempre tiene la Unidad


dirección de la última palabra insertada de
Control
en la pila: Tope de pila o TOS (Top of temp

Stack). En función de este registro,


también se puede obtener el elemento
inmediato bajo TOS: Próximo en pila o A LU F
NOS (Next on Stack).

En el evento de una operación


binaria, el primer operando será
Figura 2.4 Posible arquitectura de una máquina de pila
removido de la pila y mantenido en el
registro TEMP. El segundo operando será
directamente llevado de la pila a la entrada derecha de la ALU, que en nuestro ejemplo corresponde al
puerto x o primer operando. El resultado de la operación es almacenado en la cabeza o tope de la pila.

Instrucciones típicas para una máquina de pila son:

Instrucción Operación

PUSH X TOS  M(X)


PUSH (m) TOS  M(m)
PUSH n TOS  n
POP Z M(Z)  TOS
POP (m) M(m)  TOS
ADD (TOS’) = (NOS) + (TOS)
SUB (TOS’) = (NOS) - (TOS)
MUL (TOS’) = (NOS) * (TOS)
DIV (TOS’) = (NOS) / (TOS)

NOS: Next on the stack TOS: Top of the stack.

En la actualidad no existen ejemplos de esta organización en forma pura, sin embargo existieron
máquinas que se construyeron con esta arquitectura como las grandes computadoras Burroughs B5500,
B6500 y B6700 y la minicomputadora HP3000. Una de las ventajas de esta arquitectura es que el compilador
sólo necesita convertir a postfija las expresiones algebraicas y luego hacer una traducción directa a

Docente: Ing. José Díaz Chow Página 17


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

ensamblador, empleando PUSH por cada aparición de variable y la operación correspondiente con cada
operando. El pop es un caso especial; que corresponde a la asignación y se evalúa al final y además arrastra
consigo al miembro izquierdo de la expresión.

2.5.3 Máquina de Registros.

La organización de un procesador de Registros Generales es mostrada en la figura 2.5. En este estilo de


diseño respecto al manejo de los operandos, se promueve el uso de muchos registros de propósito general
para almacenar los operandos temporalmente dentro del CPU. Esto tiene la ventaja que los datos más
frecuentes sólo se cargan una vez desde la memoria.

Una arquitectura típica consta de un banco o fichero de m registros de propósito general (Ro... Rm-1). Son
llamados de esta forma porque en cualquiera de ellos se pueden mantener datos, direcciones de memoria o
el resultado de alguna operación aritmética o lógica. El programador puede emplear estos registros para
realizar las diferentes operaciones en un programa. Algunos procesadores tienen algún destino específico para
algunos de ellos; el registro F (Flag) o PSW (Processor status Word) es un registro de banderas y/o códigos de
condición que mantiene información importante del estado del procesador o del desarrollo del programa. Por
ejemplo, cuando el resultado de una operación fue cero (bandera Z = 1) o cuando ocurrió un acarreo (bandera
C = 1).
PC MA R MDR

Memoria e
Interf ace de
E/S

R0

R1 IR

R2
Unidad
de
Control

Rm-1

A LU F

Figura 2.5. Posible arquitectura de una máquina de Registros Generales

Con procesadores de registros generales podemos tener instrucciones de dos y tres operandos. En
máquinas 2 operandos, el destino o resultado de la operación está implícito en uno de los dos operandos.
Este fenómeno se denomina lectura destructiva de operandos, pues el valor del registro que es a la vez
operando y destino se pierde por sobre escritura del resultado.

Página 18 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Instrucciones de 3 operandos

Instrucción Operación

ADD Rd, Rf1, Rf2 ; Rd  Rf1 + Rf2


SUB Rd, Rf1, Rf2 ; Rd  Rf1 - Rf2
MUL Rd, Rf1, Rf2 ; Rd  Rf1 * Rf2
DIV Rd, Rf1, Rf2 ; Rd  Rf1 / Rf2

Instrucciones de 2 operandos

MOV Rd, Rf ; Rd  Rf
MOV Rd, n ; Rd  n | n es un número
MOV Rd, X ; Rd  M(X) ; X es una variable en memoria
MOV Rd, (m) ; Rd  M(m) ; m es una dirección en memoria
MOV X, Rf ; M(X)  Rf ; X es una variable en memoria
MOV (m), Rf ; M(m)  Rf ; m es una dirección en memoria
ADD Rf, Rd ; Rd  Rf + Rd
SUB Rf, Rd ; Rd  Rf - Rd
MUL Rf, Rd ; Rd  Rf * Rd
DIV Rf, Rd ; Rd  Rf / Rd

Procesadores del tipo de registros de propósito general son la mayoría de las máquinas grandes modernas y
los procesadores RISC por excelencia. Ejemplos: IBM 370, VAX-11 de DEC, MC 68000 de Motorota, MIPS en
todos sus modelos, SPARC, PowerPC, ARM.
Los diseñadores modernos de computadoras, valorando las virtudes de cada estructura han
adoptado maneras de implementar máquinas con todas las ventajas de cada una, eliminando las limitaciones
que tenían cada una por separado. Por ejemplo, la familia 80x86 de INTEL, son máquinas orientadas a
acumulador con una cantidad no muy abundante de registros de propósitos generales con una pila integrada
además.

Para entender mejor cómo varían las instrucciones respecto a cada estilo de CPU, se presenta a
continuación un ejemplo que permite hacer comparaciones entre los diferentes tipos. Se tiene la siguiente
sentencia en pascal: D:= A + B * C, Escriba la secuencia de instrucciones en lenguaje de máquina con tres,
dos, una y una y cero direcciones.

Tres operandos: (Suponer A está en R1, B en R2 y C en R3, R4 es D)


MUL R4, R2, R3 ; D = (B) * (C)
ADD R4, R1, R4 ; D = (A) + (B * C)

Dos operandos: (Suponer A está en R1, B en R2 y C en R3, R4 es D)


MOV R4, R3 ;D = ( C)
MUL R2, R4 ;D = (B)*(C)
ADD R1, R4 ;D = (A) + (D)

Un operando (Acumulador) :
LOAD B ; Acc= (B)
MULT C ; Acc= (A)*(C)

Docente: Ing. José Díaz Chow Página 19


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

ADD A ; Acc= (Acc) + (A)


STORE D ; D = (Acc)

Máquina de Pila:

PUSH A
PUSH B
PUSH C
MUL ; calcula B*C
ADD ; suma A a B*C
POP D ; salva resultado

Página 20 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

3 DISEÑO DEL CONJUNTO DE INSTRUCCIONES

3.1 INSTRUCCIÓN Y CONJUNTO DE INSTRUCCIONES

La principal especificación arquitectónica de una computadora o su procesador es quizás el conjunto


de instrucciones, pues éste define las operaciones que puede realizar el procesador y establece cómo el
programador puede instruir su ejecución. Bien podría decirse que el repertorio de instrucciones es la
“identidad” del procesador o su lengua, pues cada arquitectura de procesador diferente tiene un conjunto de
instrucciones diferente. Solo aquellos procesadores que comparten el mismo conjunto de instrucciones
pueden ejecutar los mismos programas, y por tanto se dice de ellos que pertenecen a una misma “familia de
arquitecturas”

3.1.1 Conjunto de Instrucciones

Podemos decir que las instrucciones son comandos que indican al procesador qué operación ejecutar
en cada momento y con cuales operandos. Se denomina conjunto o repertorio de instrucciones a todas las
posibles instrucciones para un procesador específico. El diseño del conjunto de instrucciones es el punto de
partida de toda arquitectura de computadoras.

Es deseable que el conjunto de instrucciones del CPU cumpla con las siguientes características:

Completitud: El conjunto de instrucciones debe permitir ejecutar todas las operaciones


que es capaz de realizar el procesador.
Ortogonalidad: Debe permitir que todas las operaciones se realicen con todos los tipos de
datos que aplican para la misma.
Eficiencia: Debe permitir ejecutar todas las operaciones del procesador pero sin
redundancias. Si ya una operación puede realizarse con una instrucción x
no es eficiente que exista una instrucción y para la misma operación.

3.1.2 Instrucción

Denominamos instrucción a un tipo especial de dato que se emplea para ordenar al CPU que ejecute
una de las operaciones que puede realizar. En términos generales, la instrucción debe tener información acerca
del tipo de operación a realizar, con qué operandos, dónde poner el resultado (si la operación genera alguno)
y alguna forma de obtener la próxima instrucción. En las máquinas del tipo Von Neumann, que son máquinas
secuenciales, se supone que la próxima instrucción está contigua en la memoria. En este caso, la información
de próxima instrucción es implícita. Este esquema de secuenciamiento requiere de un puntero o contador de
programa que se incremente de forma automática para que siempre señale a la próxima instrucción a ejecutar.
Para estos propósitos se emplea un registro del CPU denominado normalmente PC (Program Counter).

Una instrucción debe, por tanto determinar: la Operación a ejecutar y los Operandos (tanto fuentes como
destino) a emplear en la misma. El secuenciamiento implícito se puede cambiar mediante instrucciones de
salto que permiten modificar el PC. Los Operandos pueden especificarse de forma explícita o implícita (cuando

Docente: Ing. José Díaz Chow Página 21


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

están sobreentendidos) en la instrucción. Por ejemplo, las instrucciones de salto no hacen referencia al PC pero
está sobreentendido que éste es el destino de esas operaciones.

Los operandos pueden residir en registros internos del procesador o en la memoria. Los operandos fuentes
también se pueden especificar directamente en la instrucción. Las diferentes formas de obtener los operandos
desde donde residan se denominan modos de direccionamiento. Los operandos que residen en memoria
pueden especificarse mediante muchos diferentes modos de direccionamiento.

3.1.3 Clasificación de las Instrucciones

Podemos clasificar las instrucciones en categorías o tipos de acuerdo a la operación que realizan. En
la tabla a continuación se presenta un cuadro sinóptico con el detalle de esta clasificación.

Tipo Categoría Uso Ejemplos


Propósito General Transferencia Mover datos entre operandos MOVE, LOAD,
( puede ser R-R, R-M). STORE
* Cambios en los tamaños y extensión de
Signo

Aritméticas Operaciones aritméticas. ADD, SUB, DIV,


MULT, INC, DEC

Lógicas y manejo de Operaciones lógicas, de comparación y AND, OR


bits (bitwise) corrimiento de bits. RSHIFT, NOT

De Comparación Operaciones que comparan los valores de CMP


los operandos. Sirven de base para las de
saltos

Control de flujo de Permite modificar la secuencia del JP, JR, BRN, CALL,
Programa programa para implementar sentencias de RET
selección, ciclos y llamadas a subrutinas.

E/S Permite el acceso a direcciones del IN, OUT


espacio de E/S. (Más adelante se
explicará que hay ordenadores que usan
las de transferencia cuando el Mapa de
E/S está Integrado a M)

Propósito Tratamiento de Manipulación de cadenas COMSTR, CATSTR


Específico Cadenas (Strings)

Polinomios y Para aplicaciones científicas. La EVALUATEPOL,


funciones científicas, instrucción implementada en Hardware VADD
Vectores y Matrices acelera la ejecución. También se
consideran datos especiales como
Vectores, Listas y Matrices
Privilegiadas Interrupciones y Solicitud de atención de los dispositivos INT, Trap
Excepciones de E/S y Tratamiento de condiciones
anormales del procesador

De control del Protección de Memoria, Detención del HALT, NOP


Sistema programa, reinicio o detención del
ordenador, etc.

Página 22 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

3.1.4 Filosofías de Diseño del Conjunto de instrucciones

Existen básicamente dos filosofías en torno al diseño del conjunto de instrucciones. Al inicio, el diseño
de las computadoras estaba orientado a proveer al programador con el mayor posible conjunto de
instrucciones con muchas formas de obtener los operandos (modos de direccionamiento), lo cual iba haciendo
el hardware cada vez más complejo y mayor el recargo de trabajo para la decodificación y ejecución de las
instrucciones. Un estudio reveló que era muy reducido el conjunto de éstas que en realidad se utilizaban y se
propuso una nueva filosofía de diseño, basada en el conjunto de instrucciones reducido que realmente era
utilizado con frecuencia y simplificar los modos para reducir la complejidad del hardware y mejorar el
desempeño. Esta corriente filosófica se denominó RISC (Computadora de conjunto reducido de instrucciones)
y a las máquinas con la tendencia de conjunto muy amplio, anteriores a ella se llamó CISC (Computadoras con
conjunto complejo de instrucciones).

A continuación se presenta un cuadro comparativo de estas dos tendencias.

RISC CISC

Pocos formatos de instrucciones y sencillos Muchos formatos muy complejos que


permiten decodificador rápido y control normalmente requieren unidad de control
cableado. microprogramada.

Las operaciones de cálculo son registro- Las operaciones permiten operandos en


registro. Instrucciones específicas de carga y memoria.
almacenamiento.

Usan la mínima cantidad de modos de Buscan permitir la máxima cantidad de modos


direccionamiento. de direccionamiento.

Programas largos pero sencillos. Programas cortos pero complejos.

Más fácil de segmentar por su sencillez. Más difícil de segmentar y controlar.

Mayor rapidez de ejecución. Ejecución más lenta (complejidad + UC Prog)

Docente: Ing. José Díaz Chow Página 23


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

3.2 FORMATO DE INSTRUCCIONES


Una instrucción es un tipo de dato especial que se almacena en la misma memoria en que se
almacenan los datos y de la misma forma, por tanto es una cadena de bits. Lo importante es que estos bits
están organizados de cierta forma para almacenar la información que debe proveer la instrucción. Tal
organización se denomina Formato de instrucción. Este define el tamaño de la instrucción y los campos de
información de la misma.

El formato de instrucción puede ser fijo o variable. En el primero, el tamaño de la instrucción es


estático, por ejemplo, siempre de 32 bits. En el segundo el tamaño depende de la instrucción y puede ser de
una palabra, dos o más. Por ejemplo, el Z80 tiene formatos de 1, 2 y 3 bytes.

El formato de instrucción, por lo general se organiza en campos. Cada campo posee un tipo de información,
algunas arquitecturas, sin embargo, tienen campos compuestos y otras mezclan información en un mismo
campo. Ejemplos: MIPS siempre mantiene un mismo código de operación para el tipo de instrucción y
mantiene un campo fijo para cada operando, mientras la familia ix86 tiene un código de operación diferente
por cada tipo y cantidad de operandos de la misma operación.

El formato de instrucción debe contener toda la información de la instrucción o la forma de obtenerla,


básicamente:
- Operación a realizar
- Fuente(s): Dependen del tipo de operación (unaria o binaria)
- Destino: Dónde poner el resultado. A veces está implícito ( ADD A, B ; B  A + B )
- Secuenciamiento: Necesidad de conocer la dirección de la próxima instrucción. Por lo general está
implícito (en las arquitecturas de máquina secuencial) pero a veces se permite cambiar el flujo de
programa afectando al PC mediante instrucciones de ramificación (en este caso el direccionamiento
puede ser absoluto o relativo).

Nominalmente, el Formato de instrucción, al cual llamaremos F, se compone de Dos partes:

- Identificación de la operación: COP o CO: Código que identifica la operación.


- Direccionamiento: Operandos fuentes y destino.

IDENTIFICACION DIRECCIONAMIENTO

CO OP1 OP2 … OPn

MD VALOR(ES)

Figura 2.4 Estructura del Formato de Instrucción

Página 24 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

3.3 CODIGO DE OPERACIÓN


Es necesario codificar las instrucciones del conjunto de instrucciones a fin que la unidad de control
pueda identificar de forma única cada instrucción y proceder de acuerdo a la especificación de la misma. La
parte del formato de instrucción que mantiene esta información se denomina bloque de identificación y está
conformado por lo general de un único campo llamado Campo de Código de Operación (CO o COP).

3.3.1 Codificación de bloque fijo


¿Cómo podemos proceder para asignar códigos a las instrucciones? es decir, ¿cómo podemos codificar el
CO? Existen varias técnicas, la más simple consiste en asignar a cada instrucción una de las combinaciones
posibles de un patrón binario. A esta técnica se le conoce como Técnica de Bloque fijo. Para codificar n
instrucciones se requieren log2(n) bits. Por ejemplo, para codificar 13 instrucciones 4 bits son requeridos.

nota: n = n (I); n es la cardinalidad del conjunto I o conjunto de instrucciones.

Ventajas: Muy fácil de entender


Decodificado fácil de implementar

Desventajas: Cuando el número de instrucciones no es cercano a la potencia (5 bits para 18)


Tenemos desperdicio o a veces diseños muy costosos (al integrar el resto del
Formato)

3.3.2 Codificación de bloque expandido

Otra técnica empleada es la Técnica de bloque expandido. Esta se basa en el hecho que no todas las
instrucciones usan todos los campos de direccionamiento. Se pueden identificar grupos de 3, 2, 1 y 0
operandos, entonces, se pueden emplear pocos bits para el CO de las instrucciones de más operandos y en el
nuevo grupo usar los bits del operando que no ocupará el anterior para “expandir” el CO a más bits.

Ejemplo: ¿Cuántos bits ( L o longitud) se requieren para el formato de instrucciones de una máquina hipotética, si se tienen
que codificar 15 diferentes instrucciones cada una de 2 operandos, donde el operando fuente 1 asume como destino de la
operación y cada operando requiere 6 bits para codificarse?

L (F) = ?
n = 15 L (CO) = log2(15) = 4 bits
L (F) = L (CO) + 2 * L (Op) = 4 + 2 * 6 = 16 bits

*Nótese que aquí la longitud de los operandos es constante, existen máquinas donde no ocurre lo mismo.

Suponga, ahora que además de las 15 de 2 operandos requiero 30 de 1 operando. ¿Cuántos bits se
requieren?

n = 15 + 30 = 45 L (CO) = log2(45) = 6 bits

En este nuevo escenario, la instrucción pasa a tener un total de 18 bits. Note que esto genera un
problema interesante, pues si la resolución de la memoria es de un byte y no de palabras de 18 bits, el
tamaño de instrucción deberá escalar a 3 * 8 = 24 bits, desperdiciando 6 bits en el formato. Esto no siempre

Docente: Ing. José Díaz Chow Página 25


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

es malo, en términos de rendimiento, pero puede ser un inconveniente en cuanto a ahorro de espacio en
disco y memoria.

Para evitar el desperdicio del ejemplo anterior, se podría usar la técnica de bloque expandido, así los
6 bits que libera el segundo operando en este nuevo grupo, se pueden emplear para “expandir” el CO. Es
importante que queden algunas combinaciones libres del primer formato para poderlas usar como llave que
nos indique que esa combinación es expandida. En esta caso queda la combinación 1111. Así el decodificador
sabrá que cuando aparezca ésta encabezando el CO, éste será de 4 + 6 = 10 bits.

CO O2 O1
0000 xxxxxx xxxxxx
… … … 15 inst. de 2 operandos
1110 xxxxxx xxxxxx
1111

1111 000000 xxxxxx


… … … 30 inst. de 1 operando
1111 011101 xxxxxx

Nótese que con este formato, no se requieren más bits para codificar las nuevas 30 instrucciones.

* Asignación: Verifique cuántas instrucciones de 0 operandos podrían caber en el formato

Página 26 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

3.3.3 Codificación Huffman

La tercera técnica, se basa en la teoría estadística de la comunicación y está orientada a minimizar


la longitud del CO de las instrucciones más frecuentes. Ésta de denomina Técnica de Codificación de
Huffman. La técnica expandida asume que todas las instrucciones son usadas con la misma probabilidad,
pero realmente en la práctica esto no es así, ya que en un programa de acumulador, el 40% de las
instrucciones son LOAD y STORE, por ejemplo. La técnica de Huffman codifica el CO de las instrucciones
usadas mas frecuente con menos bits y las usadas menos frecuentemente con más bits. Esto permite que
el número promedio de bits necesarios para codificar un programa típico sea óptimo.

Ejemplo: Supongamos que se desea codificar el conjunto de instrucción hipotético mostrado en la tabla
siguiente:
Nemónicos de Contador de Frecuencia Relativo
Instrucciones
LOAD 1/4
STO 1/4
ADD 1/8
AND 1/8
NOT 1/16
RSHIFT 1/16
JUMP 1/16
HALT 1/16

Los valores del contador de frecuencia relativa se obtienen inspeccionando la ocurrencia de cada
Instrucción en un conjunto de programas representativos. En ésta técnica podemos especificar un
algoritmo para crear los Códigos para cada CO de cada instrucción. Primero se ordenan las instrucciones
en función de su frecuencia relativa o probabilidad de ocurrencia, de mayor a menor de izquierda a
derecha. Segundo, se asigna a cada nemónico de Instrucción un nodo etiquetado con el contador de
frecuencia relativa correspondiente (figura a continuación)

LOAD STO ADD AND NOT RSHIFT JUMP HALT

¼ ¼ 1/8 1/8 1/16 1/16 1/16 1/16

Tercero: Asociar los nodos con el menor peso siempre, mediante la operación suma para genera nuevos
nodos hasta que no queden posibles asociaciones. La figuras 2.8 a, b y c muestran este proceso.

Cuarto: Las ramas derechas del árbol obtenido son etiquetadas con “0” y las izquierdas con “1” (Figura 2.8 c).
Quinto: Para encontrar el código de operación correspondiente de determinada instrucción se hace un
camino desde la raíz hasta el nodo del mnemónico correspondiente. Por ejemplo el CO de la instrucción
RSHIFT es 0010. En la figura 2.8 se puede apreciar todos los pasos y en la taba que le sigue se resumen los
CO para todo el Conjunto de instrucciones del ejemplo.

Docente: Ing. José Díaz Chow Página 27


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

a) 1/8

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

1/8 1/8
b)

LOAD STO ADD AND NOT RSH JUMP HALT

1/4 1/4 1/8 1/8 1/16 1/16 1/16 1/16

1 0 1 0 1 0 1 0

1/2 1/4 1/8 1/8

1 0

1/4

1 0

1/2

1 0

c)
1/2

MNemónico CO Camino desde la Raíz.


LOAD 11 izquierda-izquierda
STO 10 izquierda-derecha
ADD 011 der-izq-izq
AND 010 der—izq—der
NOT 0011 der—der—izq—izq
RSHIFT 0010 der—der—izq—der
JUMP 0001 der—der—der—izq
HALT 0000 der—der—der—der

Página 28 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Se puede apreciar que el procedimiento de Huffman codifica con menos bits las instrucciones mas
frecuentes usadas y con más bits las menos usadas. El número promedio de bits necesarios por instrucción
pueden ser calculados usando la formula:
n
longitud CO med  LA   li . f i
i 1

Donde li es la longitud en bits de la instrucción i y fi es la frecuencia relativa de la instrucción i.

Para nuestro ejemplo, entonces:

longitud(CO)med = 2(1/4 )+2(1/4) + 3(1/8) +3(1/8) + 4(1/16) + 4(1/16 )+ 4(1/16) + 4(1/16)

=1+¾+1

= 2.75 bits.

Aplicando esta formula al esquema de codificación de bloque donde cada instrucción será codificada
con tres bits:

L (CO)med = 3(1/4) + 3(1/4) + 3(1/8) + 3(1/8) +3(1/16) + 3(1/16) + 3(1/16) + 3(1/16)

= 3/2 + ¾ + ¾

= 3 bits.

El número óptimo de bits para la codificación de un conjunto de mensaje es:


n
longitud CO optima  LO   f i . log 2  f i 
i 1

Para nuestro ejemplo:

LO = – [2*(1/4)*log2(1/4) + 2*(1/8)*log2(1/8) + 4*(1/16)*log2(1/16)]

LO = 2.75 bits.

La diferencia entre la longitud promedio actual y la longitud óptima sobre la longitud actual es llamada
Redundancia. Ésta mide el grado de desperdicio en el uso de bits para codificar el mensaje y se calcula así:

R = LA - LO
LA

Calculando el desperdicio se nota que en el esquema de Huffman la redundancia es igual a cero, y para el
esquema de código de bloque hay una redundancia de 8.33%.

Docente: Ing. José Díaz Chow Página 29


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

R = (2.75 - 2.75) / 2.75 = 0 Técnica de Huffman

R = (3 - 2.75) / 3 = 0.083 (8.33%) Técnica de Bloque.

El esquema de Huffman lleva a cabo un resultado óptimo manteniendo la redundancia a un valor mínimo
sin embargo los códigos de operación son de tamaño variable, lo cual puede complejizar la construcción
del decodificador. La codificación de código de bloque fijo toma espacio de memoria extra pero es
ampliamente usado por su sencillo procedimiento de decodificación. La codificación de bloque extendido
también es muy usada cuando tenemos formatos de instrucción variable.

3.4 CAMPOS DE DIRECCIONAMIENTO


El bloque de direccionamiento en el Formato de Instrucción se compone de uno o varios campos de
dirección. Estos campos de dirección, especifican cómo y dónde obtener los operandos y donde guardar el
resultado. También se usan en instrucciones de saltos para definir la dirección de memoria de la próxima
instrucción.

Un campo de dirección se estructura de la forma:

MD V

 MD: Modo de direccionamiento o forma de determinar la dirección efectiva del operando.

 V (Valor): Dato que se emplea en el cálculo de la dirección efectiva del operando. Frecuentemente V
indica un registro, una dirección de memoria o un número. En los últimos casos, este valor puede ser
bastante grande, incluso, podrían no caber en un formato de instrucciones pequeño, por lo cual se
suelen emplear palabras adjuntas en la instrucción para dar cabida a estos valores. La figura abajo
muestra una de estas variantes.

Palabra de instrucción Palabra complementaria de V

CO MD1 V1 MD2 V2

El cálculo de la dirección efectiva del operando se obtiene combinando los valores del MD y V con el
estado del procesador. Esquemáticamente:

Página 30 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

MD V

CALCULO DE LA
DIRECCION
EFECTIVA
DIRECCION EFECTIVA
DEL OPERANDO

ESTADO DEL
PROCESADOR

3.5 MODOS DE DIRECCIONAMIENTO


El modo de direccionamiento es la forma o procedimiento que sigue el procesador para expresar dónde
se encuentra un operando y cómo obtenerlo. Un operando puede residir en memoria o en un registro del
procesador, pero los operandos fuentes además pueden definirse directamente en la instrucción.

Para los operandos en registros, la dirección efectiva del operando es el número, dirección o identificación del
registro. Los operandos en memoria, se pueden obtener de diferentes modos. El objetivo final es obtener la
dirección efectiva donde se almacena el operando en memoria. A continuación estudiaremos los modos de
direccionamiento más comunes.

3.5.1 Modo Inmediato

El valor del operando es especificado dentro de la misma instrucción. Realmente V es el valor mismo del
operando. En este caso no es necesario calcular dirección efectiva.

MD V = # ( operando )

Ventajas: Forma sencilla de obtención del operando.


Desventajas: Sólo permite operandos fuente y valores constantes.
Uso: Inicialización de variables y declaración de constantes.

Ejemplo: MOVE R10, 9 ; R10  9

3.5.2 Modo Directo, De Registro O Directo De Registro

El operando se encuentra en uno de los registros del procesador. En este caso el valor del operando es el
contenido del registro.

MD r Modo de direccionamiento
Directo o Directo de Registro

BANCO DE
REGISTROS DEL
PROCESADOR
Dirección
Efectiva
OPERANDO
Rr
Docente: Ing. José Díaz Chow Página 31
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Ventajas: Rapidez de acceso. El operando ya está dentro del procesador.


Pocos bits para codificar los registros.
Desventajas: Si se necesita estar intercambiando el valor constantemente con una variable
en Memoria
Uso: Almacenar datos que se utilizan con mucha frecuencia.

Ejemplo: MOVE R10, R1 : R10  [R1]

3.5.3 Modo Absoluto O Directo De Memoria

La dirección efectiva del operando se especifica directamente en la instrucción. Regularmente se emplea


algún convencionalismo para diferenciar este modo del inmediato. Nosotros emplearemos paréntesis.

MD @ Modo de direccionamiento
Absoluto o Directo de Memoria

MEMORIA

Dirección
Efectiva
OPERANDO

Ventajas: Permite acceder a cualquier dirección de memoria.


No se requiere de cálculo adicional.
Desventajas: Requiere muchos bits para direccionamiento.
Requiere soporte en uso de estructuras de datos y programas portables.
Uso: Saltos absolutos, Rutinas fijas (sistema), paso de parámetros, puertos de E/S.

Ejemplo: MOV R10, (1800) ; R10  M(1800)


MOV R10, A ; R10  M(A)

3.5.4 Modo Indirecto De Registro

El registro r contiene la dirección efectiva del operando.

MD r Modo de direccionamiento
Indirecto de Registro

BANCO DE
Página 32 REGISTROSDocente:
DEL Ing. José Díaz Chow
MEMORIA PROCESADOR
Rr
Dirección Efectiva

OPERANDO
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Se pueden dar diferentes niveles de Indirección, según la arquitectura. Como ejercicio visualice el
diagrama gráfico para doble indirección.

Ventajas: Permite acceder a cualquier dirección de memoria usando pocos bits.


Flexibiliza el uso punteros, vectores y estructuras.
Desventajas: Requiere que se cargue la dirección al registro.
Limita el uso de registros para operandos.
Uso: Datos estructurados y paso de parámetros a subrutinas.

Ejemplo: MOV R10, (R1) ; R10  M (R1)

3.5.5 MODO INDIRECTO DE MEMORIA

El valor de V especifica la dirección de memoria en cuyo contenido está la dirección efectiva del operando.

MD @ Modo de direccionamiento
Indirecto de Memoria

MEMORIA

Dirección Efectiva

OPERANDO

Este modo no es muy frecuente, ni eficiente en la actualidad, sin embargo fue usado en antiguas
máquinas para automatizar punteros y acceso a estructuras de datos.

Ejemplo: MOV R10, ((1800)) ; R10  M( M(1800))

3.5.6 MODO DE AUTOINCREMENTO

Este es un modo particularmente útil para trabajar con estructuras de datos estáticas. Está presente en
arquitecturas antiguas como la PDP/11. Son variantes del modo indirecto de registro. En el autoincremento,

Docente: Ing. José Díaz Chow Página 33


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

la EA1 es el contenido del registro Rr. Una vez que se obtiene tal dirección el contenido del registro Rr se
incrementa en una constante k, que por lo general es 1.

MD r Modo de direccionamiento
de Autoincremento

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR

Rr
Dirección Efectiva OPERANDO Celda A

Celda A + k

Operando = M([ Rr ])
Rr = [ Rr ] + k

Por lo general k es el valor de la palabra o el tamaño de los operandos.

Ventajas: Acceso eficiente a elementos consecutivos en arreglos.


Desventajas: Cuando k es variable.

Ejemplo: ADD (R1)+, R0 ; R0 M( [R1] ) + R0, R1  [R1] + k

3.5.7 MODO DE AUTODECREMENTO

Es muy similar al de autoincremento, con la variante que el contenido de Rr se decrementa en lugar


de incrementarse y esta operación se hace antes de emplear la el contenido del registro en el cálculo de la
dirección. Es decir que EA = [Rr] – k.

MD r Modo de direccionamiento
de Autodecremento

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR
1 EA: Effective Address, Dirección Efectiva. OPERANDO Celda A - k
Rr
A Celda A
Página 34 Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Rr = [ Rr ] - k
Operando = M( [ Rr ] )

Ejemplo: ADD -(R1), R0 : R1  [R1] - k , R0  M( [R1] ) + R0

Cabe mencionar que estos modos también tienen sus indirectos. Como tarea, visualice las operaciones que
se deber realizar para recuperar un operando en indirecto de autoincremento.

3.5.8 MODOS DESPLAZADOS

Existe una serie de modos muy flexibles que permiten realizar direccionamiento dinámico, lo cual es
muy útil para recorrer estructuras de datos, como arreglos de números o de estructuras. Estos modos
obtienen la dirección efectiva del operando calculándola mediante suma de registros y/o valores numéricos.
Por ejemplo, la dirección puede obtenerse sumando dos o más registros, o un registro y un valor numérico.
Existen casos complejos donde se incluye también escalación, en el cual uno de los valores es multiplicado
por una constante que normalmente representa el tamaño del elemento del arreglo que se desea recorrer.

En nuestro curso sólo enfocaremos algunos de ellos. Especial interés debe ponerse en el modo relativo,
donde el desplazamiento es relativo al valor de un registro. El desplazamiento relativo más útil es el relativo
al PC que se emplea en las instrucciones de salto.

3.5.9 MODO DE INDICE O INDIZADO

En este modo, el campo V tiene dos partes: Una dirección base (o registro base) y un registro índice.
Para calcular la dirección efectiva, se toma la dirección base y se le suma el contenido del registro índice.
Puede darse también el modo indirecto de índice. Se propone al lector interpretar el funcionamiento del
indirecto de índice.

MD r @base Modo de direccionamiento de


Indice

BANCO DE MEMORIA
REGISTROS DEL
PROCESADOR

Rr
Indice
+ OPERANDO

Docente: Ing. José Díaz Chow Página 35


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Operando = M( [ Rr ] + base )

Para que este modo sea eficiente se requiere tener facilidad de manipulación del registro de índice
por aparte. Por ejemplo: incrementar y decrementar el registro por una constante arbitraria k para el
recorrido de las estructuras de datos estáticas o por diferentes valores específicos para estructuras de datos
variables.

Ventajas: Acceso eficiente a arreglos y estructuras en la memoria. Es considerado uno de los modos
más versátiles de acceso a memoria.
Desventajas: Precisa cargar y actualizar el índice por aparte.

Ejemplo: MOV R0, 1800(R1) ; R0  M(1800 + [R1])


MOV R0, R5(R1) ; R0  M([R5] + [R1])

3.5.10 MODO DE BASE - DESPLAZAMIENTO

Este modo es similar al anterior, el direccionamiento requiere dos partes: Un registro base y un valor de
desplazamiento. Para calcular la dirección efectiva, se toma la dirección contenida en el registro base y se le
suma con el desplazamiento. El valor del desplazamiento puede ser negativo o positivo. La diferencia con el
anterior es que éste último se usa cuando tenemos desplazamientos constantes, por ejemplo para acceso a
estructuras de datos. MD r desplazamiento Modo de direccionamiento
Base + Desplazamiento

BANCO DE MEMORIA
REGISTROS DEL Dirección Base
PROCESADOR
desplazamiento
Rr
Base
+ OPERANDO

Operando = M( [ Rr ] + desplazamiento )

Ventajas: Acceso a estructuras de datos más eficiente. Cambiando el contenido de la


base se puede acceder al mismo elemento en cada estructura.
Permite desplazarse en un área de memoria cuyo punto de referencia es la dirección
base.
Permite desplazamientos fijos relativos a un punto móvil.
Desventajas: Precisa cargar y actualizar la base.

Ejemplo: MOV R0, R1(10) ; R0  M([R1] +10)

3.5.11 MODO DE DESPLAZAMIENTO CON ESCALACION:

Página 36 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Estos modos permiten involucrar varios registros y escalares en el cálculo de la dirección efectiva la cual
se realiza nos solo con suma sino además por multiplicación. Estos modos eliminan la necesidad de cálculo del
tamaño del operando en el índice por aparte. Así el índice solo se autoincrementa o decrementa por 1.

Por ejemplo, el modo siguiente permite recorrer una estructura de datos de 8 bytes de tamaño con base en
Rbase, usando Rindice para controlar el elemento a acceder: Rbase + Rindice * 8

3.5.12 MODO DE DESPLAZAMIENTO RELATIVO

Este modo es una variante del modo base-desplazamiento. La principal diferencia radica en que el valor
calculado no es la dirección de un operando sino el resultado de la operación. El modo relativo normalmente
tiene por registro base al PC, permitiendo implementar los saltos, es decir, las instrucciones de control de
flujo de programa, al modificar el secuenciamiento automático de la máquina. El registro base es implícito
cuando se trata del PC. Algunas arquitecturas permiten tener desplazamientos relativos muy complejos,
permitiendo además de una constante, un registro sumados al valor del PC.

MD desplazamiento Modo de direccionamiento


Relativo ( al PC )

MEMORIA
(Area de programa)

+ próxima instrucción
realmente
desplazamiento
(negativo )
instrucción actual
próxima instrucción
PC originalmente

PC = [PC] + desplazamiento

Ventajas: Permite implementar ciclos fácilmente.


Nota: Hay que tomar en cuenta el posible uso de números negativos cuando son saltos
hacia atrás.
Por lo general, éstos se implementan en complemento a 2.

3.6 CODIFICACIÓN DEL MD


La codificación del MD es similar a la del CO. Se prefiere emplear la técnica de bloque fijo por
cuanto es más fácil de decodificar y los modos de direccionamiento suelen ser muy pocos.

Es importante anotar aquí el uso del bit de indirecto en la arquitectura PDP, que sirve de base a nuestro
curso. Este bit se emplea para diferenciar los modos directos de su correspondiente indirecto sólo en un bit (el
LSB del campo de MD) Si este bit es 1 el modo en cuestión es indirecto. Por ejemplo, supongamos que se define
la combinación 000 para el modo Directo de Registro, entonces la combinación 001 deberá corresponder al
modo Indirecto de Registros. Esta técnica simplifica mucho la implementación de la Unidad de Control.

Docente: Ing. José Díaz Chow Página 37


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Veamos ahora un ejemplo de Codificación basado en PDP-11. Supongamos que hipotéticamente la


instrucción ADD tiene el CO 0010. Entonces la instrucción:

ADD (R0), R1

Donde el primer operando se obtiene indirectamente del registro R0 y el segundo, que es a la vez destino, se
obtiene directamente de R1. Si el código de MD directo de registro es 000, entonces el formato de la
instrucción se vería así:

CO MD1 V1 MD2 V2

Formato de la instrucción

CO MD 1 V1 MD 2 V2

0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1

CO de ADD Indire cto e n 0 =


m odo dire cto

Bit de indire cto e n 1 -


M odo de 000 = 0 001 = 1
> M odo indire cto
Re gis tro -> R0 -> R1

Contenido de la Instrucción

Finalmente, para concluir nuestra discusión acerca del formato de la Instrucción. Anotaremos que los
modos de direccionamiento dependen de la estructura y organización del procesador. Recordemos que
existen tres diferentes: Máquina de registros, de Pila y de Acumulador. Las primeras enfatizan en el uso de
instrucciones de 2 y 3 direcciones. Las segundas poseen básicamente sólo instrucciones de 0 direcciones (o
de 1 en caso de transferencia) y la de acumulador básicamente solo de 1.

Página 38 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

4 UNIDAD DE EJECUCION

4.1 LA FUNCION DE PROCESAMIENTO


La función de procesamiento en la computadora es realizada por la unidad de ejecución. Esta unidad está
constituida por la unidad aritmética y lógica (ALU), los registros de propósito general (GPR) y todo hardware
adicional que esté destinado a realizar cálculos (por ejemplo, una unidad de punto flotante o FPU). La ALU es
la responsable de la ejecución de los cálculos dentro del procesador. Para tal cometido necesita
almacenamiento interno temporal dentro del CPU por lo cual se le provee de tales almacenamientos por medio
de registros de propósito general (GPR) que permiten almacenar operandos. Recordemos que en la forma en
que se proveían estos almacenamientos ha definido históricamente los diferentes tipos de arquitectura:
Acumulador, Pila y Registros. También la ALU puede contar con sus propios registros auxiliares que almacenan
o retienen los datos sobre los que opera.

4.2 REPRESENTACION DE DATOS


Todos los datos, independientemente de su naturaleza se representan como patrones binarios dentro
de una computadora digital binaria. Es necesario, por tanto, definir un formato de representación que
permita establecer una equivalencia de patrones binarios con los diferentes tipos de datos del mundo real.

Los datos que más nos interesan son los números enteros. En nuestro paradigma matemático, empleamos el
sistema de numeración posicional basado en un alfabeto de diez símbolos (sistema decimal) como codificación
numérica. La computadora usa codificación binaria, sin embargo la representación genérica de un número en
función de su base nos permite encontrar equivalencia entre cualquier sistema de codificación de tipo
posicional.

Otro aspecto a considerar es el tamaño del número. En el mundo real, los números pueden crecer hasta el
infinito. En la computadora tienen un límite debido al espacio de almacenamiento (cantidad de bits) que se
elija para el formato del número.

El valor de un número entero positivo en cualquier base (radix) se representa como:

n 1
A  Valor ( N )   ai  r
i

i 0

La computadora trabaja en binario es decir r = 2. Cualquier entero en decimal puede representarse en binario.
Otras bases importantes en arquitectura de computadoras son la Hexadecimal y la Octal. La gran ventaja de
éstas es que su base es potencia de 2 y por tanto tienen un número exacto de bits para cada dígito (4 para Hex.
y 3 para Octal) con lo cual es más fácil manipular y convertir datos.

4.2.1 Representación de enteros con signo.

Docente: Ing. José Díaz Chow Página 39


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

El sistema binario debe representar todos sus datos con tiras de ceros y unos. No dispone de signos
especiales como el menos (-) que usamos en nuestra representación matemática. Por tanto, en la notación
binaria de las computadoras necesitamos definir un convencionalismo para representar los números negativos
que esté comprendido en la misma tira de bits. Para solucionar esta necesidad se han empleado varias técnicas:

4.2.1.1 S I G NO - M AG NI TU D

El bit más significativo o MSB se destina para representar el signo (1 = negativo, 0 = positivo) y el resto de
bits para representar la magnitud. En este caso el valor del número está dado por:

0
A  Valor ( N )  (1) a r
[ MSB]

i
i
i n2

Nótese que existen dos posibles ceros: -0 y +0, por cuanto el rango es: [– (2 n-1 –1), + (2 n-1 –1)].

4.2.1.2 COMPLEMENTO A R-1:

O simplemente el complemento. Como nuestra base binaria es 2, esta técnica se denomina complemento a
1.

Resulta de la complementación del número bit a bit. En este caso, se entiende que el signo está integrado al
número. Por la misma convención, el valor del MSB indica el signo del número. En las operaciones siempre se
debe sumar el acarreo al resultado.

Rango: [– (2 n-1 –1), + (2 n-1 –1)]. En complemento a 1, al igual que en signo-magnitud, también tenemos 2
ceros, uno positivo y otro negativo.

4.2.1.3 COMPLEMENTO A R

En binario: Complemento a dos. Un número se niega en complemento a dos desplazándolo un módulo de su


posición. Esto es equivalente a complementar el número y sumarle 1. En las operaciones se desestima el
acarreo sobrante.

Esta representación es la más directa al momento de implementar las operaciones en la ALU. El rango es: [–2
n-1
, +2 n-1 –1] pues solo existe un cero y es considerado positivo.

Una técnica muy útil para calcular el valor de un número binario en complemento a 2 es el uso de la caja de
valores. En ésta, cada posición representa su valor en positivo excepto la posición más significativa que
representa su valor en negativo.

-128 64 32 16 8 4 2 1

Figura 4.1. Caja de valores para un número con signo de 8 bits

Página 40 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

4.2.1.4 EXCESO A M

Las representaciones en complemento son muy apropiadas para agilizar los cálculos aritméticos por
cuanto las operaciones aritméticas entre números de distinto signo no requieren operaciones extras para el
manejo del signo. Sin embargo, adolecen del efecto de corrimiento de rango, con lo cual los números no son
fácilmente comparables si queremos establecer una relación de orden. Para datos cuyo orden debe ser
comparable, se propone otra técnica llamada Exceso a M.

En ésta, el valor del número es el exceso de su valor positivo respecto a M. M representa el límite de
corrimiento o el cero del sistema. Aunque M puede ser cualquier valor positivo dentro del rango, si deseamos
un conjunto simétrico, M debe ser la mitad del alcance del rango. Por ejemplo, en números de 4 bits, M sería
8 de forma tal que 0000 equivaldría a –8 y 1111 a +7. En esta representación, los números quedan ordenados
según nuestros ejes coordenados.

2n
En sistemas simétricos M  y V(N) = A - M
2

4.2.2 Números en punto flotante

Además de los números enteros, son de gran uso los números reales, sin embargo la ALU normalmente
no puede operarlos directamente. Para poder realizar cálculo de punto flotante, se han desarrollado una serie
de algoritmos que se implementa en librerías matemáticas o directamente en hardware, mediante un
coprocesador matemático asociado o una FPU interna al procesador. Más adelante enfocaremos este tema
con más detenimiento.

Para representar los números reales se han usado diversas abstracciones. La más aceptada actualmente es el
formato de punto flotante que propone el estándar IEEE 754. Éste en realidad define dos formatos: uno en
simple precisión de 32 bits y otro en doble precisión de 64 bits. Un número real tiene una parte entera y otra
fraccionaria y puede ser tanto positivo como negativo.

El problema de representación consiste en saber dónde está la coma o punto decimal. Algunas aproximaciones
representan un punto fijo pero esto tiene limitaciones de rango. Para obtener más flexibilidad, se han
implementado también formatos en punto flotante que son las que se usan más hoy día. El estándar se basa
en la notación científica: mantisa*BASEexponente. La tira de bits, por tanto se organiza en dos campos lógicos:
mantisa y exponente. La base está predefinida (binaria). La mantisa se guarda en representación signo-
magnitud y el exponente en exceso a m. En este caso, se supone que la mantisa es el número que continua
inmediatamente después del punto. La posición real del punto, por tanto se obtiene del valor del exponente.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
S Exponente Mantisa

Figura 4.2 Formato IEEE 754 en Simple precisión

Docente: Ing. José Díaz Chow Página 41


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

4.2.3 Otros Tipos de Datos:

4.2.3.1 C AR AC TE R E S O DATO S AL F AN U M ÉR I CO S

Usan sistemas de codificación como el ASCII. Actualmente se emplean formatos más largos como UNICODE
que emplea 2 bytes por carácter.

4.2.3.2 FECHA Y TIEMPO:

Puede emplearse diferentes formatos. Por ejemplo, para llevar solo fechas, se suele usar un número de 32
bits(4 Bytes) y emplear el formato YYYYMMDD o hacerlo con 8 caracteres. Para llevar además el tiempo, se
suele emplear números más largos (64 o más bits) para llevar un contador de segundos o milésimas de los
mismos. En este caso el valor del número representa los segundos transcurridos desde una fecha inicial de
ventana, por ejemplo 01/01/1900 a las 00:00.

4.2.3.3 E S TR U C TU R AS :

Se construyen en base a los tipos de datos simples o primitivos, que se almacenan contiguos en la memoria.
Son de interés especial las estructuras estáticas como las cadenas de caracteres y los arreglos.

4.3 LA UNIDAD ARITMETICA


La suma es la operación aritmética más importante. Esta operación es muy versátil, ya que A - B es
equivalente a A mas el complemento a dos de B y C * A puede ser obtenido sumando A C veces o
viceversa. Por ello, la implementación de un sumador es clave para implementar una unidad aritmética.

Una unidad de hardware que suma dos números de 1 bit con acarreo, es llamado un “sumador
completo”. El diagrama de bloques, tabla de verdad e implementación de un sumador completo son
mostrados en la figura 4.3.

De la tabla de verdad, mediante la técnica de términos mínimos, se puede obtener la ecuación lógica de
Si y Ci+1 que corresponde a la suma de las entradas y el acarreo resultante, respectivamente. Luego de aplicar
transformaciones algebraicas se obtienen las expresiones minimizadas cuya implementación se muestra en la
figura 4.3. Abajo se muestran las transformaciones algebraicas en cuestión:

Si = xiyici + xiyici + xiyici + xiyi ci


= ci(xiyi + xiyi) + ci (xiyi + xiyi)

siendo Z = xiyi + xiyi = xi  yi

entonces: Si = ci Z + ci Z

Página 42 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Si = xi  yi  ci

Por otro lado:


ci+1 = xiyici + xiyici + xiyici + xiyici

ci+1 = yici + xici + xiyi

Xi Yi Xi Yi Ci Si Ci+1

0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
Ci+1 Ci 0 1 1 0 1
Sumador
Completo 1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
Si

Diagrama de bloque de un Tabla de Ver dad del


Sumador Completo de 1 bit Sumador Completo

Xi ' Xi
Yi '
Yi

Xi '
Xi
Yi
Ci+1
Ci Ci

Xi Yi
Yi '
Ci
Si = Xi Yi Ci
Xi

Yi
Implementación del Sumador

Figura 4.3 Sumador completo de 1 bit.

Se puede implementar sumadores completos para n bits, conectando en cascada n sumadores completos de
1 bit. La figura 4.4 presenta el esquema a bloques y la estructura de un sumador de 4 bits. Este tipo de
sumador es también llamado “Sumador de Acarreo propagado” (CPA), dado que el acarreo en este circuito
es propagado serialmente a través de cada sumador completo.

Cuando se suman dos números, el acarreo inicial C0 siempre es 0 excepto en caso de substracción con
operandos complementados a 2. Con el CPA, este acarreo necesita ser transmitido de un sumador a otro
haciendo el proceso bastante lento.

Docente: Ing. José Díaz Chow Página 43


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

X3 Y3 X2 Y2 X1 Y1 X0 Y0 X3 Y3 X2 Y2 X1 Y1 X0 Y0

C4 C0
C3 C2 C1 C0
FA FA FA FA CPA

C4 S3 S2 S1 S0

S3 S2 S1 S0
Diagrama de bloque de un
sumador de 4 bits
Sumador de 4 bits con acarreo propagado

Figura 4.4 Sumador de acarreo propagado de 4 bits.

Como se puede apreciar en la figura 4.4, para generar el Ci+1 de Ci, se incurre en el retardo de tiempo
de propagación de dos niveles de compuertas lógicas en serie. Para generar Si, se gasta el tiempo de retardo
de tres compuertas. Aunque el diseño de un CPA de n bits es directo, el tiempo de propagación del acarreo
en un CPA limita la velocidad de operación. Por ejemplo; en un CPA de 16 bits, la operación de suma es
completada solamente cuando la suma del 15avo bit está disponible. Para ello, se debe contar con la suma
en el 1er bit y su acarreo, luego la del 2do, tercero, etc. Supongamos que el tiempo de retardo de una
compuerta es t, entonces el tiempo requerido para la suma de dos números de 16 bits es:

15 * 2t (retraso de c0 hasta c15)


+ 3t (tiempo para generar s15 de c15)

33t

Si t = 10 ns, entonces se deberá esperar un total de 330ns para obtener una suma, lo cual es
prohibitivo en las computadoras donde el tiempo de respuesta de la ALU se espera por debajo de los 100ns.
Esto crea la necesidad de pensar en una técnica que incremente la velocidad de operación. Tal técnica es
conocida como Carry Look Ahead (acarreo adelantado) y permite acelerar la suma en un factor de 3. En esta
técnica se emplea hardware extra para generar cada acarreo (Ci, i> 0) directamente de C0. Para ser mas
práctico, considere el diseño de un sumador de acarreo adelantado de 4 bits (CLA: Carry Look Ahead) a partir
de nuestro diseño original de CPA.

Inicialmente recordemos que en un sumador completo, la salida de acarreo Ci+1 está relacionada al
acarreo de entrada Ci , de la siguiente manera:

Ci + 1 = XiYi +XiCi +YiCi

Este resultado puede ser escrito así:

C i+1 = Gi + PiCi donde Gi = XiYi y Pi = Xi+Yi

La función G es llamada la Función Generadora del Acarreo, puesto que un acarreo es generado
cuando Xi *Yi es 1. Si Xi o Yi es un 1, entonces el acarreo de entrada Ci es propagado al próximo sumador.
Por esta razón, la función Pi es a menudo referida como Función de Propagación de Acarreo. Usando Gi y Pi;
C1, C2, C3, y C4 pueden ser expresados como siguen:

Página 44 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

C1 = G0 + P0C0
C2 = G1 + P1C1
C3 = G2 + P2C2

Estas ecuaciones son recursivas, y la recursión puede ser removida como se indica a continuación:

C1 = G0 + P0C0
C2 = G1 + P1C1 = G1 + P1(G0 + P0C0) = G1 + P1G0 + P1P0C0
C3 = G2 + P2C2 = G2 + P2(G1 + P1G0 + P1P0C0)
= G2 + P2G1 + P2P1G0 + P2P1P0C0
C4 =G3 + P3C3 = G3 + P3(G2 + P2G1 + P2P1G0 + P1P1P0C0)
= G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0

X3 Y3 X2 Y2 X1 Y1 X0 Y0 C0
Este resultado muestra
que C1, C2, C3 y C4 pueden ser
generados directamente de C0 y C4
las entradas. Por esta razón, Carry Look Ahead Logic (o Calculator)
estas ecuaciones son llamadas
Ecuaciones de Acarreo
Adelantado. Estas ecuaciones C3 C2 C1 C0
pueden implementarse en un FA FA FA FA
bloque hardware y alimentar
con el las entradas de los carry
del sumador completo S3 S2 S1 S0
obteniendo un CLA. La figura 4.5
Figura 4.5. Un Sumador de acarreo adelantado o CLA de 4 bits.
muestra la implementación de
tal CLA.

En función de un bloque CLA de n bits podemos implementar una unidad aritmética de n bits de suma y resta
como muestra la figura 4.6

X 16

16 F
Y CLA
16
MUX

MUXsel Cin

S0
Figura 4.6. Unidad Aritmética de Suma y Resta

Parte importante de la unidad aritmética son las banderas de resultado o condición de las operaciones. Estas
banderas se unen en una palabra de estado del procesador PSW o un registro de banderas FLAGS que es

Docente: Ing. José Díaz Chow Página 45


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

accesible bit a bit, pues se implementa como un conjunto de Flip Flops independientes. La implementación
de tales banderas se relaciona mucho con la ALU. Por ejemplo, la bandera Signo o Negativo, toma su valor
del MSB o bit de signo del resultado en ALU. La bandera Zero, vale 1 cuando el resultado es 0 por tanto su
implementación es la operación AND de todos los bits de resultado negados. La bandera Carry es el acarreo
de salida del CLA.

4.4 LA UNIDAD LOGICA


El objetivo de la unidad lógica es proveer operaciones lógicas bit a bit. Esto se logra implementar
fácilmente empleando arreglos de n compuertas para los i-ésimos bits de la palabra (0 hasta n-1). Otros
objetivo requerido es la implementación de operaciones a nivel de bits tales como desplazamiento, negación,
verificación del valor de un bit en específico y establecimiento de un valor para un bit en específico. Estas
operaciones, se pueden implementar como redes de desplazamiento combinacionales o como parte de las
funciones de los Registros de Propósito General.

La figura 4.7 nos muestra la X


16
implementación de una
unidad lógica que ofrece dos
16 AND
simples operaciones AND y Y
OR., tomando como base un
integrado de 16 compuertas G
MUX
AND y otro de 16 OR. 16

16 OR

S0

Figura 4.7 Unidad lógica de dos funciones.

4.5 DISEÑO DE LA ALU


Finalmente, si unimos nuestra unidad aritmética con la lógica podemos obtener una ALU completa. La
figura 4.8 nos muestra cómo lograr este objetivo, mediante la selección adecuada de la salida en base a las
líneas de selección.

Página 46 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

X
16
Unidad F
Y 16 Aritmética

Z
MUX

16

Unidad G
16 Lógica

S0
S1

Figura 4.8 Diseño a Bloques de la ALU

4.6 EXTENSIONES DE LA ALU


Se pueden implementar mejoras y ampliaciones a nuestra ALU sencilla, por ejemplo implementando la
multiplicación y la división en Hardware. Algunas implementaciones se resumen a continuación:

Operación Algoritmo / Técnica de implementación


Algoritmo de Braun
Algoritmos basados en CSA y árboles de Wallace
Multiplicación
Algoritmo de Booth
Usar una ROM como tabla
Algoritmo Restoring Divide
Algoritmo Non-Restoring Divide
División
SRT (Algoritmo de Sweeney, Robertson y
Tochter)

4.7 REGISTROS DE PROPOSITO GENERAL

Los registros de propósito general del CPU son una parte importante de la unidad de ejecución pues
son el origen y destino de las operaciones. Además, algunas operaciones a nivel de bits se pueden
implementan en el seno de estos registros.

4.7.1 Diseño de los Registros de Propósito General o GPR

La tarea principal de un GRP es almacenar datos para las operaciones aritméticas. Algunas
implementaciones de GRP les permiten manipular los datos almacenados por operaciones de

Docente: Ing. José Díaz Chow Página 47


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

desplazamiento (hacia la izquierda o derecha) a estos se les denomina Registros con capacidad de
desplazamiento o Shifting (Shift Register).

En el desplazamiento lógico un bit que es desplazado será perdido y la posición vacante será llenada de cero.

Ejemplo: Desplazamiento a la derecha.

Antes del desplazamiento Después del desplazamiento


0 0 0 0 1 0 11 00010110

Un desplazamiento lógico de n posiciones a la derecha o a la izquierda de un número sin signo


implica multiplicación o división del número por 2n, respectivamente.

En el caso de desplazamiento aritmético, el bit de signo del número a ser desplazado debe ser retenido para
asegurar que el signo del número se mantendrá. Esto es necesario cuando se implementa desplazamiento
aritmético a la derecha. En el caso de desplazamiento hacia la izquierda, no hay diferencia entre el lógico y el
aritmético.

La rotación es útil para la serialización de datos paralelos. Dispositivos periféricos tales como lectoras de
casetes esperan datos seriales de 8 bits. En esta situación, la CPU transfiere el contenido de un registro de 8
bits del CPU a la lectora rotando el registro 8 veces. También se emplea la rotación para algunas operaciones
de conteo aritmético. Muchos CPUs permiten la rotación con Carry lo que significa que la bandera de Carry
forma parte de la rotación. Si la rotación es a la izquierda, el carry entra al bit menos significativo o lsb en
tanto que el bit más significativo se almacena en el acarreo. En caso de rotación derecha sucede lo inverso, el
carry se almacena en el bit más significativo y el menos significativo pasa al acarreo.

Para diseñar un registro de propósito general con capacidad de desplazamiento, vamos a proponer una celda
básica S. La organización de esta celda es mostrada en la figura 4.6. En este diseño, un multiplexor de 4
entradas selecciona una de las entradas externas para que sea la entrada D del flip-flop, y la entrada
seleccionada aparecerá en la salida del Flip-Flop Q después del pulso del reloj. La entrada CLR es una entrada
asincrónica de clear, y limpia el FF en el instante que ésta es puesta en nivel bajo (cero).

Página 48 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Entradas Externas
Entradas Externas

s1 0 1 2 3
s1
s0 0 1 2 3
s0 s1 s1
MUX
s0 s0

CLK CLK S
CLK CLK
CLR CLR
D
CLR CLR
Q

qi
Salida

qi
Salida
Organización interna de la celda Diagrama a bloque de la celda
básica S básica S

Figura 4.9. Celda básica para implementar un Shift Register.

Podemos diseñar un GPR completo usando la celda básica S, mediante conexión en cascada, como muestra la
figura 4.10. En esta figura, R (Right Shift Serial Input) y L(Left Shift Serial Input) son entradas que permiten
implementar el desplazamiento y la rotación según el valor que tengan en cada momento.
X3 X2 X1 X0

R L
(Entrada (Entrada
derecha) izquierda)

0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
s1 s1
s0 s0
S3 S2 S1 S0
CLK CLK
CLR CLR

q3 q2 q1 q0

Registro de Propósito General (GPR) de 4 bits

Figura 4.10 Implementación de un GPR de 4 bits con capacidad de Shifting.

Docente: Ing. José Díaz Chow Página 49


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

La tabla de verdad con las operaciones de este registro se presenta en la figura 4.11. Esta tabla
muestra que la manipulación de las entradas de selección S1 y S0 pueden causar tres operaciones distintas:
Carga Paralela, Desplazamiento a la Izquierda y desplazamiento a la derecha. Si S1S0 = 11, la entradas
externas X’s son seleccionadas como las entradas D a los flip-flops. Escogiendo los valores correctos para
desplazamiento serial, con las entradas, R y L se pueden realizar operaciones de rotación y desplazamiento
lógico y aritmético. Modifique esta tabla para que refleje los valores que deben de tomar R y L para
implementar los desplazamientos lógicos y aritméticos y la rotación.

D Q CLR D Q S1 S0 CLR CLK Operación


0 X 0 X X 0 X Clear GPR
CLK 1 0 0 0 0 1 Ninguna
1 1 1 0 1 1 Despl. Der.
CLR Q'
1 0 1 Despl. Izq.
1 1 1 Carga Paral.
Diagrama de bloque del FF Tabla de Funciones
Tabla de Funciones del GPR de 4 bits
tipo D del FF tipo D

Figura 4.11 Tablas de operación para el FF tipo D y para el GPR de 4 bits.

El registro puede ser cargado con cualquier dato en una forma serial. Por ejemplo, después de cuatro
operaciones sucesivas de desplazamiento a la derecha, el dato X será cargado en el registro si el registro esta
establecido en el modo desplazamiento a la derecha y el dato X requerido es aplicado serialmente a la
entrada R. Para algunas aplicaciones, este retardo de n períodos de reloj para la ejecución de una operación,
no es permisible, por cuanto se aplican otros métodos asíncronos para diseñar registros que no dependan de
un reloj y por lo tanto sean más rápidos. Esos tipos de registro combinacionales se denominan Barrel Shift
Registers. El 68020 de Motorola y el 80386 de Intel ya emplean este tipo avanzado de registros.

4.8 ARITMETICA EN PUNTO FLOTANTE


Hasta el momento hemos presentado la aritmética de enteros, que es el alcance de la mayoría de los
procesadores sencillos como nuestro modelo. Para realizar cálculos en punto flotante, en formato binario, se
han desarrollado algoritmos. Muchas máquinas, como el Z80, tienen librerías se software para emular las
operaciones en punto flotante sobre su aritmética de enteros. Otras máquinas incluyen procesadores
especializados para estos cálculos (llamados coprocesadores matemáticos) como el 8086 de Intel (el
coprocesador es el 8087) y finalmente otras, incluyen unidades de cálculo en punto flotante FPUs dentro del
mismo CPU, como el 80486, también de Intel.

No nos ocuparemos en este curso en profundizar en la aritmética en punto flotante. Solamente


anotaremos que las máquinas que la implementan en hardware usan formatos especiales para representar un
número en punto flotante. Un número en punto flotante se compone de una mantisa multiplicada por una
base elevada a un exponente, por ejemplo: -34.89 * 1012. En formato binario, la base está implícita, por tanto
podemos almacenar solamente la mantisa y el exponente. El formato más reconocido es el estándar IEEE 754
que usa mantisa en notación signo-magnitud y el exponente en exceso a M. Existe en simple precisión (32 bits)
y doble precisión (64 bits). La figura 4.2 muestra el formato de simple precisión donde el exponente se
representa en exceso a 127 (8 bits) y la mantisa en signo-magnitud (1 + 23 bits)

Página 50 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

5. LA UNIDAD DE CONTROL
5.1 LA FUNCION DE CONTROL

Todas las operaciones del procesador son coordinadas por la unidad de control. Aunque este
objetivo puede resultar muy complejo, los diseñadores enfrentan esa complejidad, simplificando el trabajo
de la unidad de control a sincronizar la ejecución de pequeñas operaciones denominadas operaciones de
control (la antigua táctica de divide y vencerás). El trabajo del CPU consiste en ejecutar instrucciones y por
tanto el trabajo de la unidad de control consiste en ejecutar las operaciones de control requeridas para
ejecutar cada instrucción.

La unidad de control o CU (por sus siglas en inglés), realiza estas operaciones mediante la activación y
desactivación de señales, que se transmiten a través de líneas de control. Por ejemplo, para realizar una
lectura en memoria, la CU debe activar una señal habilita la memoria y además otra señal que indique el tipo
de función de memoria desea realizar, la cual puede ser Lectura o Escritura. En este caso específico: lectura.
Cuando la lectura se ha realizado (se ha completado el ciclo de máquina de lectura), la memoria (o más bien
su controlador o el controlador del bus) debe activa una señal que permita al procesador detectar la
completación de dicha función de memoria. Para efectos de nuestro curso, la llamaremos MFC (Memory
Function Completed). Cuando MFC se activa, el procesador puede tener la certeza que el dato solicitado a la
memoria, está disponible en el MDR, en nuestro modelo de procesador.

Es necesario notar que la CU tiene tanto señales de entrada como de salida, por ejemplo la señal READ es de
salida y la señal MFC es de entrada. Otro ejemplo más conocido de señal de entrada puede ser la solicitud de
interrupción (INT) que se activa cuando un dispositivo requiere la atención del procesador.

Como la unidad de control debe sincronizarse con


todos los elementos del CPU que son síncronos (por CU
ejemplo, los registros), requiere de un reloj que genere DECODIFICADOR

una base de tiempo para activar o desactivar estas


IR R0
señales en cada pulso de reloj. El conjunto de acciones
u operaciones de control que la unidad de control

. . .
PC
realiza en un mismo pulso de reloj se denomina Paso Bus
de
de control. Dirección
MAR
MEMORIA
Para poder entender el funcionamiento de la unidad MDR Rn-1
de control, requerimos definir a detalle la estructura Bus
de
Datos
del procesador: ALU, registros de trabajo y de Y source
propósito general, así como la estructura de
interconexión de los componentes dentro del Y X
SP
Líneas
procesador. Para efectos didácticos vamos a recurrir de ALU
Control
ALU
nuevamente a nuestro modelo sencillo de procesador
con un sólo bus común, que se muestra en la figura Z
5.1. Nótese la existencia de registros auxiliares de
trabajo como Y, Z y SOURCE que son inaccesibles al Figura 5.1. Organización simple de Procesador con bus único
programador y se usan para almacenar datos
temporalmente entre pasos diferentes de control.

Existen también procesadores con múltiples buses internos que mejoran el desempeño de la ejecución.

Docente: Ing. José Díaz Chow Página 51


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

En tal arquitectura de bus común, las salidas de los componentes deben estar aislados galvánicamente del
bus para evitar corrupción de los datos. Por ejemplo, dos registros que tengan algún n-ésimo bit con valores
lógicos opuestos podrían exponer la línea n del bus a voltajes con diferente potencial provocando pérdida del
valor escrito, nótese que esto es técnicamente un cortocircuito que perfectamente podría dañar
componentes.

Para evitar esto, los registros del procesador están aislados del bus mediante compuertas de alta impedancia
o buffers tri-estado. El funcionamiento de tales buffers puede concebirse como compuertas direccionales
que permiten el paso de la corriente en una sola dirección cuando su línea de control se activa. Cuando la
línea de control del buffer está inactiva, separa la salida del circuito gracias a su muy alta impedancia.
Imaginemos que funciona como una especie de switch que permite al dato salir al bus o no, en dependencia
del valor de la entrada de control. Un esquema de tales compuertas se ilustra en la figura 5.2.

Cada registro, en un sistema de interconexión por buses debe contar, por tanto, con un mecanismo para
controlar su entrada y su salida. Normalmente para la salida se emplean las compuertas de alta impedancia
mencionadas en el párrafo anterior. En la entrada puede usarse un MUX (recordemos de la unidad anterior la
construcción del GPR) en lugar de una compuerta de alta impedancia. La unidad de control, tendría a su
cargo, el coordinar las entradas y las salidas de cada registro,
para lo cual emplearía las líneas de activación de tales PC R0 in in

compuertas. Por ejemplo, para un registro Ri, La compuerta de x x


entrada se activa mediante la señal Riin. Supongamos que PC R0
nuestras compuertas se activan con lógica positiva, entonces, si
esta señal Riin está en 0 lógico, la compuerta está bloqueada o x x
PC outR0 out

en alta impedancia, evitando cambios en el contenido del Y in


R1 in

registro, pero cuando está en 1 lógico, permite que el x x


contenido del bus se cargue al registro Ri. La compuerta de R1
salida es activada por la señal Riout, Si esta señal está en un 0 Y
x
lógico, aísla la salida del registro del bus, pero si está en 1 R1 out

lógico escribe el contenido de Ri en el bus. R2 in

Y X x
Es clave comprender que no es permitido activar dos ALU R2
compuertas de salida en el mismo instante de tiempo (o pulso x
de reloj del procesador), pues no tiene sentido, lo que Zin
x R2out

lograríamos es corromper los datos como hemos expuesto


anteriormente. Por otro lado, sí podemos “copiar” el contenido Z
del bus en diferentes registros a la vez, es decir, podemos
activar las señales Riin de varios registros en un mismo paso de Zout x
control, pero sólo una señal Riout sobre un mismo bus.
Figura 5.2. Manejo de Registros por compuerta

5.2 OPERACIONES BASICAS DE CONTROL

En nuestro modelo sencillo de procesador y en muchos procesadores reales, una instrucción no puede
realizarse de una sola vez en un único pulso de reloj, por limitaciones de diseño u otras razones físicas como
las comentadas en el párrafo anterior respecto al bus; sino que se requiere de varios pasos de ejecución. En
cada uno de estos pasos se realiza una o más operaciones básicas. Para que se realice cada una de estas
Página 52 Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

operaciones se deben activar una serie de señales de control (como las de las compuertas de los registros) y
apagar otras, de forma que la acción deseada se logre en ese instante. Cada uno de estos pasos se ejecuta
en un ciclo de reloj y se denomina “paso de control”.

Como hemos dicho: una instrucción se ejecuta en varios pasos de control. En cada paso de control se
ejecutan una serie de operaciones básicas. La CU debe poder controlar todas estas operaciones básicas en
función de los pasos de control. Ejemplos de las operaciones básicas primordiales de la unidad de control,
son:

 Transferir el contenido de un registro a otro.


 Leer o escribir una palabra en la memoria.
 Ejecutar una operación de la ALU.
 Incrementar el PC.
 Modificar el PC.
 Verificar el estado de las solicitudes de interrupción.
 Verificar / establecer el estado de las banderas y códigos de condición.
 Limpiar, verificar o establecer bits específicos de registros auxiliares (como Y)
 Decodificar una instrucción.

Veamos ahora, por ejemplo, qué acciones o pasos de control se deben realizar para transferir valores entre
registros. En el caso específico de dos registros, supongamos que deseamos trasladar el contenido del
registro R1 a R2, para esto se requieren las siguientes acciones que se ejecutan en un solo paso de control:

 Habilitar la compuerta de salida de R1 para poner su contenido en el bus


 Habilitar la compuerta de entrada de R2 para permitir que el contenido del bus se copie en él.

De forma simbólica podemos escribir:

Paso Acciones

1 R1out, R2in

Otra tarea típica durante la ejecución es la realización de una función de la ALU, por ejemplo, sumar R1 +
R2 (R2 R1 + R2). Para esto se necesita:

 Poner el valor de R2 en el bus mediante R2out


 Leer el valor del bus en el registro auxiliar de ALU “Y” conectado al puerto Y de la misma.
 Poner el valor de R1 en el bus mediante R1out
 Activar la operación suma (ADD) de la ALU y activar Zin para guardar en este registro auxiliar de la ALU
el resultado
 Poner el valor de Z en el bus mediante Zout
 Copiar el valor del bus en R2

Formalmente:

Docente: Ing. José Díaz Chow Página 53


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Paso Acciones

1 R2out, Yin
2 R1out, ADD, Zin
3 Zout, R1in

5.3 PASOS DE CONTROL PARA LA EJECUCION DE UNA INSTRUCCION

Anteriormente en nuestro curso se ha mencionado que la tarea de un procesador secuencial como el


nuestro, es ejecutar constantemente un ciclo de instrucción. En este ciclo de instrucción existen dos fases:
carga (fetch) y ejecución (execute). En la primera se trae la próxima instrucción a ejecutar desde la memoria y
en la segunda se ejecuta. Nótese que la fase fetch es idéntica para todas las instrucciones pero la fase execute
difiere para las distintas instrucciones.

Una tarea importante en el diseño de la CU de todo procesador es establecer la estrategia de ejecución, es


decir, qué pasos generales seguirá el procesador para ejecutar las instrucciones. Esta estrategia está
íntimamente ligada con la arquitectura y la organización de cada procesador, por lo cual en nuestro curso, nos
ajustaremos a nuestro modelo de procesador secuencial sencillo. Desde el punto de vista de arquitectura, debe
definirse el conjunto de instrucciones, enfatizando en los modos de direccionamiento y cómo se calcula la
dirección efectiva y obtiene el operando, así como el diseño del formato de instrucción y forma de
almacenamiento en la memoria. Desde el punto de vista organizativo, interesa definir qué registros de trabajo
se emplearán para auxiliar en las operaciones y en qué orden se realizarán éstas.

Nuestro conjunto de instrucciones, debe definir los modos de direccionamiento que serán soportados.
Para efectos del curso consideraremos solamente: Inmediato, de registro (directo e indirecto), de memoria
(absoluto), autoincremento y autodecremento (con sus indirectos), el modo de índice (con su indirecto) y el
relativo al PC. Sin embargo nuestro mayor énfasis estará en los modos basados en registros.

Continuando la definición de nuestra arquitectura, definimos nuestra palabra de procesador en 16 bits, y éste
será también el tamaño de los registros, direcciones de memoria y las instrucciones. Asimismo, para simplificar
el acceso a memoria, consideraremos que ésta es direccionable por palabra y no por byte. De esta forma,
cuando un valor no quepa dentro de los 16 bits del formato de instrucción, se empleará la palabra siguiente a
la instrucción para almacenar tal valor. Por ejemplo, la instrucción Add R1, (1000) que suma el valor de R1 con
el contenido de la celda de memoria 1000 y guarda su resultado en la celda de memoria 1000, debe
almacenarse como programa en lenguaje de máquina en dos palabras, la primera de ellas almacena la
instrucción en sí y la segunda almacena el 1000.

Otro ejemplo más complicado es: Add 1000(R1), (2000). En este caso, se emplea modo de índice en el
operando fuente y modo absoluto en el destino. Esta instrucción se almacena en tres palabras, la primera
almacena la instrucción en sí, la segunda almacena el 1000 del fuente y la tercera el 2000 del destino.

Sin embargo, obsérvese que en algunos casos, el operando cabe dentro del formato de instrucciones y por
tanto no se requiere de una palabra adjunta para él. Por ejemplo algunas instrucciones con modo inmediato
o relativo que tienen un valor numérico de 8 bits, como muestra la figura 5.3.

Página 54 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6 Bits 2 Bits 8 Bits

CO MD1 V
Figura 5.3. Ejemplo de formato inmediato - relativo

En base a lo anterior, note que los operandos pueden requerir operaciones ALU para el cálculo de la
dirección efectiva (EA) y varios accesos a memoria para traer el valor del operando. Por este motivo, al traer
el operando fuente hay que guardarlo en un registro temporal, en nuestro caso en source.

Ahora, podemos pasar a definir los pasos de la estrategia de ejecución:

 Fase Fetch:
o Poner el valor del PC en el MAR y mandar a leer
o Incrementar el PC y esperar MFC
o Pasar el contenido del MDR al IR y Decodificar.

 Fase Execute
o Calcular EA del primer operando, si necesario
o Trasladar el primer operando a SOURCE
o Calcular EA del segundo operando, si necesario
o Traer el segundo operando al CPU si no está en él y ponerlo en Y(ALU) si necesario.
o Efectuar la operación ALU (si pertinente)
o Trasladar el resultado al destino
o Verificar Solicitudes de Interrupción.

A continuación se ilustrarán los pasos de control para traer la próxima instrucción, cuya dirección
siempre debe estar en el PC (Fase Fetch)

Paso Acción u Operaciones de Control


1 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
2 Zout, PCin, WMFC
3 MDRout, IRin

Otros ejemplos de Ejecución de instrucciones se listan a continuación.

Docente: Ing. José Díaz Chow Página 55


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Secuencia de Control para la instruccion de ADD R1, R2

Paso Acción u Operaciones de Control


1 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
2 Zout, PCin, WMFC
3 MDRout, IRin
4 R1out, SOURCEin
5 R2out, Yin
6 SOURCEout, ADD, Zin
7 Zout, R2in
8 End

Secuencia de Control para la instruccion de ADD (R1), R2

Paso Acción u Operaciones de Control


1 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
2 Zout, PCin, WMFC
3 MDRout, IRin
4 R1out, MARin, READ, WMFC
5 MDRout, SOURCEin
6 R2out, Yin
6 SOURCEout, ADD, Zin
7 Zout, R2in
8 End

Un tipo de instrucción especial son las de salto. Las de IR


salto condicional y relativo, son especialmente complicadas.
7 0
Veamos unos ejemplos de nuestro procesador modelo: Br o Salto
relativo incondicional. Esta instrucción tiene un formato como el 8
de la figura 5.3. El valor V de 8 bits debe extenderse a 16 bits. Para
obtener el operando basta sacarlo de los 8 bits menos
Sign
significativos del IR, que se denota como campo de bits como Extension
IR[7…0] o más simplificadamente, IR(V). A continuación detallamos
los pasos de control que se requieren para ejecutar esta
instrucción. La figura 5.4 muestra la unidad de extensión de signo IRout
que se requiere para permitir llevar al bus de 16 bits los 8 lsb del
IR.

Al bus
Figura 5.4 Extensión de Signo

Página 56 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Secuencia de Control para una instruccion de


Ramificación Incondicional

Paso Acción u Operaciones de Control


1 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
2 Zout, PCin, WMFC
3 MDRout, IRin
4 PCout, Yin
5 IR(V)out, ADD, Zin
6 Zout, PCin
7 End

Un ejemplo más completo es el caso del BRN (Branch on Negative) que modifica el valor del PC sólo si la
bandera de condición N está establecida a 1. Los pasos de control necesarios son los mismos que para BR
excepto que el paso 4 debe modificarse como se muestra:

Caso de la Ramificacion Condicional "Branch On Negative" BRN

El paso 4 se cambia por:


4 IF N Then END
IF N Then PCout, Yin

Las banderas de condición así como muchos códigos de condición se almacenan en un registro
especial, llamado Processor Status Word en muchas máquinas, por ejemplo la PDP-11 que tiene una
instrucción BRN, como la de nuestro procesador modelo, tiene la PSW que se muestra en la figura 5.5. La
bandera N o Negative se establece a 1 si el resultado de una operación aritmética fue negativo. En muchos
procesadores, como el Z80 y el i8086, esta bandera se denomina S o Sign.

PSW (Processor Status Word ) en la PDP-11


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

T N Z V C
Modo Modo Prioridad Banderas de Condición
Actual Anterior
Trap
Figura 5.5 Palabra de Estado de la PDP-11

Continuando con la implementación de nuestra CU, debe ponerse especial interés en la espera a que la
memoria (que normalmente es más lenta que el CPU) nos entregue la palabra que estamos leyendo. Esto se
logra mediante la señal WMFC activada para esperar un dato a leer desde la memoria. Cuando esta señal se
activa, no se debe continuar la generación de nuevas señales de control, es decir, las señales quedan

Docente: Ing. José Díaz Chow Página 57


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

“congeladas” hasta que el control de la memoria active la señal MFC indicando que se completó su función.
Recuerde que la Memoria es un dispositivo asíncrono respecto al reloj del procesador y por tanto, la
implementación de esta señal debe sincronizar el próximo paso de control con el reloj principal del procesador.

Una vez que hemos especificado la función y los procedimientos que debe seguir la unidad de control, la
próxima pregunta es cómo implementarla. Existen dos formas, implementarla directamente en hardware,
como una máquina de estados o empleando microprogramación.

5.4 UNIDAD DE CONTROL FIJO


En términos generales, la unidad de control puede verse como una caja negra que recibe una serie
de entradas y genera una serie de salidas en un instante de tiempo. Las entradas son : a) El tipo de
instrucción que se está ejecutando (IR), b) un
indicador del paso de control actual y c) el ORGANIZACION DE LA UNIDAD DE CONTROL
estado de la máquina que se obtiene en
CONTADOR DE PASO
función de las banderas y códigos de CLCK
DE CONTROL

condición. ...
BANDERAS DE

...
CONDICION
El indicador del paso de control actual DECODIFICADOR /
...

IR
se puede implementar mediante un contador CODIFICADOR

de los pulsos del reloj base que se restablezca CODIGOS DE

...
CONDICION

a cero con cada señal End a fin de volver al


primer paso de la fase de carga fetch. La figura ...
5.6 muestra la organización a bloques de tal
unidad de control. Señales de Control

En este caso, la CU actúa como un gran Figura 5.6 – Organización de la unidad de control
decodificador/codificador que decodifica la
instrucción en el IR, el paso de control y el 1.1.1.1 FIGURA 5.6 DIAGRAMA A BLOQUES
estado de la máquina y codifica las señales D ECONTADOR
LA CU DE
CLCK PASO
de control. Si separamos estas funciones, DE CONTROL
...
podemos especificar mejor el diseño de la
CU en función de la función principal: DECODIFICA-
DOR DE PASO
generación de las señales de control para T1 T2
... Tn

cada paso de cada instrucción. En este I1

I2
BANDERAS DE
enfoque más detallado, se hace evidente la
...

I3 CONDICION
DECODIFI-
necesidad de una señal de reset del CADOR DE
...

...

IR INSTRUCCIO-
CODIFICADOR
contador de paso que no es más que la NES
CODIGOS DE
señal End y la necesidad de otra señal de
...

Im CONDICION

habilitación de conteo que llamaremos RUN. ...


Esta última señal puede ser muy útil en la RUN END

implementación de la espera efectiva de


MFC. Cuando RUN está en 1, el contador Señales de Control
incrementa, en caso contrario no avanza. La
Figura 5.7 Organización detallada de la CU

Página 58 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

figura 5.7 muestra en detalle esta organización.

El bloque codificador o generador de señales de salida tiene ahora como entrada señales Ii que le
indican la instrucción y señales Tj que le indican el paso actual así como las banderas y códigos de condición.
Ahora bien, cómo se genera cada señal de salida. Un enfoque bastante simple consiste en realizar un
inventario de todas las señales de control necesarias y luego determinar las expresiones algebraicas lógicas
para cada una de ellas, por ejemplo, la señal Zin, se activa siempre en el paso 1 de la fase fetch,
independientemente de la instrucción que sea, también en el paso 6 de la instrucción ADD, el 5 de BRN, etc;
por tanto la expresión de Zin sería:

Zin = T1 + ADD.T6 + BRN.T5 + ....

End, por su parte sería:

End = T8.ADD + T7.BR + T4.(~N).BRN + T7.N.BRN+ …

Así se obtienen las de todas las señales de control y la generación se señales de la CU se reduce a
implementar los circuitos combinacionales de estas expresiones como se muestra en la figura 5.8 con los
ejemplos Zin y End.

Generación de la señal Generación de la señal de


de control Zin control END

BRN
N N
ADD BR ADD JR
T6 T5 T8 T7 T7 T4

T1 ... ...
... ...

Zin
END

Figura 5.8 Implementación de algunas señales de control

Docente: Ing. José Díaz Chow Página 59


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Ahora estamos en posición de implementar la espera efectiva iniciada por la señal WMFC, lo cual
se hace mediante el auxilio de la señal RUN. Sabemos que la señal RUN nos puede permitir “enfriar” el
contador de pasos de control hasta que se establezca
MFC y por tanto ésta debe ser 1 cuando no hay espera a
MFC y 0 cuando sí la hay. El simple circuito de la figura 5.9 ADD Generación de la
T4
me permite implementar estas condiciones, como el señal RUN
lector puede fácilmente comprobar.

Sin embargo, debido a la asincronía entre T2 ... ...


Memoria y CPU, dicha señal podría establecerse en un
momento inadecuado, como muestra el diagrama de
temporización de la figura 5.10, por tanto se requiere WMFC RUN

sincronizar la señal MFC para que “espere” al reloj base,


MFC
lo cual se logra anexando un elemento sincrónico como
un FF tipo D. Esta solución se muestra en la figura 5.11 Figura 5.9 Implementación de WMFC y RUN.

MCLK Sincronización de MFC


CLK con el Reloj Base

WMFC WMFC

MFC
RUN
RUN MFC
D Q

READ RELOJ BASE

T1 T2 T3

Temporización de las señales de control durante la traída de las instrucciones


Figura 5.11 Sincronización MFC con el reloj base

Figura 5.10 Necesidad de sincronización de MFC.

Finalmente, podemos acotar que para simplificar la circuitería, en procesadores reales, todas las
señales de control se implementar en bloques PLA, como muestra la figura 5.12. Existen otras formas y
técnicas más complejas y refinadas para implementar tales unidades de control alambrado.

Página 60 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

PLA ( PROGRAMABLE LOGIC ARRAY )

ARREGLO ARREGLO

...
AND OR

... ... ... ...


CONTADOR DE BANDERAS Y
IR PASO DE CODIGOS DE
CONTROL CONDICION Señales de Control

Figura 5.12 Implementación de un controlador de secuencia con un chip VLSI

Ejercicio:
1. Investigue qué tipo de unidad de control predomina en máquinas RISC y cuál en máquinas CISC.
Argumente las razones.
2. Establezca ventajas y desventajas de la CU alambrada.

5.5 UNIDAD DE CONTROL MICROPROGRAMADA

Hemos estudiado la función y diseño general de una unidad de control y definido una técnica sencilla
para implementar una CU Fija o alambrada. Ahora estudiaremos otro enfoque, la CU microprogramada.

Si hacemos un recuento de la función de nuestra CU como caja negra, se evidencia que solamente requerimos
activar en cada lapso de tiempo o paso de control, las señales de control adecuadas para ejecutar la
instrucción. Estas señales de control, en realidad son responsables de ejecutar una serie de operaciones de
control o micro-operaciones que ejecutan la instrucción.

Al agrupar y organizar el conjunto de señales de control, puede visualizarse que en cada paso de control,
algunas de ellas están activadas (en 1 lógico) y el resto desactivadas (0 lógico) Si anotamos los estados de estas
señales con ceros y unos, veremos que forman un patrón binario, como nos muestra la figura 5.13. A este
arreglo de estados de las señales de control en un paso de control se le denomina palabra de control o cw.

MARi
Paso PCin PCout Yin READ MDRout IRin ClrY SetC ADD Zin Zout R1in R1out R2in R2out WMFC END …
n

1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 …
2 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 …
… … … … … … … … … … … … … … … … … … … …
Figura 5.13 Correspondencia Señal de control-bit de cw

Docente: Ing. José Díaz Chow Página 61


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Así, ejecutar una instrucción se limitaría a cargar secuencialmente las Cw en cada paso y activar las señales en
uno y desactivar las señales en cero, o más bien “cargar” el valor de la Cw en la salida de la CU. La secuencia
de Cws para cada instrucción se llamaría Microprograma o programa y cada Cw se llamaría instrucción.
Claro que necesitamos entonces, almacenar los programas en una memoria permanente de muy alta
velocidad (generalmente una ROM) dentro de la CU. A esta memoria se le llama memoria de control.

La figura a continuación muestra el microprograma para la instrucción ADD R1, R2.

SOURCEout
SOURCEin
CLEAR Y
MDRout

WMFC
… …
MARin

SET C
READ
PCout

R1out

R2out
ADD

End
PCin

R1in

R2in
CW

Zout
IRin
Yin

Zin
1 … 0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 …

2 … 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 …

3 … 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 …

4 … 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 …

5 … 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 …

6 … 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 …

7 … 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 …

8 … 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 …
Figura 5.14 Microprograma para ADD R1, R2

Para implementar la Unidad de Control microprogramada, se requiere entonces de todos los


microprogramas de todas las instrucciones del CPU almacenados en una memoria de control y un mecanismo
que permita cargar el microprograma adecuado para la instrucción que se carga en el IR y ejecutar dicho
microprograma. Este mecanismo se denomina secuenciador de microprograma o microinstrucciones. El
secuenciador de microprograma necesita determinar la dirección inicial del microprograma de la instrucción
en el IR, lo cual se logra mediante un decodificador/codificador que permite obtener dicha dirección en función
del CO de la instrucción. También requiere recorrer el microprograma, para lo cual se provee un microPC (PC)
que apunta siempre a la próxima instrucción a ejecutar.

Página 62 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

El secuenciamiento entre instrucciones se puede lograr


de varias formas, la más sencilla es que éstas estén almacenadas Generador
secuencialmente en la memoria el PC tenga la capacidad de IR de Dirección
auto-incrementarse. Otra técnica muy empleada consiste en inicial
agregar a la instrucción un campo de próxima instrucción, que
hace más sencilla la implementación pero deja bastante trabajo
al programador del sistema. Nosotros seguiremos la primera
opción. La figura 5.15 muestra el diagrama a bloques de nuestro
PC
secuenciador de microinstrucciones.

Muchas instrucciones, sin embargo, requieren verificar


códigos y banderas de condición, así como modificar el flujo del cw
Memoria del
programa. Entonces, debe agregarse a las Instrucciones la
Programa
capacidad de Verificar tales códigos y banderas así como poder
ramificarse, es decir, no continuar en la próxima instrucción
sino en otra (recordemos el caso de BRN). A este cambio en el Figura 5.15 Secuenciador de microinstrucciones

flujo de microinstrucciones se denomina microrramificación


(ramificación o Branch).

Para permitir microrramificaciones, deben agregarse algunos campos de bits extra en la palabra de
control Cw que permitan definir si la ésta es una Ramificación o si puede ramificarse en función de alguna
condición. También deben definirse qué códigos o banderas de condición se evalúan y alguna forma de
obtener la dirección de salto o modificación al PC. A partir de esto, podemos rediseñar nuestro
secuenciador de forma más detallada:

Banderas de
Generador de Condición
Dirección
IR inicial y de
ramificación Códigos de
Condición

PC

Memoria del cw
Programa

Figura 5.16 Secuenciador de microinstrucciones más detallado

Antes de pasar a analizar la operación del secuenciador, necesitamos definir algunas reglas:

Docente: Ing. José Díaz Chow Página 63


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 La fase fetch, que es común a toda instrucción, será definida como un programa independiente que
comienza en la primera celda de la memoria de control, así al encender la máquina el PC se inicializa
en 0 de forma tal que cargue la instrucción que está en el PC.

 La señal End debe poner el PC a 0.

 Al cargarse una nueva instrucción en el IR, el generador de direcciones debe cargar en el PC la
dirección inicial de la rutina que ejecuta dicha instrucción.

 Las Ramificaciones podrán modificar el valor del PC, ya sea cargando un nuevo valor o cambiando
algunos bits del mismo, como se estudiará más adelante.

Ahora, con este detalle sí es posible explicar cómo se implementa la ejecución de instrucciones que
requieren verificar el estado de las banderas de condición, ejemplo clásico es la instrucción BRN estudiada
anteriormente. El paso de control 4 de su desarrollo requiere de una Ramificación condicional que cambie
el flujo del programa en función del valor de la bandera N, pasando al paso 8 con End, si no habrás salto o
continuando en el paso 5 si debe modificarse el PC. Supongamos que el microprograma de la instrucción BRN
comienza en la celda 20 de la memoria de control, entonces, la implementación de ésta instrucción podría
realizarse escribiendo un microprograma de la siguiente manera:

MicroPrograma Para la Instrucción BRN

Dir MicroInstrucción
0 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
1 Zout, PCin, WMFC
2 MDRout, IRin
3 Branch Dirección Inicial del Prog. adecuado

20 Si N entoncesBranch a 24
21 PCout, Yin
22 IR(V)out, ADD, Zin
23 Zout, PCin
24 End

Es importante notar que la microinstrucción de la dirección 3 se encarga de modificar el PC con la


salida del generador de dirección inicial que bien puede estar implementado en PLA, en la práctica en esta
Instrucción lo que ocurre es PC = 20. También la Instrucción en la celda 20 es una Ramificación que
cambia el valor del PC, pero con un valor fijo en función de una condición. En la práctica esto se logra
modificando los bits del PC selectivamente. La figura 5.17 nos puede ayudar a comprender esto mejor.
Durante la ejecución de la instrucción 20, el PC vale 21 pues se auto incrementó. Supongamos que el PC

Página 64 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

es de 12 bits y que se codifica en octal (3 bits por


dígito), entonces el valor 21 del PC, se codificaría PC
como muestra la figura. Si N es 0 no debe haber
salto y por tanto el PC debe modificarse para
valer 24, sino debe conservar su valor de 21. Esto 0 0 0 0 0 0 0 1 0 0 0 1
se logra estableciendo el valor del bit 2 PC a ~N y
el bit 0 del PC a N (PC2  ~N, PC0  N) como 11 10 9 8 7 6 5 4 3 2 1 0
muestra la figura 5.17.

N N
Figura 5.17. Modificación del PC en BRN
Un caso de necesario estudio es la señal
WMFC. Aunque el control programado sea más lento de ejecutar que el alambrado, las memorias de
control suelen ser muy pequeñas y mucho más rápidas que la principal, por lo cual siempre será necesario
inhibir la generación de las señales de control de la Instruccióni+1 si la Instruccióni activó la señal WMFC,
hasta que la memoria principal complete su ciclo de lectura y se active la señal MFC. Existen dos enfoques:

 Polling de la señal MFC (Ciclo que verifica el estado de la señal)


 Hardware de Inhibición con un FF establecido por WMFC y Restablecido por MFC.

La Figura abajo muestra un posible implante del segundo acercamiento, empleando un FF tipo D.

El esquema propuesto hasta el momento es sencillo sin embargo se presta a desperdicio que podrían

Banderas de
Condición
Generador de Dirección inicial
IR y de ramificación
Códigos de
Condición

INC PC

cw Señales de
Control

Q' Generador de
...

MFC
CLK Memoria del
Señales de
Programa Control
D
WMFC Q
E
Figura 5.18 Implementación de la espera efectiva de WMFC

hacer crecer mucho la memoria de control, por ejemplo, note que por regla general todas las instrucciones
han dejado el último paso de control sólo para la señal END. La tarea de esta señal es restablecer el PC e
indicar la finalización de la instrucción actual. Se puede ahorrar una instrucción, activando esta señal de
último en el paso anterior. Otro caso es el posible desperdicio cuando una instrucción posee múltiples
modos, pues el diseñador puede estar tentado a escribir un microprograma para cada combinación posible

Docente: Ing. José Díaz Chow Página 65


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

de operandos, sin embargo se pueden hacer Ramificaciones para conducir la micro rutina por el camino
indicado dentro del mismo microprograma.

Otro aspecto a considerar es la longitud de Cw. En realidad, tener un bit por cada señal de control, es
un gran desperdicio. En el esquema de CPU de un solo bus de nuestro modelo, se requiere de algunos
Registros auxiliares como SOURCE, DESTINE, TMP, SP, Y y Z; se tienen 8 GPR: R0…R7 lo cual nos da unas 29
señales in/out de registros. Por otro lado, las señales de los registros propios del CPU, suman otras 7 señales
de manejo por compuerta. Si adicionamos las de Memoria READ/WRITE, las 16 funciones ALU, Set/Reset C,
Clear Y, Set Y(0, 1, 2 ) y algunas 16 Funciones además de las señales y banderas, nos da unas 60 señales, con lo
cual el tamaño de palabra es bastante grande. Si observamos, muchas señales no se emplean al mismo
tiempo y bastantes de ellas son mutuamente excluyentes. Por ejemplo, sólo se activa una función de ALU a la
vez. Según el esquema de bus único, no se pueden dar dos señales out en una misma Instrucción y sólo
puede activarse una función de memoria a la vez, READ o WRITE.

Podemos agrupar las señales mutuamente excluyentes en grupos donde en lugar de haber in bit por
señal, hay un código o patrón binario indica qué señal se activa en un momento dado. Obviamente, es
necesario designar una combinación neutra que implique no activar ninguna señal del grupo (excepto para
las funciones de la ALU). Por ejemplo, para las 16 funciones de la ALU, sólo son necesarios 4 bits (ahorro de
12 bits) de código. Todas las señales de salida al bus son excluyentes y pueden formar un solo grupo, donde
el código 0 signifique que no hay salida al bus en ese paso de control. Así sucesivamente, se pueden agrupar
las señales según sea posible. El ejemplo a continuación nos muestra el agrupamiento parcial de señales de
control en campos (Fi) en función de algunos de los ejemplos anteriores. Note que aquí se consideran sólo
cuatro GPR en lugar de ocho. Los GPR pueden organizarse en un Banco o archivo de Registros (BR) con lo
cual, solo se requerirían 3 bits de selección (R0 ... R7) de registros y 2 señales de control BRin, BRout para su
manipulación.

F1 F2 F3 F4 F5 F6
...
(4 bits) (3 bits) (2 bits) (2 bits) (4 bits) (2 bits)
000:
0000:Nada 00: Nada 00: Nada 0000: Add 00: Nada
Nada
0001: PCout 001: PCin 01: MARin 01: Yin 0001: Sub 01: READ
0010: MDRout 010: IRin 10: MDRin 10: SOURCEin 0010: Div 10: WRITE
0011: Zout 011: Zin 11: TEMPin 11: DESTINEin 0011: Mult
0100: R0out 100: R0in 0100: And
0101: R1out 101: R1in 0101: Or
0110: R2out 110: R2in 0110: Xor
0111: R3out 111: R3in 0111: …
1000: SOURCEout 1000: …
1001: DESTINEout 1001: …
1010: TMPout 1010: …
1011: IR(V)out 1011: …

F7 F8 F9 F10
… …
(1 bit) (1 bit) (1 bit) (1 bit)
0: Nada 0: C = 0 0: Nada 0: Continue
1: Clear Y 1: C = 1 1: WMFC 1: End

Página 66 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

También se podría llegar a un máximo nivel de codificación, agrupando todas las señales en un solo
grupo, y codificando todas las posibles combinaciones. En teoría, tal arreglo daría menos líneas necesarias para
la Cw, por lo cual a tal arreglo se le denomina organización vertical de microinstrucciones, por otro lado,
cuando deparamos un bit por señal de control tenemos una organización horizontal. El ejemplo anterior, con
agrupaciones parciales se denomina organización híbrida o mixta. A mayor grado de agrupamiento, el
hardware de decodificación se hace más complejo. Una buena técnica de diseño consiste en comenzar con
una organización horizontal e iterar la creación de agrupamientos hasta obtener la mejor relación entre
tamaño de la Cw, complejidad del hardware y desempeño.

5.6 MICROPROGRAMA Y MICRORRAMIFICACIONES

Los diseñadores de máquinas CISC aprecian mucho la técnica de microprogramación porque puede
permitir que una misma instrucción emplee varios modos de direccionamiento dando flexibilidad en el manejo
de los operandos, lo cual es difícil de hacer en RISC dado que se desea mantener lo más simple y rápida posible
a la CU, empleando control fijo. A mayor cantidad de modos de direccionamiento, mayor cantidad de
microprogramas para la misma instrucción, veamos el ejemplo la instrucción ADD de nuestro modelo de
procesador sencillo, en el formato “R” que se muestra en la figura 5.19 puede tener para ambos operandos
modo directo e indirecto de registro, directo e indirecto de índice, directo e indirecto de autoincremento y
autodecremento; dando por resultado ocho modos en cada operando y por consiguiente 64 microprogramas
sólo para esa instrucción, con lo cual el número de microrrutinas a almacenar vuelve a ser otra vez enorme.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

CO MD1 R1 MD2 R2
Figura 5.19 Formato R del procesador X

Notemos, sin embargo, que mucho del código de estos microprogramas sería redundante. Por
ejemplo, la fase fetch es idéntica en todas las instrucciones y podría implementarse como un
microprograma aparte iniciando en la dirección 0 de la memoria de control. Las instrucciones comenzarían
en la traída del primer operando. Aprovechando las microrramificaciones, podríamos hacer un único
programa para todas las instrucciones que comparten código común y agregar las micro ramificaciones
que permitan seleccionar el camino correcto en cada caso, por ejemplo el ADD mencionado podría tener
un camino para cada modo y luego unirse en un tronco común. Podemos valernos de un diagrama de flujo
de datos para apreciar de forma clara la estructura del microprograma con micro ramificaciones para cada
modo, como se muestra en la figura 5.20 para nuestro ejemplo. Cada rectángulo equivale a una
microinstrucción de acciones de control y cada intersección a una microinstrucción de micro ramificación.
A veces es requerido que una microinstrucción de acciones de control también pueda modificar el PC, lo
cual es permitido. Todas las microinstrucciones se rotulan con su dirección en la memoria de control (sobre
la esquina superior derecha). El ejemplo de la figura 5.20 emplea direcciones octales y un PC de 12 bits.

Docente: Ing. José Díaz Chow Página 67


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

START

000

MAR <- [PC]; READ;


Z <- [PC] + 1

001

PC <- [Z]

002

PLA, IR <- [MDR]


PC, AR <-[PLA]

 003
161 141 121 111

MAR <- [PC]; READ; MAR <- [Rsrc];READ;


Z <- [Rsrc] - 1 MAR <- [Rsrc]; READ
Z <- [PC]+1 Z <-[Rsrc] + 1

162 142 122

MAR, Rsrc <- [Z];


PC <- [Z] Rsrc <- [Z]
READ

163

Y <- [MDR]

164

Z <- [Y] + [Rsrc]

165

MAR <- [Z]; READ

166

MAR <- [MDR]; READ

167 101

SOURCE <- [MDR] SOURCE <- [Rsrc]

170
200

261 241 221 211

MAR <- [PC]; READ; MAR <- [Rdst];READ;


Z <- [Rdst] - 1 MAR <- [Rdst]; READ
Z <- [PC]+1 Z <-[Rdst] + 1

262 242 222

MAR, Rdst <- [Z];


PC <- [Z] Rdst <- [Z]
READ

263

Y <- [MDR]

264

Z <- [Y] + [Rdst]

265

MAR <- [Z]; READ

266

MAR <- [MDR]; READ

267 201

Y <- [MDR] Y <- [Rdst]

 270

Z <- [Y] + [SOURCE]

271
272 273

MDR <- [Z]; WRITE Rdst <- [Z]

STOP

Figura 5.20 Diagrama de flujo de la Instrucción ADD

Página 68 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Haciendo un recuento del tipo de micro ramificaciones tenemos:

1. Ramificaciones de dirección amplia ( Selección de dirección inicial)


2. Ramificaciones de asignación de PC ( Modifican el PC: PC  nn)
3. Ramificaciones de modificación de bits del PC (PCi  [0|1] )
4. Ramificaciones mixtas ( Mezclan el comportamiento de varios tipos anteriores)

En base al DFD de la instrucción ADD, que define el microprograma genérico para la misma, podemos
simular la ejecución de la instrucción ADD (R7)+, R3. El microprograma se representa de manera similar a los
pasos de control, representando en lugar de pasos, la dirección de la microinstrucción ejecutada como se
muestra en el ejemplo. La figura 5.21 muestra el contenido del IR para esta instrucción. Note que las
interrupciones de las líneas del DFD son activaciones de la señal WMFC.

CONTENIDO DEL IR
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 1 1 0 0 1 0 1 1 1 0 0 0 0 1 1
CO MD1 R1 MD2 R2
Figura 5.21 Codificación de Instrucción ADD (R7)+, R3

Dirección MicroInstrucción
(octal)
000 PCout, MARin, READ, Clear Y, Set C, ADD, Zin
001 Zout, PCin, WMFC
002 MDRout, IRin
003 Br {PC[PLA]; PC 101, PC5,4 [IR11,10], PC3  [IR11].[IR10]. [IR9]}
121 [IR3]}121[IR
R7out , MARin11, ].[IR
READ,10].[IR9]} Y, Set C, ADD, Zin
Clear
122 Zout, R7in
123 Br {PC  166; PC0  [ IR9 ]}, WMFC
166 MDRout, MARin READ, WMFC
167 MDRout, SOURCEin
170 Br {PC  201, PC5,4 [IR5,4], PC3  [IR5] . [IR4] . [IR3]}
201 R3out, Yin
202 Br {PC  270}
270 SOURCEout, ADD, Zin
271 Br {PC  272; PC0  [IR5] . [IR4] . [IR3]}
273 Zout, R3in, End.

Es interesante notar las modificaciones al PC vía los bits del IR para la selección del camino
correcto según el modo. Como el lector podrá notar, la traída del primer operando está en secciones de la
memoria de control con direcciones que inician con 1 y los del segundo en direcciones que inician con 2. El
modo de registro directo está en un camino definido por el segundo dígito de la dirección en 0 y el indirecto
en 1. El modo de autoincremento está en 2 y el auto decremento en 4. El modo de índice está en la línea del

Docente: Ing. José Díaz Chow Página 69


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

segundo dígito en 6. Es interesante que precisamente estos son los códigos del modo de direccionamiento
del procesador. El bit menos significativo de los tres que conforman el campo de MD es el bit de indirección,
si está en 1 el modo es indirecto.

En instrucciones complejas como BRN, la modificación de bits del PC se hace también en función de las
banderas y códigos de condición, como N.

La traída de las microinstrucciones desde la memoria de control puede ralentizar mucho el


desempeño, por lo cual la memoria de control debe ser lo más rápida posible. En algunos procesadores se
acelera este proceso haciendo traída previa de una o varias microinstrucciones y guardándolas en una cola. El
problema con esto son las micro ramificaciones, por lo cual habría necesidad de agregar circuitería extra para
verificar si la instrucción traída es válida.

5.7 APLICACIONES DE LA MICROPROGRAMACION

La microprogramación es una técnica muy poderosa de diseño de la CU porque permite a


programadores de sistema y a los fabricantes modificar el conjunto de instrucciones del CPU sin tener que
hacer cambios de hardware. Veamos unos ejemplos:

 El fabricante podría fácilmente, agrandar el repertorio de instrucciones con solo agrandar la


memoria de control, copiar en ella los nuevos microprogramas y actualizar la tabla de
decodificación de dirección base de microprogramas.

 La modificación de una instrucción podría realizarse fácilmente desde software si la memoria de


control fuera una EEPROM o una RAM con energía permanente. Estas modificaciones podrían
hacerlas tanto el fabricante como el programador del sistema.

 Otra utilidad sería, permitir a una aplicación escribir en algún área especial de la RAM de control
un nuevo conjunto de instrucciones de forma temporal para Emular otra máquina completa, de
esta forma nuestra computadora X podría ejecutar software de cualquier otra computadora Y si
pudiéramos reproducir sus instrucciones en microcódigo. La aplicación de emulación sólo
necesitaría poder definir cómo el generador de direcciones iniciales acceder a este nuevo conjunto
de instrucciones.

Página 70 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6. EL SISTEMA DE MEMORIA

6.1 La Función de Almacenamiento


La función de almacenamiento en la computadora la desempeñan todos los dispositivos que
retienen datos para su procesamiento. Históricamente se ha considerado como la función de mantener las
instrucciones y los datos disponibles al procesador durante la ejecución, por tanto solo el Sistema de
Memoria se reconocía como la estructura organizacional de la computadora que cumple esta función,
aunque haya otros elementos de memoria en otras partes de la computadora (como los registros del CPU).

En las arquitecturas modernas, se ha evidenciado que esta función de almacenamiento no solo implica el
mantener datos y programas durante la ejecución sino que también es necesario almacenarlos masivamente
en un soporte de forma permanente para evitar los inconvenientes de tener que cargarlos cada vez desde el
exterior. Esta función, que se identifica como secundaria, requiere de dispositivos de gran capacidad por
cuanto la cantidad de datos y programas que pueden requerir ser almacenados puede ser bastante alta. De
los dispositivos que se emplean para tales fines se dice que son “de almacenamiento secundario”.

La interacción del procesador con los dispositivos de memoria se implementa mediante dos operaciones:
Lectura y Escritura. La operación de lectura permite recuperar el valor almacenado en una localidad
específica del dispositivo y la operación de escritura permite establecer un nuevo valor en una localidad
determinada.

El desempeño o rendimiento de los dispositivos de almacenamiento se puede caracterizar mediante dos


medidas: La Capacidad y el Tiempo. De estos derivan indicadores de desempeño como tiempo de acceso,
tiempo de ciclo, velocidad de acceso y velocidad de transferencia.

La capacidad es la cantidad de datos o instrucciones que es capaz de mantener simultáneamente el


dispositivo. Hoy día la capacidad se mide en bytes (octetos de bits) y sus múltiplos: KiloByte (KB) que se
compone de 210 bytes, MegaByte (MB) que equivale a 220 bytes, GigaByte (GB) que son 230 bytes y TeraByte
(TB) que corresponde a 240 bytes.

El tiempo de acceso mide el tiempo transcurrido desde que se activa una operación de lectura de memoria
hasta que se obtiene el resultado. La velocidad de acceso es una medida proporcionalmente inversa al
tiempo de acceso y se mide en bytes por segundo. El tiempo de ciclo, aunque muy relacionado al tiempo de
acceso, está más ligado a la arquitectura global del sistema al caracterizar la cantidad de ciclos de reloj que se
requieren para completar un ciclo de máquina de lectura o escritura en memoria. Esto es de gran
importancia al calcular el tiempo de ejecución de una instrucción, por ejemplo.

Por su parte, la velocidad de transferencia considera además otros aspectos como la frecuencia, ancho y
modo de operación del bus del sistema. Se mide en bytes por segundo.

En la evolución del sistema de memoria se ha identificado los grandes beneficios que puede proveer la
jerarquía de memoria, que es una forma de organización de memoria que nos permite reducir la brecha de
velocidad entre los diferentes dispositivos logrando que el sistema de memoria sea más eficiente y veloz. En
esta unidad, pondremos especial interés en la jerarquía de memoria.

Docente: Ing. José Díaz Chow Página 71


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Si observamos bien el sistema de memoria y la función de sus diferentes dispositivos, podremos verificar que
de manera natural, existen diferentes niveles de función de memoria de acuerdo a su cercanía con el CPU. Si
recordamos que la función de almacenamiento se concibe principalmente, como la retención de los datos
requeridos para la ejecución, podemos identificar que dentro del CPU, los registros tanto de trabajo (IP, PC,
etc.) como de propósito general, cumplen esta función, lo cual podríamos considerar como nivel interno al
CPU o nivel cero (L0). Continuando nuestra identificación, nos encontramos con la memoria principal, que es
quien cumple la función a cabalidad, a la que notaremos como nivel 1 (L1). Finalmente, los dispositivos de
almacenamiento secundario, como el disco duro, los podemos considerar de nivel 2, pues es de donde
cargamos los datos y programas a memoria para la ejecución. Si observamos mejor, veremos que cada nivel
más bajo se aleja del CPU. A medida que bajamos en la jerarquía se reduce la velocidad pero se incrementa la
capacidad.

Se ha demostrado que el desempeño del sistema de memoria, se mejora mucho al integrar memorias
intermedias (nuevos niveles en la jerarquía) entre CPU y memoria principal, denominadas caches. Estas
memorias caches son más rápidas que la memoria principal, reduciendo así el tiempo de espera del CPU por
los datos o instrucciones durante la ejecución. Para que los sistemas con cache sean efectivos, es necesario
que en ellas se mantengas los datos e instrucciones mas usadas.

6.2 Caracterización de la Memoria.


Existen una serie de criterios que se pueden emplear para caracterizar, categorizar y clasificar la
memoria, puesto que en la definición, diseño y construcción de los diferentes dispositivos que cumplen la
función de almacenamiento, se aplican diferentes conceptos que diferencian a los mismos. Estos son muy
diversos y van desde el nivel de la función hasta la tecnología de fabricación.

Es de suma importancia manejar dichos conceptos a fin de poder definir y categorizar con propiedad cada
dispositivo de memoria. A continuación abordaremos los más relevantes:

 Por el nivel de la función:


 Memoria interna (al CPU)
 Memoria intermedia o Cache
 Memoria Primaria o Principal
 Memoria Secundaria

 Por la tecnología de construcción:


 Semiconductora
 Estática: Esta memoria mantiene el valor mientras no se cambie el estado y tenga energía. Se
fabrica básicamente con Flip-Flops de tecnología Bipolar por lo cual son rápidas pero bastante
caras. En la actualidad se han empleado algunas familias MOS con bastante éxito.
 Dinámica: Esta memoria se basa en el principio de inercia de las capacidades (condensadores) a
los cambios de tensión. Básicamente, retiene el valor escrito en ellas por un tiempo específico y
por tanto requiere refrescamiento periódico. Se fabrica principalmente en tecnología MOS que
permite gran densidad de integración, y por eso pueden ser de mayor capacidad y bastante más
baratas que la memoria estática. Sin embrago, la necesidad de refrescamiento y su modo de
operación las hace más lentas que las estáticas.
 Magnética
Página 72 Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 Óptica,
 Magneto-Óptica (MO)

 Por la capacidad de retención del dato:


 Memoria Volátil
 Memoria totalmente volátil: Retiene los datos mientras exista suministro de energía eléctrica.
 Memoria Volátil con respaldo de energía: Es una memoria volátil que cuenta con una batería de
respaldo que le suministra energía cuando se interrumpe la energía principal.
 Memoria Permanente: Dispositivos con soporte de los datos a muy largo plazo. Los datos no se pierden
cuando se suspende la alimentación.

 Por la operación soportada


 Memoria de lectura y escritura o RW: Admite lectura y escritura.
 Memoria de solo lectura o ROM: Solo admite lectura.

En este punto es importante mencionar los diferentes tipos históricos de ROM que fueron
evolucionando hacia formas de RW:

 ROM: El contenido de la memoria grabado por fábrica


 PROM: Memoria que se podía programar mediante un dispositivo.
 EPROM: Esta memoria se podía borrar con luz ultravioleta y volver a programar.
 EEPROM: Memoria que se podía borrar eléctricamente y volver a programar.
 FLASH: Memoria que se diseño como alternativa a EEPROM. Permite borrado selectivo.
Hoy día este tipo de dispositivo es prácticamente RW

 Método de acceso: cómo acceden los contenidos de la memoria:


 Memoria de Acceso aleatorio (RAM: Random Access Memory): Cada posición direccionable de
memoria tiene un único mecanismo de acceso, cableado físicamente. Cualquier posición puede
seleccionarse aleatoriamente y el tiempo de acceso es el mismo. Ejemplo: memorias
semiconductoras.
 Acceso secuencial: El acceso se realiza leyendo en secuencia todos los datos hasta que se encuentra el
elemento deseado. El tiempo de acceso es función de la posición del elemento accedido. Ejemplo:
unidades de cinta.
 Acceso semisecuencial: Aplica a los dispositivos cuyo soporte posee geometría circular. El acceso se
lleva a cabo mediante la realización de una combinación de movimientos en un “área” de la memoria
general (tiempo de latencia), seguido de un acceso secuencial hasta alcanzar la posición deseada
(tiempo de búsqueda). Ejemplo: unidades de disco.

 Modo de direccionamiento
 Memoria direccionable por posición: Memorias cuyas operaciones determinan la localidad específica
a afectar mediante una dirección de memoria que corresponde a la posición de la localidad.

 Memoria asociativa o direccionable por contenido: Memorias cuyas operaciones determinan la


localidad específica a afectar mediante comparación del contenido de la localidad con una clave de
búsqueda. Estas memorias implementan la búsqueda de forma paralela en todas las celdas.

Docente: Ing. José Díaz Chow Página 73


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Existen otros criterios que no consideramos como clasificadores pero que pueden ser muy importantes en
materia de organización. Uno de ellos es el Costo. El costo se emplea para decidir el mejor conjunto de
características, como la filosofía de construcción, a elegir a un costo permisible. El indicador más usado es el
de coste por bit.

Otros criterios son el tamaño. El tamaño tiene varias implicaciones tanto en desempeño como coste.
Normalmente memorias más grandes requerirán mayor red de decodificadores, requiriendo mayor tiempo
de acceso. Además de la capacidad de la memoria, tenemos otros indicadores para caracterizar una memoria
como la unidad de acceso, unidad de transferencia y la relación de ésta con la palabra del procesador.

La unidad de acceso, direccionabilidad o resolución indica el conjunto mínimo de bits que puede accederse
como un todo. En las primeras máquinas, donde se construía la memoria a la medida del CPU, la unidad de
acceso coincidía con la palabra del CPU. En las computadoras modernas, en cambio, se ha definido una
unidad de acceso estándar (el Byte) que permite mayor flexibilidad en el diseño y construcción tanto de
memorias como de CPUs. Obviamente esto impone una restricción al arquitecto de CPU: la palabra del
procesador debe ser múltiplo del byte. Recordemos las consideraciones que tuvimos que hacer al respecto
en la unidad 2, para el diseño del formato de instrucciones.

La unidad de transferencia, indica la cantidad de bytes que se pueden transferir de una vez desde la memoria
al CPU. Puede ser tan pequeña como la unidad de acceso o tan grande como el ancho del bus de datos, todo
depende del diseño que haya realizado el arquitecto sobre la base del compromiso desempeño-flexibilidad-
coste. Obviamente una mayor unidad de transferencia permite mayor velocidad de transferencia.

La unidad de transferencia es un atributo de arquitectura que debe ser considerada seriamente por los
programadores y constructores de ensambladores a fin de garantizar una alineación correcta de las
instrucciones y los datos en la memoria para evitar que una instrucción tenga que consumir más ciclos de
lectura en memoria de los estrictamente requeridos. Por ejemplo, suponga que el formato de instrucciones
es variable en 2 y 4 bytes y que la unidad de transferencia es de 4 bytes. Si tenemos instrucciones contiguas
de 2 y 4 bytes, existe la posibilidad que alguna instrucción de 4 bytes no se transfiere en un mismo ciclo de
máquina retardando su inicio de ejecución y el desempeño global del sistema. Para evitar este
inconveniente, algunas arquitecturas consideran en su ensamblador la directiva Alineación (Alignment o
implemente ALIGN) para definir en qué multiplicidad se almacenan los datos y programas en la memoria.
Esto aplica no solo a los datos e instrucciones sino a bloques de memoria también.

Página 74 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6.3 Organización de la Memoria Principal.


La memoria principal se implementa en base a dispositivos de memoria semiconductora organizados
en circuitos integrados o chips. Cada chip de memoria contiene un número determinado de celdas de 1 bit.
Las celdas se organizan lógicamente en una matriz bidimensional de r filas x c columnas. El acceso externo a
tales celdas puede estar estructurado en acceso a una celda de 1 bit (Chips con organización C x 1, por
ejemplo 1K x 1 bits) o a conjuntos de celdas de c bits por cada localización (Chips con organización C x c, por
ejemplo 1K x 4 bits).

La unidad básica de memoria es, por tanto, el bit. Para fines prácticos se define la unidad de acceso a
memoria o resolución de memoria. Casi todas las computadoras modernas usan como unidad de acceso el
byte, es decir, son direccionables por byte. Muchos buses de datos son más anchos que la unidad de acceso
(byte) y por tanto permiten la transferencia de más de una localidad a la vez, por lo cual la unidad de
transferencia puede ser de más de un byte.

Internamente los chips de memoria cuentan con una colección de celdas de 1 bit que se organiza en una
matriz de r filas x c columnas. Para poder realizar una operación con las celdas, necesitamos activarlas, para
lo cual se requiere una lógica de selección de filas y columnas que seleccionen todas las celdas que
componen la localidad referida en la dirección.

La interconexión de varios chips de memoria permite obtener una memoria total organizada en celdas de 1
byte o más. Para reducir la cantidad de terminales del chip, las líneas de dirección pueden estar
multiplexadas con datos. Mediante la interconexión controlada de chips de memoria se puede implementar
también bancos de memoria que permite realizar múltiples operaciones de memoria en simultáneo,
incrementando el desempeño del sistema de memoria.

Además de las líneas de dirección, la memoria debe tener acceso a las líneas de control para realizar la
transferencia de datos.

Son necesarias también algunas líneas de control de transferencia y operaciones de la memoria:

 W*: Escritura habilitada. Acepta cambios en las celdas direccionadas.


 OE*: Salida activada. Permite al exterior acceder al resultado de la lectura.
 CS*: Selección de chip. Si está habilitado (en bajo), permite la operación del chip, caso contrario, el
chip queda desactivado.
 RAS*: Selección de dirección de filas
 CAS*: Selección de dirección de columnas.

A continuación se muestra la organización interna de un chip de memoria dinámica de 4M x 4 bits. Nótese la


presencia de componentes para el control de refrescamiento.

Docente: Ing. José Díaz Chow Página 75


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Temporización y
control

Contador
de
refresco

Deco-
Buffer de difica-
direccione dor Matriz
s de filas de de celdas de
filas memoria

Buffer
Buffer de de entrada
direccione Amplificadores de datos
s de de lectura
columnas y puerto de E/S Buffer
de salida
Descodificador de datos
de columnas

Normalmente, el CPU requiere de un dispositivo auxiliar que le apoye en la gestión del acceso a memoria.
Este dispositivo se denomina controlador de memoria y facilita la estandarización del diseño del sistema de
memoria.

6.4 Jerarquía de Memoria.


Los principales objetivos en el diseño de cualquier sistema de memoria son:

 Ofrecer la capacidad de almacenamiento adecuada.


 Proporcionar un nivel de prestaciones aceptable.
 El coste debe ser razonable.

El diseño tradicional del sistema de memoria, establece límites físicos y tecnológicos que dificultan la
consecución de tales objetivos. Hoy día, prácticamente todos los sistemas operativos son multitareas y
multiusuario, evidenciándose en su operación la necesidad de más y más capacidad de memoria.

Gracias a la gran capacidad de miniaturización de las memorias dinámicas ha sido posible ir incrementando
esta capacidad a un coste bastante razonable, sin embargo, al incrementar el tamaño de la memoria, el
tiempo de respuesta se ha incrementado, reduciendo el nivel de prestaciones. Lo ideal sería poder emplear
la mayor cantidad de memoria estática posible en el sistema, sin embargo ésta es muy costosa.

Adicionalmente, los estudios de ejecución de los programas han revelado que en la mayoría de los
programas la ejecución se centra el un 10% del código el 90% del tiempo. Esto se debe al principio de

Página 76 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

localidad de referencia en gran parte, que depende de la forma en la cual se escriben los programas y se
almacenan éstos y los datos en la memoria.

Si se clasifican los diferentes dispositivos de memoria en una computadora, y se les ordena de acuerdo a su
velocidad, podremos observar que se establece una jerarquía entre ellos, en la cual la velocidad de acceso
aumenta a medida que subimos en la jerarquía pero la capacidad disminuye. Por ejemplo, en el más alto
nivel se encuentran los registros del CPU que son los más rápidos pero tienen muy limitada capacidad de
almacenamiento, pasamos por la memoria principal que tiene gran capacidad pero un tiempo de acceso
mucho mayor. Finalmente, los dispositivos de memoria secundaria almacenan muchísima más cantidad de
información pero su velocidad de acceso es muy limitada. A tal ordenamiento de los diferentes dispositivos
de memoria se denomina jerarquía de memoria. La jerarquía de memoria y sus propiedades han sido
decisivas en la mejora del rendimiento de los sistemas de memoria.

Dadas las brechas de ancho de banda entre los diferentes niveles, no conviene que un dispositivo de un nivel
muy alto acceda directamente uno de un nivel bastante más bajo. El mejor desempeño se obtiene si se
limitan las transferencias entre dispositivos de niveles adyacentes.

6.4.1 Bases de la jerarquía de memoria

 Registros internos a la CPU para obtener un almacenamiento temporal de datos (cuantitativamente


pequeños, pero muy rápidos).
 Almacenamiento externo de datos y programas (relativamente extenso y rápido).
 Almacenamiento permanente externo (mucho más amplio, pero más lento).

6.4.2 Características de la jerarquía de memoria

 Consiste en distintos “niveles” de los componentes de memoria.


 Cada nivel está caracterizado por su capacidad, tiempo de acceso y coste por bit.
 Según se vaya ascendiendo por los niveles de la jerarquía, se encontrarán módulos de mayor
capacidad, un tiempo de acceso más lento y menor coste por bit.

Un gran avance en la construcción del sistema de memoria consistió en la introducción de las memorias
intermedias o cachés. Una Caché es una memoria pequeña muy rápida que provee los datos y las
instrucciones más usadas. Regularmente las cachés tienen una ganancia de 10 a 1 sobre la memoria principal
en materia de velocidad de acceso.

6.5 Sistema de Memoria con Caché


Un sistema de memoria con caché tiene un desempeño mejorado debido a las altas tasas de eficiencia de la
memoria cachés. Las cachés como dispositivo de almacenamiento intermedio, están destinadas a almacenar
las instrucciones y los datos más usados durante la ejecución.

Si la velocidad de acceso de la caché es 10 veces mayor que la de la memoria principal, entonces, se tendrá
esta ganancia en el sistema siempre que el datos o la instrucción buscada se encuentre en caché. La figura
muestra la configuración de un sistema con caché donde el CPU accede a caché a nivel de palabra. Entre
caché y memoria se realizan transferencia s nivel de bloques, a fin de mejorar la eficiencia.

Docente: Ing. José Díaz Chow Página 77


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Gracias al principio de localidad de referencia, que caracteriza la forma en que se escriben los programas y la
forma en que se almacenan éstos y los datos en memoria, la caché es efectiva entre un 80% y 95% del
tiempo.

La eficiencia de la jerarquía se incrementa al agregar nuevos niveles siempre que el nivel introducido tenga
mayor velocidad de acceso que el mínimo de los niveles y se cumpla que las transferencias se realicen solo
entre niveles adyacentes.

En los sistemas con cachés que tienen memorias principales muy grandes y caches muy pequeñas, es de vital
importancia definir una función de mapeo o correspondencia de memoria Principal a memoria caché que
permita al procesador acceder una dirección de memoria en la caché si esta está residiendo allí.

6.5.1 Interconexión caché - memoria principal

A fin de establecer una interconexión entre caché y memoria principal, se define una unidad común de
correspondencia que denominamos bloque. El bloque es un conjunto de K localidades consecutivas de
memoria principal. Cada bloque en memoria principal debe corresponder a un bloque de K localidades
consecutivas en memoria caché.

El bloque transferido desde la memoria principal se almacena en la caché como una sola unidad llamada
ranura, línea, bloque o página. Una vez copiado en la caché, el CPU puede tener acceso a palabras
individuales dentro de un bloque. Cada línea de datos o bloque de la caché debe ser etiquetada de algún
modo para identificar qué bloque de memoria principal es. La línea de datos y su etiqueta se almacenan en la
caché.

Si existen 2m palabras en la memoria principal, entonces habrá Bm = 2m/K bloques en la memoria principal.
De igual manera, si existen 2c palabras en la memoria caché, entonces habrá Bc =2c/K bloques en la memoria
caché. Siempre la memoria principal es mucho mayor en tamaño que la caché, por tanto a cada bloque de
caché pueden corresponder muchos bloques de memoria principal. Al mecanismo u algoritmo que permite
definir en qué bloque de caché se alojará un determinado bloque de memoria principal se le conoce como
función de correspondencia o mapeo de caché.

Debido a las velocidades tan altas de la caché, el manejo de la transferencia de datos y el almacenamiento en
ella se realizan en el hardware. El sistema operativo no reconoce la caché. La figura a continuación muestra
una configuración típica de un sistema con caché. El control de lectura o escritura a memoria principal solo se
activa si se da un fallo de caché.

Página 78 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6.5.2 Elementos de diseño de la Caché

 Técnica de mapeo o función de correspondencia entre la memoria principal y la caché.


 Algoritmo de sustitución de línea.
 Política de escritura.
 Tamaño de bloque.
 Cantidad y tipo de caches.

6.5.3 Técnicas de Mapeo

Se han desarrollado tres técnicas de mapeo o funciones de correspondencia de la memoria principal con la
caché:

6.5.3.1 M AP E O DI R EC TO :

- Cada bloque de memoria principal es asignado a una línea específica de caché. La correspondencia se
expresa como:

i = j % Bc

Donde i es el número de bloque de caché asignado al bloque j de memoria principal y % es el


operador de módulo.

- Por ejemplo, si los bloques de memoria son 64 y van del 0 al 63 y los de caché son sólo 4 y van de 0 a
3, entonces :

La línea de caché 0 tiene asignados los bloques de memoria principal 0, 4, 8, 12,...


La línea 1 tiene asignados los bloques 1, 5, 9, 13,...
La línea 2 tiene asignados los bloques 2, 6, 10, 14,...
La línea 3 tiene asignados los bloques 3, 7, 11, 15,...

Docente: Ing. José Díaz Chow Página 79


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

- La caché con correspondencia directa divide una dirección de la memoria principal en tres campos
diferentes:

 Identificador de etiqueta (t).


 Identificador de número de bloque (b).
 Identificador de palabra (w).

- El identificador de palabra determina la palabra específica (o unidad direccionable) en una línea de


caché que va a ser leída.

- El identificador de línea especifica la línea física de la caché que asignará la dirección con referencia.

- La etiqueta se almacena en la caché junto con los datos de la línea:

 Para cada referencia de memoria que realiza la CPU se determina la línea específica que asignará
la referencia (cuando ésta ha sido previamente copiada en la caché).
 Se revisa la etiqueta asignada en dicha línea para comprobar si en la caché está el bloque correcto.

Memoria
Cache principal
Etiqueta Datos
Dirección de memoria
Etiqueta Línea Palabra

Comparación

(Acierto de cache)

(Fallo de cache)

- Ventajas de la correspondencia directa:

 Se implementa fácilmente.
 Bajos costos.
 Es fácil determinar dónde se puede encontrar una referencia de la memoria principal en la caché.

- Desventajas de la correspondencia directa:

 Cada bloque de memoria principal se corresponde a una única línea de caché.

Página 80 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 A través de la localidad de la referencia es posible hacer referencia a bloques que corresponden al


mismo número de línea.
 Estos bloques serán intercambiados dentro y fuera de la caché, provocando que el nivel de aciertos
sea más bajo.

6.5.3.2 C O R R ES PO N D EN CI A AS O C I ATI V A:

- Permite que un bloque sea almacenado en cualquier línea de caché que no está en uso.
- Supera los fallos fundamentales de la correspondencia directa.
- Examina cada línea de la caché para encontrar el bloque de memoria correcto. Se analizan todas las
etiquetas de líneas para encontrar una coincidencia. Para que esto sea eficiente, la caché debe contar
con una memoria asociativa donde almacenar las etiquetas.

- Ventajas:

 Rapidez.
 Flexibilidad.

- Desventajas:

 Coste en la implementación por uso de memorias asociativas

Memoria principal
Etiqueta Datos
Dirección de memoria

Etiqueta Palabra

Comparación

(Acierto de cache)

(Fallo de cache)

Docente: Ing. José Díaz Chow Página 81


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6.5.3.3 C O R R ES PO N D EN CI A D E C O N JU N TO S AS O CI ATI VO S :

- Esta técnica recoge lo mejor de las correspondencias directa y asociativa. La caché se implementa
como una serie de cachés asociativas de c bloques cada una. A cada caché asociativa se le denomina
conjunto asociativo.

- Un bloque de memoria principal se corresponde a un único conjunto asociativo, de tal manera que:

s = j % Sc

Donde s es el número del conjunto asociativo de caché asignado al bloque j de memoria principal, Sc
es la cantidad de conjuntos asociativos de la caché y % es el operador de módulo.

Internamente, cualquier bloque de memoria principal j puede almacenarse en cualquiera de las k


líneas o bloques del conjunto asociativo al cual corresponde según la correspondencia bloque a
conjunto definida anteriormente.

- Si un conjunto puede asignar x líneas, se dice de él que es o tiene correspondencia asociativa de x vías:

 La mayoría de los sistemas caché existentes utilizan conjuntos asociativos de 2, 4 u 8 vías.

Memoria principal
Etiqueta Datos
Dirección de memoria
Etiqueta Conjunto Palabra

Conjunto 0

Comparación Conjunto 1

(Acierto de cache)

(Fallo de cache)

Página 82 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

6.5.4 Algoritmos de sustitución de bloque

Cuando se busca una dirección de memoria principal en la caché y el bloque correspondiente a la


misma no se encuentra en la caché, ocurre un fallo de caché. En este caso, la lectura no puede proceder
hacia el CPU. Se genera una excepción y controlador de memoria debe transferir el bloque correspondiente
de memoria principal a caché.

Si no hay un bloque de caché disponible (vacío) para alojar el nuevo bloque, habrá que sustituir uno de los
que se encuentran en caché por este otro. En caso de mapeo directo no tenemos elección. Con el mapeo
asociativo y el de conjunto asociativo, es necesario decidir cuál de los bloques se sustituirá tratando que sea
aquel con menor probabilidad de ser requerido en el futuro cercano. Para realizar esta decisión de forma
eficiente se han desarrollado diferentes algoritmos de sustitución: LRU, FIFO, utilizado menos
frecuentemente” (LFU) y Aleatorio (uno al azar).

6.5.5 Política de Escritura

Cuando se escribe un dato en caché, la localidad correspondiente queda más actualizada que su imagen en la
memoria principal. A fin de evitar incoherencias, es necesario sincronizar los valores de las palabras que se
han escrito en la caché. Para esto se implementan dos políticas de escritura:

 Escritura directa o write throug: Cada vez que se actualiza una palabra en caché se actualiza el bloque
correspondiente en memoria principal. Esto garantiza siempre la consistencia del mismo pero puede
provocar retrasos en la operación de la caché

 Escritura posterior o write back: Cuando se modifica una palabra en la caché no se actualiza el bloque
en la memoria principal sino hasta que éste tiene que ser removido de la caché. A fin de poder
implementar esta política, se llevan bits de estados en cada bloque. Uno de éstos, denominado dirty
bit indica si se ha escrito en él, de forma que sea necesario actualizarlo en la memoria antes de
sustituirlo.

Docente: Ing. José Díaz Chow Página 83


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7 EL SISTEMA DE ENTRADA-SALIDA

7.1 La función de Transferencia Externa


En las unidades anteriores, hemos estudiado la función de transferencia de datos a lo interno de la
computadora. En esta unidad nos concentraremos en la función de transferencia de datos al exterior. Esta
función básicamente tiene dos sub-funciones: la Entrada que consiste en traer datos desde el exterior hacia
el interior de la computadora y la Salida que va en el sentido contrario. El sistema de entrada/salida es la
estructura de la computadora que tiene a cargo esta función que es de suma importancia, porque una
computadora incapaz de comunicarse con el mundo exterior y más específicamente, con el hombre, es
totalmente inútil. ¿Cómo podría obtener los programas a ejecutar y los datos sobre los cuales trabajar?, y
¿Cómo entregaría los resultados de dichos programas?

Por otro lado, la variedad de dispositivos con que la computadora es capaz de comunicarse, hoy día la hacen
más flexible y potente, como “máquina de propósito general”, sin embargo esto entraña una dificultad para
el diseñador del sistema de Entrada - Salida (E/S o I/O) por la diversidad de tecnologías con la cual lidiar. Por
ejemplo, tenemos dispositivos de entrada salida de tipo electromecánico, electrónico, electromagnético,
óptico, y en general, para adquisición de datos de variados sistemas, tenemos sensores y actuadores de muy
diversa naturaleza.

El crear un sistema integral que permitiera manejar todas estas tecnologías sería imposible e impráctico a la
vez, por cuanto lo que se ha hecho es un sistema general que establece normativas para que los fabricantes
de los diferentes dispositivos creen módulos controladores o interfaces que sean capaces de comunicarse
con el sistema de Entrada/Salida mediante un bus o interfase de entrada/salida. En este capítulo,
estudiaremos los requisitos para este diseño genérico y las diferentes técnicas que hacen a estas interfaces
viables y eficientes.

7.2 Estructura de interconexión de la computadora


Hemos estudiado que las computadoras se componen básicamente de un Procesador, Memoria y
Unidades de E/S. Arquitecturas complejas pueden componerse de varias instancias de cada parte. Un tema
de arquitectura de Computadoras de gran importancia es la forma de interconectarlos. A tal sistema de
enlace se denomina estructura de interconexión.

Las diferentes arquitecturas a través del tiempo han empleado diferentes enfoques para el diseño de la
estructura de interconexión. El más aceptado ha sido el de buses.

Además de los datos que se transfieren entre las diferentes unidades, es necesario especificar alguna
dirección para tales datos así como una serie de señales de control que deben sincronizar el tránsito de los
mismos, habilitación y des-habilitación de componentes del sistema y verificación del estado del procesador,
entre otros. El bus del sistema debe contener todas estas señales.

7.2.1 Interconexión con Buses

Página 84 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Un bus se concibe como un conjunto de líneas conductoras que transportan datos o señales entre las
diferentes partes del computador. Característica clave del bus es que se trata de un medio de transmisión
compartido. Al bus del sistema se conectan varios dispositivos: CPU, módulos de Memoria, diferentes
controladores de E/S, etcétera. Cualquier señal que transmita uno de ellos está disponible para ser
accedida por el resto. Si dos dispositivos escriben en el bus durante el mismo período de reloj, sus señales
pueden solaparse y destruirse, por ende sólo un dispositivo puede transmitir con éxito durante un momento
dado.

Un aspecto importante en el diseño del bus es el tipo de transferencia que se elige. La transferencia serie nos
permite enviar secuencias binarias a través de una sola línea en diferentes períodos de tiempo. Transmitir un
dato de 1 byte tomaría al menos 8 períodos de reloj. Por otro lado, la transferencia paralela requiere de
tantas líneas como bits de datos o señales se necesiten transmitir. Para el caso anterior, se requieren 8
diferentes líneas y la transmisión tarda un solo período. En un computador se requiere la máxima velocidad
de transmisión entre los diferentes componentes por lo cual el bus el sistema emplea transferencia paralela.
EL bus del sistema se constituye usualmente por un conjunto de entre 50 y 150 líneas. Aunque existe gran
diversidad en los diseños, la mayoría divide el bus en tres buses funcionales: bus de datos que consta de las
líneas que transfieren los datos, bus de direcciones, empleado para seleccionar el dato en la memoria y bus
de control se conforma por el conjunto de señales de control externas al procesador. Además, suele añadirse
las líneas de alimentación eléctrica. La Figura 1 muestra esquemáticamente estas líneas de interconexión.

Bus de Direcciones

Líneas de Control

CPU Memoria Entrada/


Salida

Bus de Datos

Figura 1. Arquitectura de buses


Figura 7.2.1. Arquitectura de Buses de la Computadora
La anchura del bus de
datos define cuántas palabras de memoria pueden transferirse de una vez.

Algunas líneas de control importantes son: WRITE, READ, IOW, IOR, Transfer ACK (en el bus), Bus Request,
Bus Grant, Interrupt Request, Interrupt ACK, CLCK y RESET.

Como el bus es un recurso compartido, llega a ser cuello de botella en el desempeño del sistema por lo cual,
se han adoptado arquitecturas con jerarquía de buses múltiples. Las microcomputadoras PC AT compatibles
hoy día tienen diversos buses que se muestran en la Figura 2.

Docente: Ing. José Díaz Chow Página 85


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

CPU +
Cache L2
Cache L1

"Bus" AGP Controladores del sistema


Controlador (Chipset) Bus del Sistema Memoria
de vídeo Controlador de Memoria y Principal
Puente PCI

Bus PCI

Dispositivos IDE SCSI LAN Slot

CD DD Controlador IDE
Controlador de DMA USB
DD DD Puente PCI a ISA

Bus ISA

LPT Disquete
Slot Slot
Super
Com 1 Teclado
I/O
Com 2 Ratón PS/2

Figura 2. Jerarquía de buses de E/S de la PC moderna

7.2.2 Diseño del bus

 Tipos de líneas: Existen dos tipos de líneas de bus: dedicadas y multiplexadas. En el primero, cada conjunto
de líneas tiene una función específica, por ejemplo D0 – D31: líneas de datos correspondientes a los bits
0 al 31. En el segundo, un mismo conjunto de líneas puede emplearse para diferente fin, únicamente debe
definirse la naturaleza de la información en el bus en ese momento mediante líneas de control de
selección. Por ejemplo, en un período del bus puede ponerse la dirección de los datos y cuando tal
dirección se ha reconocido, la memoria activa una línea de control de asentimiento. Entonces puede
ponerse los datos en el bus. Esta es una forma de multiplexación por división de tiempo.

 Modo de arbitraje: Puede haber un controlador del bus encargado del arbitraje y control del mismo o bien
un algoritmo de asignación del bus. Un caso interesante es el bus cycle stealing en DMA.

 Temporización: El bus puede ser síncrono o asíncrono. En el primero se cuenta con un reloj que sincroniza
todas las actividades del bus y todos los módulos conectados al mismo deben supeditarse a él. Esto suele
mermar el rendimiento de módulos de alta velocidad con buses de baja velocidad. El segundo enfoque
requiere de señales de reconocimiento de inicio y finalización de eventos.

 Anchura: Tamaño del bus y Velocidad de transferencia máxima.

 Tipos de transferencias de datos: Puede ser para lectura, escritura, cualquiera de ellas por bloque y
diferentes combinaciones de las mismas. Esto no tiene gran importancia en buses dedicados pero sí en
buses multiplexados, donde cierto tipo de transferencias puede mejorar el desempeño del bus o limitarlo.

Página 86 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7.2.3 Buses Estándares

Cada fabricante solía diseñar su propio bus para cada arquitectura. De hecho, algunos fabricantes
implementaban buses específicos para cada máquina diferente que diseñaban. Hoy día se ha avanzado
mucho en el establecimiento y especificación de estándares de la Industria, lo cual ha traído consigo
grandes beneficios: compatibilidad, arquitecturas abiertas, intercambiabilidad de dispositivos, facilidad de
actualización, etc.

La familia PDP y la VAX empleaban el UNIBUS para E/S. Este es un bus no estándar de 72 líneas.
Muchos buses especializados como interfaces de E/S han llegado a reconocerse como estándares de la
industria. La IEEE es uno de los organizamos de estandarización más reconocidos en el campo de la
Computación. El Multibus desarrollado para el MDS de Intel es hoy un bus existente en casi todas las
minicomputadoras modernas. Este es un bus multiplexado asíncrono de 86 líneas, reconocido por la IEEE
como el estándar 796.

IBM diseñó un bus muy sencillo, no estándar, para su IBM PC original. Para el lanzamiento de la XT,
adoptó el bus estándar de la industria ISA. Este es un bus de 8 bits de datos que logra frecuencias de reloj de
hasta 8MHz. En la AT se empleó una versión mejorada del ISA de 16 bits que lograba frecuencias de hasta
10MHz. Con la introducción del Personal System (PS), IBM trató de frenar a los fabricantes de Compatibles
introduciendo un bus propietario patentado de altas prestaciones de 32 bits con configuración por programa
denominado microcanal. Esta decisión de IBM, lejos de beneficiarla, la perjudicó puesto que la competencia
se organizó y diseñaron un bus estándar, compatible con el ISA, de 32 bits que también era configurable por
programa. A este bus se le denominó EISA. Las limitaciones del ISA y la complejidad de configuración del
EISA, así como el surgimiento de nuevas especificaciones de la industria como PNP trajeron consigo al PCI.

PCI (Periferal Interconnect Interface) es un bus que tiene varias versiones. Su surgimiento ha sido clave en la
mejora de prestaciones del sistema de E/S de las computadoras modernas. La especificación PC97
recomienda su uso exclusivo (sobre los buses descontinuados ISA, EISA y MC) para periféricos.

7.2.3.1 B U S I S A:

Este es el bus que usan los IBM PC y Compatibles. Soporta tanto tarjetas para XT como AT. Se le hizo una
extensión llamada EISA que soporta PNP. La frecuencia del bus varía desde 4.7 MHz hasta los 8MHz
típicamente, aunque algunas implementaciones modernas logran confiablemente frecuencias de hasta
12MHz.

Docente: Ing. José Díaz Chow Página 87


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Características Electricas:
+12V a 1.5A
-12V a 0.3A
+5V a 4.5A
-5V a 0.2ª

Connector Pinout
(Disposición de las señales en el conector)

7.2.3.2 BUS PCI:

El Peripheral Component Interconect o Bus PCI es una estructura de interconexión reciente de alto ancho de
banda (33, 66, 100 y hasta 133 MHz en últimas versiones –PCI Express– ) Usa hasta 64 líneas de datos lo que
combinado a su frecuencia permite altas tasas de transferencia. Por ejemplo, se alcanza una tasa de 264MB/s a
33 MHz.

Su construcción es bastante económica. Brinda soporte para dispositivos PCI (tarjetas de expansión) tanto de 5V
(como la mayoría de los ISA) como de 3.3V. En el PCI se codifican los slots para que se puedan insertar tanto
tarjetas de 5 V como de 3.3V sin preocupación del cliente. Tarjetas de voltaje dual también son posibles.

Es un bus multiplexado. Trata todas las transferencias en modo de ráfaga. Cada ciclo comienza con una fase
de dirección seguido de una o más fases de datos. Las fases de datos se pueden repetir indefinidamente pero
su duración está controlada por una temporizador que define la máxima cantidad de tiempo que el
dispositivo PCI puede controlar el bus. Muchas líneas se solapan o multiplexan en el tiempo, tales como las
de datos y direcciones.

Página 88 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Las líneas de comando (C/BE3 to C/BE0) indican el tipo de transferencia durante la fase de dirección:

C/BE Command Type


0000 Interrupt Acknowledge
0001 Special Cycle
0010 I/O Read
0011 I/O Write
0100 reserved
0101 reserved
0110 Memory Read
0111 Memory Write
1000 reserved
1001 reserved
1010 Configuration Read
1011 Configuration Write
1100 Multiple Memory Read
1101 Dual Address Cycle
1110 Memory-Read Line
1111 Memory Write and Invalidate

Existen tres tipos básicos de transferencia: I/O, Memoria y Configuración.

El controlador de interrupciones, reconoce y actúa de manera automática ante el comando INTA (interrupt
acknowledge). En la fase de datos, transfiere el vector de interrupciones a las líneas de dirección.

7.3 Comunicación con Dispositivos Externos


Para comunicarnos con los dispositivos externos necesitamos básicamente poder establecer una forma
de localizarlos e identificarlos, así como una forma de enviarles o recibir información. Lo más práctico es
emplear el mismo esquema de acceso a la memoria y asignarle a cada dispositivo una dirección dónde leer o
escribir los datos. De esta forma, el diseño del sistema de E/S es consistente con nuestro modelo simple de
computador formado de tres partes (CPU, M y E/S) enlazadas mediante la estructura de interconexión que
está representada por el bus del sistema.

7.3.1 Direccionamiento de dispositivos externos

Se puede emplear el bus de direcciones para escribir la dirección del dispositivo al cual queremos acceder, los
datos en el bus de datos y algunas líneas de control podrían ayudar a realizar la sincronización necesaria. Este
esquema simple trae un problema a colación: ¿Cómo puedo diferenciar si una dirección es de Memoria o de
un dispositivo de E/S?

Para atacar este problema se han desarrollado dos técnicas. La primera, adoptada por muchas máquinas
grandes, con mucho espacio de direccionamiento para E/S, opta por tratar en lo posible el espacio de E/S
como direcciones en el mismo mapa de memoria (Mapa Integrado M-E/S), diferenciando entre ellos
mediante rangos o dominios de direcciones. Esto se implementa, por lo general, usando el bit más
significativo de la dirección para definir la naturaleza de ésta. Por ejemplo, si el MSB es 1, se refiere a una

Docente: Ing. José Díaz Chow Página 89


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

dirección de E/S y si es 0 se refiere a una localidad de memoria. De esta manera, los programas del usuario
pueden usar cualquier instrucción y modo pertinente con los dispositivos de E/S.

La segunda técnica consiste en separar físicamente el espacio de E/S del de memoria, empleando Mapas
Separados, con lo cual una dirección dada puede referirse tanto a Memoria como a E/S. Este esquema lo
emplean máquinas más pequeñas y permite limitar fácilmente el espacio de direccionamiento de E/S.

Este último esquema requiere, sin embargo poder especificar la naturaleza de la dirección. Esto
regularmente se implementa como una señal de control de salida del CPU (IO/M) que indica que la dirección
es de E/S si la señal es 1 y M si es 0. Esta señal se emplea para activar o desactivar los dispositivos de M o ES,
según el caso. En este esquema se requieren además instrucciones especiales para acceder a la E/S, por
ejemplo IN y OUT. La primera transfiere una palabra desde un puerto de datos de E/S hasta un registro del
CPU y la segunda transfiere el dato del registro a una dirección de E/S. Puede notarse que por eficiencia,
estas instrucciones por lo general solo tienen modo directo de registro y absoluto (para E/S)

7.3.2 Modos de Transferencia y Sincronización

Una vez definida la forma de localizar los dispositivos de E/S, es necesario definir cómo se realiza la
transferencia de datos entre el dispositivo de E/S y el CPU. Se entiende por transferencia, el hecho mismo de
llevar una palabra de datos hasta un dispositivo de E/S o desde el dispositivo al CPU o la memoria de la
Computadora. Se entiende por sincronización, la forma de coordinar las actividades entre la computadora y
los dispositivos externos conectados a fin que se proceda con la transferencia solamente si ambos
interlocutores están listos.

La forma más simple de transferencia consiste en escribir un programa que continuamente, en un ciclo,
realice la transferencia de los datos, palabra a palabra con el dispositivo. Este tipo de transferencia se
denomina transferencia dirigida por programa. En este caso, para implementar la sincronización, el
dispositivo de E/S debe contar con un registro de estado o control (o ambos) en el cual se pueda verificar si el
dispositivo está listo para enviar o recibir datos. Además del estado de ocupado se podría determinar si está
en una condición de error que lo inutiliza para establecer comunicación de datos lo cual es además útil en
sistema de monitoreo. El programa debe verificar continuamente el registro de estado del dispositivo para
determinar si hay existencia de datos que leer o anuencia para recibir nuevos datos. Este esquema simple,
tiene la ventaja de ser fácil de implementar pero requiere sincronización constante con el dispositivo de E/S,
por tanto necesita un procesador dedicado (monotarea) lo que lo hace impropio para sistemas operativos
multiusuario / multitarea. A este esquema de sincronización se le denomina polling, encuesta o
escrutino

Una segunda forma más flexible de transferencia consiste en emplear interrupciones. Las interrupciones
permiten al dispositivo externo indicarle al CPU que requiere atención. Por ejemplo, para imprimir un
archivo, se puede enviar un bloque completo de datos y dejar que la impresora trabaje. Cuando esta termina,
puede generar una Interrupción para alertar al programa que está lista para aceptar el siguiente bloque. De
esta manera, la transferencia es fácil de implementar en sistemas operativos multiusuario / multitarea, pues
el proceso de impresión se bloquearía cuando el buffer de impresión está lleno y cuando la impresora genere
su interrupción, podría ponerse activo nuevamente. Note que el uso de interrupciones es tanto un modo o
forma de transferencia como de sincronización.

Página 90 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Finalmente existen modos avanzados de transferencia, que permiten transferir bloques completos de datos a
gran velocidad desde el dispositivo de E/S hasta la Memoria principal o viceversa. Estos modos son el DMA
(Acceso Directo a Memoria) y los “Procesadores y Canales de E/S” (IO Channels e IO Processors) y que serán
expuestos luego. La sincronización se hace en dos niveles, tanto a nivel de dispositivo como a nivel del bus
del sistema.

7.4 Estructura del Módulo de E/S


Las diferentes tecnologías de los dispositivos de E/S son transparentes al Sistema de E/S gracias a los
Controladores de Dispositivos (Módulos de E/S o Interfaces de E/S). Estos se encargan por un lado de lidiar
con la tecnología constructiva del dispositivo (interfaz con el dispositivo externo) y por el otro de proveer una
interfaz al Sistema de E/S según las normativas de éste (Interfaz con el bus del sistema).

Independientemente de cómo se implementa el dispositivo de E/S, el controlador o módulo de E/S debe


disponer de:

 Un Decodificador de Direcciones que active la circuitería del módulo cuando en el bus de direcciones se
haga una referencia al dispositivo de E/S controlado, trabajando en correspondencia con las líneas de
control pertinentes (Como IO/M), a este bloque lo llamaremos Lógica de Entrada/Salida. También forman
parte de este bloque, otras líneas de control para sincronización (Solicitud de Interrupción, Solicitud de
Canal de DMA, etc.)

 Memoria intermedia (Latches de retención, buffers o BR) conectados al bus de datos, capaz de almacenar
información temporalmente a fin de aligerar la transferencia y evitar pérdidas de datos por diferencias de
velocidades.

 Registros de Control y/o de Estado, conectado al bus de datos que permita al programa (o al manejador
de dispositivo, en muchos sistemas operativos) saber el estado del dispositivo.

Finalmente. Debe tener un bloque que encapsule la lógica de interfaz con el dispositivo externo. Esta lógica
debe coordinar la transmisión de datos, verificación de estado y establecimiento de la estrategia de control.

Docente: Ing. José Díaz Chow Página 91


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Interfaz c on el bus Interfaz c on el


del s i s tem a di s pos i ti vo externo

Lógica de Datos

interfaz
Registro de datos
con el E s tado
Líneas de dispositivo
datos
externo
..
Control
Registro de Estado/Control

Líneas de
Lógica de Datos
di rec c i ones

Líneas de
Lógica de
E/S
.. interfaz
con el
dispositivo
E s tado

Control
externo Control

Figura 3. Estructura del módulo de E/S.

Nótese en la Figura 3, que el módulo de entrada salida mostrado es capaz de atender a varios dispositivos de
E/S, lo cual es bastante típico, por ejemplo en Interfaces de Almacenamiento Secundario (SCSI, IDE y SATA).

7.5 Interrupciones

Son mecanismos de coordinación y sincronización mediante el cual los dispositivos de E/S pueden
solicitar servicio del CPU. Al final del ciclo de instrucción, se verifica si existe alguna solicitud de interrupción.

El CPU da servicio al dispositivo solicitante mediante una RTI o ISR. En este momento se verifica un cambio de
contexto. El CPU suspende la ejecución actual y carga la ISR. Es evidente que para poder regresar al punto de
ejecución, es necesario guardar el estado del procesador ( PC, Status, Valores intermedios, etc). No todas las
arquitecturas guardan el estado automáticamente (Registros alternos, conmutación de BR o uso de pila)
debiendo hacerlo la ISR.

7.5.1 Tipos de Interrupciones

 Síncronas (Excepciones - Software): Sincrónicamente a la ejecución de la instrucción (consecuencia


de ésta).
 Asíncronas (Hardware): En el momento que el dispositivo lo solicita.

7.5.2 Diseño Simple del Sistema de Interrupciones

El CPU provee una señal de control de entrada INT para aceptar interrupciones de los dispositivos y
una señal de salida INTACK para indicar que concede al dispositivo atención a su solicitud y ejecutando la ISR.

Página 92 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7.5.3 Múltiples Dispositivos

En el diseño simple mostrado anteriormente, enfrentamos varios problemas si consideramos que la


computadora soporta múltiples dispositivos de E/S. Es posible conectar todos los dispositivos a una misma
línea de Solicitud INT y a una misma línea INTACK, sin embargo eso trae dos tipos de problemas cuando
múltiples dispositivos emiten solicitudes al unísono: Identificación fiable de los Dispositivos que solicitan y
Determinación de a quien se atiende en cada momento .

Para el problema de Identificación existen dos técnicas:

7.5.3.1 ESCRUTINIO DE DISPOSITIVO:

Se emplea una organización en colector abierto como el que se simula en la Figura 4, lo cual permite
dar servicio a varios dispositivos utilizando una sola línea de solicitud de interrupción. En este ejemplo INTR
es activa en bajo.

Vcc

CPU R
INTR
INTR

INTR 1 INTR 2 ... INTR n

Figura 4. Conexión de múltiples dispositivos a una línea de solicitud de


interrupciones única con Identificación por escrutinio

Si todas las señales de solicitud de interrupción de la INTR1 a la INTRn no están activadas (estado cero), el
resistor R mantendrá la línea de solicitud de interrupciones en el estado 1. Al solicitarse una interrupción, el
interruptor correspondiente se cierra cambiando la línea al estado cero, lo cual se invierte en la CPU. La
solicitud de interrupción INTR es igual a INTR1 + ... + INTRn.

Si se verifica que INTR vale cero, entonces al menos un dispositivo está solicitando atención y el CPU
interroga a cada dispositivo para determinar quienes solicitan atención. La determinación del orden del
servicio se logra mediante algoritmos de priorización o por un árbitro serial. Este sistema tiene la desventaja
de que se requiere mayor gasto de tiempo para interrogar los bits de estado de los dispositivos.

7.5.3.2 U SO DE I D S E I N TE R R U P CI O NE S VEC TO RI Z AD AS :

Se requiere que cada dispositivo tenga asignado un código de identificación ID. La competencia entre
múltiples dispositivos se resuelve normalmente empleando un árbitro paralelo. Cuando un dispositivo es
seleccionado para recibir atención, el árbitro envía el código de identificación del dispositivo a la CPU
mediante el bus de datos.

Regularmente los IDs de dispositivos se asocian a las líneas de solicitud de interrupción (entrada del árbitro),
Para atender las interrupciones vectorizadas, se mantiene en memoria una tabla de “vectores de

Docente: Ing. José Díaz Chow Página 93


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

interrupción” que tiene una entrada por cada ISR de interrupción (también de las excepciones). Cada entrada
de la tabla es un vector o puntero que tiene la dirección de inicio de la ISR o RTI, de forma que la CPU puede
emplear el ID recibido por el bus de datos para calcular el vector correspondiente.

7.5.4 Concurrencia de Múltiples Interrupciones:

7.5.4.1 P RI O RI D AD E S

Ante la presencia de múltiples solicitudes de servicio de interrupción concurrentes, se requiere poder


definir a qué dispositivo se dará servicio. Para resolver esta situación de competencia se emplean esquemas
de prioridades. Durante la ejecución de una ISR, es posible que ésta deba interrumpirse para dar servicio a
un dispositivo de mayor prioridad.

La implantación de un esquema de prioridad múltiple, se realiza fácilmente mediante líneas separadas de


solicitud de interrupción y de reconocimiento de interrupción para cada dispositivo. A cada línea de solicitud
de interrupción se le asigna un nivel diferente de prioridad que es manejado por un circuito de prioridad
denominado árbitro o controlador de interrupciones.

 Árbitro Paralelo:

En este caso, el circuito controlador de interrupciones tiene una línea de entrada de Solicitud de
Interrupciones INTR y una línea de reconocimiento INTA para cada dispositivo. El circuito se implementa
como un decodificador de prioridades que concede el servicio al dispositivo con mayor prioridad. Este tipo de
árbitro da soporte al manejo de IDs de las Interrupciones vectorizadas.

INTRP

INTR1
Dispositivo p .. Dispositivo 2 Dispositivo 1
Circuito
INTA1 de arbitro
de
prioridad
INTAP

Figura 5. Priorización de Interrupciones con árbitro paralelo

 Árbitro Serial:

Cuando varios dispositivos utilizan una sola línea de solicitud de interrupción, como en el caso de los sistemas
de identificación por escrutinio, la forma en que los dispositivos están conectados a la CPU, determina la
prioridad del dispositivo. En este caso el árbitro se implementa distribuido entre los mismos controladores o
módulos de E/S y el sistema de escrutinio. A este árbitro se le denomina serial por su forma de conexión: la
línea de interrupción (INTR) es común a todos los dispositivos y la línea de reconocimiento (INTA) está
conectada en forma de cadena de margaritas. Cuando el CPU activa la línea INTA como reconocimiento a una
o más solicitudes sobre INTR, cada módulo debe proceder según ciertas reglas:

 Si recibe un 0 en su entrada INTA, significa que no recibe reconocimiento y lo pasa también a la salida
INTA que se conecta al siguiente dispositivo.
Página 94 Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 Si recibe un 1 en su entrada INTA, significa que tiene reconocimiento y será atendido si está en espera de
un servicio de interrupción:
o Si requiere servicio: Pone un 0 a su salida INTA.
o Si no requiere servicio: Pasa el 1 a su salida INTA

Nótese, por tanto, que el dispositivo que se encuentre eléctricamente más cercano a la CPU tendrá la mayor
prioridad. La ventaja del arreglo de margarita es que no se requiere un circuito separado de decodificación
de las prioridades. Cuando el CPU encueste los dispositivos, sabrá quién es inequívocamente.

INTR

CPU Dispositivo 1 Dispositivo 2 Dispositivo n


INTA

Figura 6. Priorización de Interrupciones con árbitro Serial

Otra posibilidad es un esquema combinado como el que se muestra en la figura 7.6.4 donde tenemos un
esquema jerárquico de niveles de prioridad permiten controlar varios dispositivos. Teóricamente este
enfoque permite solicitar una interrupción con el nivel de prioridad que corresponda con la urgencia de la
función que se está realizando lo que lo hace flexible, pero contiene una circuitería compleja de control.

INTR 1
CPU
Dispositivo Dispositivo
Prioridad

INTA 1
INTR p

Dispositivo Dispositivo
INTA p

Figura 7. Árbitro Paralelo-Serie o multinivel

7.5.5 Habilitación e Inhabilitación de Interrupciones

El esquema de prioridades de Interrupciones permite resolver situaciones de concurso o race conditions


cuando tenemos solicitudes simultáneas, sin embargo introduce una nueva dificultad: una nueva
interrupción del mismo dispositivo o una interrupción de mayor prioridad podrían interrumpir la ejecución
del ISR. La solución de esta situación depende de la naturaleza de las interrupciones. En caso de
interrupciones de mayor prioridad sería lógico permitir la interrupción de la ISR de turno (proceso de Disco
Duro versus Refrescamiento de Memoria principal) sin embargo, a veces es imperioso completar la ISR sin
interrupciones porque de otro modo el procesador podría quedar en un estado no fiable. En caso de
anidamiento de la misma ISR, deberá tratarlo el programador de la Rutina (Ejemplo del teclado y orden de
tratamiento de caracteres tecleados). Para tratar estos casos, se provee de un mecanismo que permite la
Inhabilitación (enmascaramiento) de las interrupciones (Disable – Enable) que regularmente se maneja
mediante una bandera o código de condición en la palabra de status del CPU. Así el programador de la ISR
puede deshabilitar todas las otras interrupciones y dar el servicio a la interrupción y nuevamente habilitar las
interrupciones:

Docente: Ing. José Díaz Chow Página 95


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Comienza ISR
Desabilitar interrupciones
Codigo de la ISR
Habilitar interrupciones
Finaliza ISR

7.5.6 Enmascarado selectivo de Interrupciones:

Si queremos tratar solamente el anidamiento de ISR del mismo dispositivo, es requerido hacer un
enmascaramiento solo de éste y no deshabilitar todas las interrupciones dentro del esquema de prioridades.
Para tal fin, los árbitros suelen contar con un Flip-Flop de máscara que inhabilita el tratamiento anidado de
cada interrupción por separado. La gran ventaja de esto es que tal comportamiento es programable.

7.5.7 Interrupciones no enmascarables:

Algunas interrupciones no deben enmascararse debido a su importancia (Fallo de Energía, por ejemplo) y por
tanto no se pueden bloquear (Son denominadas Interrupciones No Enmascarables o NMI).

7.5.8 Ejemplo de árbitro de Interrupciones


A continuación se presenta un ejemplo de un árbitro de interrupciones, el Controlador Programable de
Interrupciones (PIC) 8259 A de Intel.

7.5.8.1 EL PIC INTEL 8259A

Las interrupciones son enviadas al procesador a través del controlador programable de


interrupciones 8259A, el cual provee al sistema con ocho interrupciones de hardware priorizadas. Cuando el
8259A recibe una solicitud de interrupción, típicamente de un dispositivo periférico, el controlador conduce
su salida en alto (INT), el cual está conectado a la línea de entrada al procesador (INTR). La línea INTR es
utilizada por el procesador para señalar la ocurrencia de una interrupción enmascarable. Si el bit I está activo
en el registros de banderas, el procesador envía una señal de reconocimiento al controlador 8259A.

Después de recibir una señal de reconocimiento (INTA) del procesador, el controlador de


interrupciones ubica el vector de interrupciones apropiada en el bus del sistema. Las ocho interrupciones de
hardware (IRQ0 a IRQ7) en el 8259A son correspondidas por el controlador al vector de interrupciones del 8
al 15 (0Fh). Las interrupciones son priorizadas, la IRQ0 tiene la más alta prioridad y la IRQ7 la más baja
prioridad. Muchas de estas fueron asignadas por los diseñadores de la PC a periféricos particulares. Ver
Tabla.

Página 96 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Asignaciones de las interrupciones en la IBM PC XT/AT


Interrupción Indice del vector Acción PC
IRQ0 08h Pulso del reloj (18.2 por segundo) XT/AT
IRQ1 09h Entrada al teclado XT/AT
IRQ2 0Ah Reservado para interrupciones en cascada XT/AT
IRQ3 0Bh COM2 XT/AT
IRQ4 0Ch COM1 XT/AT
IRQ5 0Dh Controlador de disco fijo XT/AT
IRQ6 0Eh Controlador de disco flexible XT/AT
IRQ7 0Fh Controlador de impresora XT/AT
IRQ8 70h Reloj de tiempo real AT
IRQ9 71h Redirección de cascada AT
IRQ10 72h Reservado AT
IRQ11 73h Reservado AT
IRQ12 74h Dispositivo auxiliar AT
IRQ13 75h Excepción del coprocesador matemático AT
IRQ14 76h Controlador de disco fijo AT
IRQ15 77h Reservado AT

La PC AT está diseñada con un segundo controlador de interrupciones para ocho niveles adicionales de IRQ.
La línea INT del segundo controlador (el esclavo) es conectado a la línea IRQ2 del primer controlador (el
maestro) para formar el diseño en cascada como se muestra en la figura 7.6.5. Las ocho interrupciones (IRQ8
al IRQ15) del segundo controlador se corresponden a los vectores de interrupciones 112 (70h) al 119 (77h).
Dado que las interrupciones adicionales están efectivamente conectadas a la línea IRQ2 del controlador
maestro, ellas toman la prioridad sobre las líneas IRQ3 a la IRQ7 del controlador maestro.

Un dispositivo de E/S como una tarjeta adaptadora que se conecta al bus de expansión ISA, puede emitir una
interrupción al causar una transición de alto a bajo en una de las líneas IRQ del bus. En la mayoría de las
tarjetas adaptadoras se puede seleccionar cual línea IRQ utilizar, usualmente configurando a través de
jumpers o mediante lógica programable. Muchas tarjetas adaptadoras son capaces de producir
interrupciones bajo más de una condición, por lo tanto la rutina de servicio de interrupción debe determinar
la causa de la interrupción, usualmente examinando el registro de estado contenido en la tarjeta adaptadora.

Bus de Direcciones/Datos/Control de la CPU

INTA* INT INTA* INT

Esclavo 8259A Control Master 8259A

IRQ8 IRQ10 IRQ12 IRQ14 IRQ0 IRQ2 IRQ4 IRQ6


IRQ9 IRQ11 IRQ13 IRQ15 IRQ1 IRQ3 IRQ5 IRQ7

Bus ISA (AT)

Figura 8. Conexión en cascada de dos PIC 8259A

Docente: Ing. José Díaz Chow Página 97


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 9. Organización Interna del Intel PIC 8259A

7.6 Acceso Directo a Memoria


Este método de transferencia avanzado, se implementó con el objetivo de mejorar la velocidad de
transferencia de datos, sobre todo para dispositivos y aplicaciones de E/S muy rápidos (Adquisición de
sonido, discos duros de alta velocidad y video). Consiste en proveer un procesador auxiliar denominado
“Controlador de Acceso Directo a Memoria” o DMAC (por sus siglas en inglés) en el módulo de E/S, capaz de
hacer transferencia por programa directamente a la memoria, relevando al CPU de esta tarea. El acceso
directo a memoria o DMA (por sus siglas en inglés) se aprovecha cuando los dispositivos son capaces de
transferir gran cantidad de datos de una vez.

Página 98 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7.6.1 Transferencia de datos de Acceso Directo a Memoria

Cuando un programa desea realizar una transferencia empleando DMA, el CPU inicializa los parámetros de la
misma e indica al Módulo DMA:

 Dirección de la Operación (E/SM o ME/S).


 Se indica la dirección base del dispositivo de E/S.
 Se indica la posición inicial de memoria.
 Se indica el número de bytes que se van a transferir

Acto seguido, el CPU se desentiende de la transferencia. El procesador de DMA coordina el acceso al


dispositivo y realiza la transferencia.

Para realizar la transferencia el Controlador de DMA requiere usar el bus del sistema, por tanto debe
coordinarse con el CPU para tomar control del bus, a través de algún protocolo de puesta en acuerdo
(handshaking) mediante señales de control. Por ejemplo, el DMAC solicita acceso al bus activando la señal
HOLD o BUS_REQUEST del CPU. El CPU concede el bus activando la señal HLDA o BUS_GRANT y se aísla
eléctricamente del bus. Cuando DMAC recibe la autorización, procede a usar el bus y realiza la transferencia
sincronizándose con el dispositivo de E/S mediante líneas del DMAC denominadas canal de DMA. Cuando
finaliza la transferencia, el DMAC desactiva la señal HOLD o BUS_REQUEST, regresando el control al CPU.

Finalizada la transferencia, el DMA reporta al programa (CPU) a través de una interrupción de Fin de
Transferencia.

7.6.2 Modos de Transferencia de datos DMA

Una ventaja de DMA sobre interrupciones es que la transferencia en DMA puede hacerse en cualquier ciclo,
en tanto en Interrupciones, la verificación de solicitudes de interrupción se hace hasta al final de la fase de
ejecución. DMA puede emplear además, diferentes modos de transferencia:

a) Por ráfaga: Cuando requiere transferir bloques completos de datos a gran velocidad. En este modo el
CPU es bloqueado hasta que se realiza la transferencia.
b) Por robo de ciclos (cycle stealing): En este modo, el DMAC toma un ciclo para transferencia al final de
la ejecución de cada instrucción, permitiendo así solapamiento entre las operaciones de CPU y la E/S.
c) Transparente: Se emplea el bus durante las etapas del ciclo de instrucción en que el CPU no accede al
bus, básicamente, durante la decodificación y ejecución de la operación.

A continuación, se muestra un esquema comparativo de los diferentes modos:

Docente: Ing. José Díaz Chow Página 99


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 10. Modos del DMA

7.6.3 Configuraciones de DMA

Son posibles diversas configuraciones en la implementación de DMA. La más simple consiste en tener un solo
controlador de DMA (DMAC Desacoplado) y los dispositivos de E/S conectados directamente al bus del
sistema a través de su módulo controlador. En este diseño, el DMAC realiza dos transferencias a través del
BUS: Dispositivo a DMAC y DMAC a Memoria (o viceversa). El CPU es suspendido dos veces cada vez.

La figura a continuación esta configuración con DMAC desacoplado:

Figura 11. DMAC desacoplado

La siguiente configuración es la más difundida y consiste en tener integrado el DMAC en el módulo de E/S. El
DMAC mediaría entre el bus del sistema y el dispositivo directamente, eliminando la necesidad de dos
transferencias sobre el bus del sistema. Asimismo el CPU solo es suspendido una vez. La figura a continuación
muestra gráficamente un esquema ejemplo de esta configuración:

Página 100 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 12. DMAC integrado al módulo de E/S.

La última configuración propone el empleo de un bus de E/S que es coordinado por el DMAC. El DMAC media
entre el bus del sistema y el bus de entrada-salida. Los dispositivos se conectan al bus de entrada-salida (I/O
Bus)

Figura 13. DMAC con bus de E/S.

7.6.4 Acceso al bus de múltiples Controladores de DMA


En configuraciones que contienen múltiples DMACs es requerido coordinar adecuadamente el acceso al bus.
Para esto se requiere el empleo de árbitros. Se pueden emplear árbitros paralelos o seriales.

La figura a continuación muestra el ejemplo de una configuración de múltiples controladores de DMA


coordinados mediante un arbitraje serial. Asimismo se muestra el diagrama de sincronización de las señales
(timing diagram) para garantizar el uso exclusivo ordenado del bus del sistema. En este diagrama, la Señal -
BR se emplea para solicitar el bus y –BBSY indica que está ocupado. BG1 y BG2 son las señales de concesión
de permiso al bus. Nótese el empleo de esquema en cadena de margaritas para el arbitraje.

Docente: Ing. José Díaz Chow Página 101


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 14. Sincronización de múltiples DMACs.

7.7 Procesadores y Canales de E/S


Son una evolución de DMA. Consisten en procesadores inteligentes de tratamiento de E/S, capaces de
atender a múltiples dispositivos a la vez. A diferencia de DMA que empleaba el bus del Sistema para realizar
la transferencia, cuando se usa un IO Processor, IO Channel o Canal de E/S, los dispositivos se conectan
directamente al canal de E/S. Actualmente, los módulos DMA emplean Procesadores de E/S y pueden ofrecer
las mismas características que ofrecen los canales.

Estos Procesadores de E/S se implementaron en computadoras grandes (Supercomputadoras,, mainframes y


en algunas Minicomputadoras) permitiendo jerarquizar el sistema de E/S reduciendo la brecha de
velocidades entre los diferentes dispositivos.

De acuerdo a su modo de operación, existen tres tipos de Canales de E/S:

7.7.1 Canal Selector


Canal dedicado a un dispositivo a la vez. Permite realizar transferencias de grandes bloques de datos. Propio
para dispositivos de muy alta velocidad como discos duros e impresoras de línea.

Página 102 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 15. Canal Selector.

7.7.2 Canal Multiplexado


Permite atender muchos dispositivos de mediana y baja velocidad a la vez en un esquema de round-robin.
Permite dos modos: Entresacado de Bytes y modo ráfaga. En el primero la transferencia es byte a byte y en el
segundo es por bloques. Cada dispositivo tiene un quantum de tiempo asignado para transferencia. Si no hay
transferencia pendiente, se pasa la oportunidad al siguiente. Toda transferencia comienza en modo de
entresacado de bytes. Cuando un dispositivo termina su quantum inicial y aún tiene datos cuantiosos que
transferir, se conmuta a modo ráfaga y se le brinda un segundo quantum.

7.7.3 Canal Multiplexado por bloques:


Este canal multiplexado siempre opera en modo ráfaga.

Figura 16. Canal multiplexor

Docente: Ing. José Díaz Chow Página 103


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7.8 Interfaces Estándares


Con el objetivo de simplificar la conexión de periféricos comunes como módems e impresoras, los
fabricantes de computadoras han ido acordando el uso de interfaces estándares que provean un conector y
un conjunto de características predefinidas de forma tal que cualquier dispositivo externo pueda
implementar comunicación con el sistema de entrada-salida, mediante el uso de tales interfaces.

En función de la cantidad de bits que se transmiten simultáneamente, tenemos dos grupos de interfaces
estándar: Las paralelas (n bits a la vez) y las Serie (1 bit a la vez).

7.8.1 Interfaces Serie

Este grupo de interfaces, transmiten un solo bit a la vez, ya sea simplex (en una sola dirección), semiduplex o
duplex. La más reconocida es la interfaz serial TIA RS-232 que aún se encuentra disponible en la mayoría de
las PC y que se empleaba para comunicaciones asíncronas. En la actualidad ha cobrado mucho auge la
interfaz USB (Universal serial bus) que mejora grandemente las tasas de transferencia y el IEEE 1394 o
Firewire (solo disponible de base en computadoras de alto desempeño para multimedia pero se puede
contar con ésta mediante tarjetas de extensión).

7.8.1.1 I N TE RF AZ SE RI E R S - 23 2

Esta interfaz disponible en la mayoría de las PC tiene el conector en dos presentaciones, de 25 y 9 pines.
Provee comunicación serial asíncrona y opciones de sincronización por hardware y software (a través del
protocolo XON/XOFF). Tiene un modelo de comunicación desbalanceado (una línea de transmisión y una de
recepción con tierra o retorno común).

A continuación se muestra la distribución de pines y un programa de ejemplo en C para lograr comunicación


PC a PC estilo talk de unix, mediante un cable NULL-MODEM.

 Distribución de pines de los conectores DB25 y DB9:

Figura 17. Distribución de Pines de conectores serie DB9 y DB25.

Página 104 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

 Programa para comunicación PC-PC mediante cable Null-Modem usando la función de C bioscom.

Archivo COM.H (Definición de constantes de bioscom)


#include <bios.h>

/* Ports */

#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3

/* some HandSk Signal */

#define DATA_READY 0x100


#define OVERRUN_ERR 0x200
#define PARITY_ERR 0x400
#define FRAME_ERR 0x800

#define BREAK_DONE 0x1000


#define HOLD_EMPTY 0x2000
#define SHIFT_EMPTY 0x4000
#define TIME_OUT 0x8000

/* ---------------------- */

#define CHGE_CLR2S 0x1


#define CHGE_DS_RDY 0x2
#define TRAIL_ERING 0x4
#define CHGE_RX_LIN 0x8

#define CLR_2_SEND 0x10


#define DATA_SET_RDY 0x20
#define RING_IND 0x40
#define RX_LINE 0x80

/* Commands */

#define CONFIG 0
#define WRITE 1
#define READ 2
#define STATUS 3

/* Comm Parameters: n Bits, stop Bits, Parity, Baud Rate */

#define BITS_7 0x02


#define BITS_8 0x03

#define STOP_BIT_1 0x00


#define STOP_BIT_2 0x04

#define PARITY_NONE 0x00


#define PARITY_ODD 0x08
#define PARITY_EVEN 0x18

#define BAUD_110 0x00


#define BAUD_150 0x20
#define BAUD_300 0x40
#define BAUD_600 0x60
#define BAUD_1200 0x80
#define BAUD_2400 0xA0
#define BAUD_4800 0xC0
#define BAUD_9600 0xE0

Docente: Ing. José Díaz Chow Página 105


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Archivo: TERMINAL.C ( Programa simple de comunicación PC-PC)

#include "com.h"
#include <conio.h>
#define CRt 13
#define NLn 10
#define ESC 27

main ()
{
/* Variables para manejo de ventanas de interlocutores */
int meLeft = 1, meTop = 13, meRight = 80, meBottom = 24;
int meAttribute = BLACK + ( CYAN << 4);
int youLeft = 1, youTop = 1, youRight = 80, youBottom = 12;
int youAttribute = LIGHTGRAY + ( BLUE << 4);
int mx, my, yx, yy ;

/* Variables para manejo del puerto y sus datos */


int comPort = COM1;
int settings;
int register in, out, status;

/* Parámetros de la comunicación */
settings = ( BAUD_9600 | PARITY_EVEN | STOP_BIT_1 | BITS_7 );
mx = my = yx = yy = 1 ;

/* Se configura el puerto */
bioscom( CONFIG, settings, comPort );

/* Limpiar las ventanas para los interlocutores */


window( meLeft, meTop, meRight, meBottom );
textattr( meAttribute );
clrscr();
window( youLeft, youTop, youRight, youBottom );
textattr( youAttribute );
clrscr();

/* Proceso de Talkin' */
while( 1 )
{
status = bioscom( STATUS, 0, comPort );
if( status & DATA_READY ) /* Hay datos que leer */
{
if(( out=bioscom( READ, 0, comPort ) & 0x7F ) != 0 )
{
if ( out == ESC ) return( 0 );
textattr( youAttribute );
window( youLeft, youTop, youRight, youBottom );
gotoxy( yx, yy );
putch( out );
if (out == CRt) putch(NLn);
yx = wherex();
yy = wherey();
}
}
if( kbhit() )
{
in = getch();
bioscom( WRITE, in, comPort);
if(in == ESC) return( 0 );
textattr( meAttribute );
window( meLeft, meTop, meRight, meBottom );
gotoxy( mx, my );
putch(in);
if (in == CRt) putch(NLn); /* Manejar Nueva línea en Retorno de carro */
mx = wherex();
my = wherey();
}
}

Página 106 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

}
 Asignación de Pines de los conectores Seriales y Esquema de conexión para elaborar cable NULL MODEM para
comunicación PC-PC.

D-Sub 9 D-Sub 9
Receive Data 2 3 Transmit Data
Transmit Data 3 2 Receive Data
Data Terminal Ready 4 6+1 Data Set Ready + Carrier Detect
System Ground 5 5 System Ground
Data Set Ready + Carrier Detect 6+1 4 Data Terminal Ready
Request to Send 7 8 Clear to Send
Clear to Send 8 7 Request to Send

D-Sub 9 D-Sub 25
Receive Data 2 2 Transmit Data
Transmit Data 3 3 Receive Data
Data Terminal Ready 4 6+8 Data Set Ready + Carrier Detect
System Ground 5 7 System Ground
Data Set Ready + Carrier Detect 6+1 20 Data Terminal Ready
Request to Send 7 5 Clear to Send
Clear to Send 8 4 Request to Send

7.8.1.2 I N TE RF AZ U SB:

El Universal Serial Bus o USB por sus siglas en inglés es una interfaz para dispositivos externos que emplea
comunicación serial. El estándar, que actualmente va en su tercera versión (USB 3.0), especifica los cables o
interfaces, conectores y protocolos usados en un bus para conectar, comunicar y proveer de alimentación
eléctrica a computadoras con otras computadoras, periféricos y dispositivos externos. La Figura 18, muestra el
símbolo internacional del conector de USB en las computadoras.

Figura 18. Símbolo del USB.

El USB fue diseñado para economizar y estandarizar la conexión de periféricos. Originalmente las computadoras
empleaban diferentes interfaces para cada dispositivo. Por ejemplo, el teclado usaba dos posibles interfaces
DIN y PS/2 (esta última era propiedad de IBM, lo que limitaba su uso), el ratón usaba el puerto serial RS-232 o
el PS/2 para ratón, y la impresora empleaba la interfaz paralela centronics. La idea de USB fue proporcionar una
única interfaz a través de la cual poder conectar cualquier dispositivo periférico a la computadora. Fue
desarrollado a mediados de los años 1990. En 1996, se completó la primera especificación USB 1.0 que tuvo
dificultades para su implementación. Ésta no fue totalmente estable sino hasta en 1998 cuando se lanzó la
especificación USB 1.1.4. Una de las ventajas del USB respecto al RS-232 es su alta velocidad de transferencia
que le permite trasladar datos masivos, haciéndola apropiada incluso para dispositivos de almacenamiento.
Asimismo, su capacidad de proporcionar energía a los dispositivos externos (hasta 500 mA) facilita la
implementación y operación de estos dispositivos. La tabla a continuación muestra la descripción de líneas de la
interfaz para la especificación USB 2.0 en sus variantes de conectores A y B, que son los más usados en
computadoras de escritorio y servidores.

Docente: Ing. José Díaz Chow Página 107


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Pin Nombre Color de cable Descripción

1 VCC Rojo +5 V

2 D− Blanco Data −

3 D+ Verde Data +

4 GND Negro Tierra

Esta otra tabla muestra la descripción de líneas de la interfaz para la especificación USB 2.0 en sus variantes
de conectores mini y micro A y B, que son los empleados en dispositivos móviles.

Pin Nombre Color de cable Descripción

1 VCC Rojo +5 V

2 D− Blanco Data −

3 D+ Verde Data +

Permite la distinción de Micro-A y Micro-B


4 ID Ninguno  Tipo A: conectado a tierra
 Tipo B: no conectado

5 GND Negro Tierra y retorno o negativo

Como puede comprobarse de las descripciones de las líneas físicas, una característica interesante de USB que lo
hace superior a sus antecesores seriales y paralelos en la computadora, es que no tiene líneas para las funciones
de control (solo tiene líneas de datos), éstas son realizadas mediante protocolos de comandos, no mediante
líneas físicas, lo cual facilita la especificación, aunque complejiza la lógica de control.

La Figura 19 muestra las diferentes tipos de conectores USB.

Figura 19. Tipos de Conectores USB


Página 108 Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

7.8.2 Interfaces paralelas

Estas interfaces trasmiten n bits simultáneamente. Las líneas de transmisión pueden ser unidireccionales
o bidireccionales. Además de las líneas de transferencia se requieren líneas de sincronización y control.

La más reconocida es la interfaz Centronics de 8 bits que se ha usado en las PCs para la comunicación con las
impresoras, antes de la introducción masiva de USB.

 Determinacion de la cantidad de puertos paralelos y su dirección base:

La PC puede tener de 1 a 4 puertos paralelos denominados LPTx. Se puede determinar la cantidad y


la dirección base de éstos por varios métodos:

Debug: la asignación de puertos paralelos en la estructura del BIOS comienza en la dirección 0040:08H. En
debug la instrucción

–d 0040:08 L8

muestra los valores para estos posibles 4 puertos. En una máquina de prueba el resultado fue:
0040: 0008 78 03 78 02 00 00 00 00

Lo que indica que en ésta existen sólo dos puertos con las direcciones que se muestran en la tabla abajo.
Nótese que la PC usa ordenamiento de palabra “little endian”, es decir que el entero se almacena en la
memoria poniendo el byte menos significativo en las dirección más baja, así los bytes 78 03 representan el
entero 0378H.

Puertos paralelos existentes en la PC


Registros del Puerto (Datos = Dirección Base)
Designación
Datos Estado Control
LPT1 0378H 0379H 037AH
LPT2 0278H 0279H 027AH

Usar programas utilitarios como MSD.EXE, Norton Utilities, Las rutinas de información del sistema de
Microsoft (accesibles desde el About Box de Programas como Microsoft Word o Excel) u otros.

Crear programas propios: Por ejemplo, el código en C que aparece abajo:

# include <stdio.h>
# include <dos.h>

void main()
{

Docente: Ing. José Díaz Chow Página 109


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

unsigned int far *ptraddr;


unsigner int address;
int a;

ptraddr = (unsigned int far *) 0x00000408;

for(a = 0;a <= 3; a++)


{
address = *ptraddr;
if (address == 0 )
printf(“Puerto no encontrado para LPT%d \n”,a+1);
else
printf(“Puerto LPT%d – Dirección base: %Xh \n”, a+1, address);
*ptraddr++;
}
}

 Asignación de Pines del Conector y su conexión interna a los registros del Puerto:
L Í N E A S Ú T I L E S :

- 8 salidas en el puerto DATA.


- 5 entradas (1 invertida) accedidas
vía el registro de STATUS.
- 4 salidas (3 invertidas) en el
puerto de CONTROL.
- Los 8 pines restantes estan
puestos a tierra.

Figura 20. Distribución de Pines del conector de interfaz paralela DB25

Señales del Conector Registros Internos del puerto paralelo

Página 110 Docente: Ing. José Díaz Chow


A R Q U I T E C T U R A D E M Á Q U I N A S C O M P U T A D O R A S I I .

Figura 21. Descripción de señales y puertos de la interfaz paralela.

Docente: Ing. José Díaz Chow Página 111

Vous aimerez peut-être aussi