Arquitecturas de Máquinas Computadoras II

Anuncio
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
Curso 2016
Managua, Julio de 2016
Arquitectura de Máquinas Computadoras II
Guía de estudio para el estudiante
Elaborado por
Profesor José Díaz Chow
Última Revisión: Julio 2016
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
8
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
17
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
23
3.3 CODIGO DE OPERACIÓN
24
3.3.1 CODIFICACIÓN DE BLOQUE FIJO
24
3.3.2 CODIFICACIÓN DE BLOQUE EXPANDIDO
25
3.3.3 CODIFICACIÓN HUFFMAN
26
3.4 CAMPOS DE DIRECCIONAMIENTO
29
3.5 MODOS DE DIRECCIONAMIENTO
30
3.5.1 MODO INMEDIATO
30
3.5.2 MODO DIRECTO O DE REGISTRO
31
3.5.3 MODO ABSOLUTO O DIRECTO DE MEMORIA
31
3.5.4 MODO INDIRECTO DE REGISTRO
32
3.5.5 MODO INDIRECTO DE MEMORIA
32
3.5.6 MODO DE AUTOINCREMENTO
33
3.5.7 MODO DE AUTODECREMENTO
33
3.5.8 MODOS DESPLAZADOS
34
3.5.9 MODO INDIZADO O DE ÍNDICE
34
3.5.10 MODO BASE-DESPLAZAMIENTO
35
3.5.11 MODO BASE-DESPLAZAMIENTO CON ESCALACIÓN
36
3.5.12 MODO DE DESPLAZAMIENTO RELATIVO
36
3.6 CODIFICACIÓN DEL MD
37
4 UNIDAD DE EJECUCION
38
4.1 LA FUNCION DE PROCESAMIENTO
38
4.2 REPRESENTACION DE DATOS
38
4.2.1 REPRESENTACIÓN DE ENTEROS CON SIGNO.
39
4.2.2 NÚMEROS EN PUNTO FLOTANTE
40
4.2.3 OTROS TIPOS DE DATOS:
41
4.3 LA UNIDAD ARITMETICA
42
4.4 LA UNIDAD LOGICA
45
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
59
5.5 UNIDAD DE CONTROL MICROPROGRAMADA
62
5.6 MICROPROGRAMA Y MICRORRAMIFICACIONES
68
5.7 APLICACIONES DE LA MICROPROGRAMACION
71
5 EL SISTEMA DE MEMORIA
72
5.1 LA FUNCIÓN DE ALMACENAMIENTO
72
5.2 CARACTERIZACIÓN DE LA MEMORIA.
73
5.3 ORGANIZACIÓN DE LA MEMORIA PRINCIPAL.
75
5.4 JERARQUÍA DE MEMORIA.
77
5.4.1 BASES DE LA JERARQUÍA DE MEMORIA
77
5.4.2 CARACTERÍSTICAS DE LA JERARQUÍA DE MEMORIA
78
5.5 SISTEMA DE MEMORIA CON CACHÉ
78
5.5.1 INTERCONEXIÓN CACHÉ - MEMORIA PRINCIPAL
79
5.5.2 ELEMENTOS DE DISEÑO DE LA CACHÉ
79
5.5.3 TÉCNICAS DE MAPEO
80
5.5.4 ALGORITMOS DE SUSTITUCIÓN DE BLOQUE
83
5.5.5 POLÍTICA DE ESCRITURA
84
6 EL SISTEMA DE ENTRADA-SALIDA
85
6.1 LA FUNCIÓN DE TRANSFERENCIA EXTERNA
85
6.2 ESTRUCTURA DE INTERCONEXIÓN DE LA COMPUTADORA
85
6.2.1 INTERCONEXIÓN CON BUSES
85
6.2.2 DISEÑO DEL BUS
87
6.2.3 BUSES ESTÁNDARES
88
6.3 COMUNICACIÓN CON DISPOSITIVOS EXTERNOS
90
6.3.1 DIRECCIONAMIENTO DE DISPOSITIVOS EXTERNOS
90
6.3.2 MODOS DE TRANSFERENCIA Y SINCRONIZACIÓN
91
6.4 ESTRUCTURA DEL MÓDULO DE E/S
92
6.5 INTERRUPCIONES
93
6.5.1 TIPOS DE INTERRUPCIONES
93
6.5.2 DISEÑO SIMPLE DEL SISTEMA DE INTERRUPCIONES
93
6.5.3 MÚLTIPLES DISPOSITIVOS
94
6.5.4 CONCURRENCIA DE MÚLTIPLES INTERRUPCIONES:
95
6.5.5 HABILITACIÓN E INHABILITACIÓN DE INTERRUPCIONES
96
6.5.6 ENMASCARADO SELECTIVO DE INTERRUPCIONES:
97
6.5.7 INTERRUPCIONES NO ENMASCARABLES:
97
6.5.8 EJEMPLO DE ÁRBITRO DE INTERRUPCIONES
97
6.6 ACCESO DIRECTO A MEMORIA
99
6.6.1 TRANSFERENCIA DE DATOS DE ACCESO DIRECTO A MEMORIA
100
6.6.2 MODOS DE TRANSFERENCIA DE DATOS DMA
100
6.6.3 CONFIGURACIONES DE DMA
101
6.6.4 ACCESO AL BUS DE MÚLTIPLES CONTROLADORES DE DMA
102
6.7 PROCESADORES Y CANALES DE E/S
103
6.7.1 CANAL SELECTOR
103
6.7.2 CANAL MULTIPLEXADO
104
6.7.3 CANAL MULTIPLEXADO POR BLOQUES:
104
6.8 INTERFACES ESTÁNDARES
105
6.8.1 INTERFACES SERIE
105
6.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 aspectos de Arquitectura
como de Organización de Computadoras. En éste, estaremos estudiando elementos del diseño 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, con énfasis en 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 Presper Eckert
unos de sus alumnos de ingeniería eléctrica, propusieron construir un computador de uso general usando
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
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 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ó
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 .
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.
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 1977, 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.
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
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 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
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 .
ú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.
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 la oferta
de microprocesadores actuales en el mercado está dominada por 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 o era del conocimiento. 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.
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
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:

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
Control
Cálculo
Salida
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.
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 .
1.4.1 Enfoque Funcional
Las operaciones que una computadora es capaz de hacer son:




Procesamiento de datos
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
datos
Mecanismo
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
datos
Mecanismo
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.
Computadora
Periféricos
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
Organo de Cálculo
Mecanismo de
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
1.4.2.1
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I .
PROCESADOR O CPU
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
SISTEMA DE ENTRADA / SALIDA
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




Docente: Ing. José Díaz Chow
Cargar los operandos
Ejecutar la operación
Guardar el resultado
Verificar si hay solicitudes de interrupción
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
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
mantener 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
R1
.
.
.
Rn-1
MDR
Entrada / Salida
Bus Interno del Procesador
TMP
SP
Bus de Direcciones
ALUsel
Bus de Datos
Y
SOURCE
Bus del sistema
PC
ALU
IR
Z
Memoria
Unidad de
Control
FLAGS
READ
WRITE
IO/M
INTACK
INT
Figura 2.1 Elementos estructurales del procesador.
Adicionalmente se suele separar la estructura
del CPU en dos vistas: El camino de los datos o
Datapath y el control. Conforman el Datapath
todos los elementos por los que discurren los
datos dentro del CPU, especialmente la ALU, los
registros de propósito general, los registros de
acceso a memoria y los registros adicionales.
Dentro del Datapath se organizan los órganos
de cálculo (ALU y Registros de datos) en una
entidad lógica denominada unidad de
ejecución. Los registros de acceso al bus y
registros auxiliares se suelen organizar en una
unidad denominada “de Interfaz y carga de
instrucciones”.
CPU
Control
Líneas de Control
Unidad de
Control
Instrucciones
Señales de Control
Registros
de Propósito
General
ALU
Interfaz al Bus y
Carga de
Instrucciones
Direcciones y Datos
Flags
Unidad de Ejecución
Datapath
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
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 .
finalmente transferir el contenido del acumulador a memoria. La figura 2.3 nos muestra una arquitectura
típica de acumulador.
PC
MAR
MDR
Memoria e
Interface de
E/S
IR
Acc
Unidad
de
Control
ALU
F
Figura 2.3. Ejemplo de estructura 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
LOAD (m)
LOAD n
STORE X
STORE (m)
ADD X
ADD (m)
ADD n
Acc  M(X) ; X es una variable de memoria
Acc  M(m) ; m es una dirección de memoria
Acc  n
; n es un número entero.
M(X)  Acc ; X es una variable de memoria
M(m)  Acc ; m es una dirección de memoria
Acc  (Acc) + M(X) ; X es una variable de memoria
Acc  (Acc) + M(m) ; m es una dirección de memoria
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.
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
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 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
en la dirección más alta de memoria y
crecen en el sentido de las direcciones de
memoria más bajas. La organización de la
máquina de pila es mostrada en la figura
2.4. El registro SP es el puntero a Pila, es
un registro que siempre tiene la dirección
de la última palabra insertada en la pila:
Tope de pila o TOS (Top of Stack). En
función de este registro, también se
puede obtener el elemento inmediato
bajo TOS: Próximo en pila o NOS (Next on
Stack).
PC
MAR
SP
Area de la
memoria para
pila
Resto de la
memoria
IR
Unidad
de
Control
temp
ALU
F
En el evento de una operación
binaria, el primer operando será
Figura 2.4 Ejemplo de estructura 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
PUSH (m)
PUSH n
POP Z
POP (m)
ADD
SUB
MUL
DIV
TOS  M(X)
TOS  M(m)
TOS  n
M(Z)  TOS
M(m)  TOS
(TOS’) = (NOS) +
(TOS’) = (NOS) (TOS’) = (NOS) *
(TOS’) = (NOS) /
NOS: Next on the stack
Docente: Ing. José Díaz Chow
(TOS)
(TOS)
(TOS)
(TOS)
TOS: Top of the stack.
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 .
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
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
MAR
MDR
Memoria e
Interface de
E/S
R0
R1
IR
R2
Unidad
de
Control
Rm-1
ALU
F
Figura 2.5. Ejemplo de estructura 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.
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
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.
Instrucciones de 3 operandos
Instrucción
Operación
ADD Rd, Rf1, Rf2
SUB Rd, Rf1, Rf2
MUL Rd, Rf1, Rf2
DIV Rd, Rf1, Rf2
; Rd  Rf1 + Rf2
; Rd  Rf1 - Rf2
; Rd  Rf1 * Rf2
; Rd  Rf1 / Rf2
Instrucciones de 2 operandos
MOV Rd, Rf
MOV Rd, n
MOV Rd, X
MOV Rd, (m)
MOV X, Rf
MOV (m), Rf
ADD Rf, Rd
SUB Rf, Rd
MUL Rf, Rd
DIV Rf, Rd
; Rd  Rf
; Rd  n | n es un número
; Rd  M(X) ; X es una variable en memoria
; Rd  M(m) ; m es una dirección en memoria
; M(X)  Rf ; X es una variable en memoria
; M(m)  Rf ; m es una dirección en memoria
; Rd  Rf + Rd
; Rd  Rf - Rd
; Rd  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)
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 .
Un operando (Acumulador) :
LOAD B
; Acc= (B)
MULT C
; Acc= (A)*(C)
ADD A
; Acc= (Acc) + (A)
STORE D
; D = (Acc)
Máquina de Pila:
PUSH A
PUSH B
PUSH C
MUL
ADD
POP D
Página 20
; calcula B*C
; suma A a B*C
; salva resultado
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:
Ortogonalidad:
Eficiencia:
3.1.2
El conjunto de instrucciones debe permitir ejecutar todas las operaciones
que es capaz de realizar el procesador.
Debe permitir que todas las operaciones se realicen con todos los tipos de
datos que aplican para la misma.
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.
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
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 .
salto que permiten modificar el PC. Los Operandos pueden especificarse de forma explícita o implícita
(cuando 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
Propósito General
Propósito
Específico
Privilegiadas
Categoría
Ejemplos
Mover datos entre operandos
( puede ser R-R, R-M).
* Cambios en los tamaños y extensión de
Signo
MOVE, LOAD,
STORE
Aritméticas
Operaciones aritméticas.
ADD, SUB, DIV,
MULT, INC, DEC
Lógicas y manejo de
bits (bitwise)
Operaciones lógicas, de comparación y
corrimiento de bits.
AND, OR
RSHIFT, NOT
De Comparación
Operaciones que comparan los valores de
los operandos. Sirven de base para las de
saltos
CMP
Control de flujo de
Programa
Permite modificar la secuencia del
programa para implementar sentencias de
selección, ciclos y llamadas a subrutinas.
JP, JR, BRN, CALL,
RET
E/S
Permite el acceso a direcciones del
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)
IN, OUT
Tratamiento de
Cadenas (Strings)
Manipulación de cadenas
COMSTR, CATSTR
Polinomios y
funciones científicas,
Vectores y Matrices
Para aplicaciones científicas. La
instrucción implementada en Hardware
acelera la ejecución. También se
consideran datos especiales como
Vectores, Listas y Matrices
Solicitud de atención de los dispositivos
de E/S y Tratamiento de condiciones
anormales del procesador
EVALUATEPOL,
VADD
Protección de Memoria, Detención del
programa, reinicio o detención del
ordenador, etc.
HALT, NOP
Interrupciones y
Excepciones
De control del
Sistema
Página 22
Uso
Transferencia
INT, Trap
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
3.1.4
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I
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
permiten decodificador rápido y control
cableado.
Muchos formatos muy complejos que
normalmente requieren unidad de control
microprogramada.
Las operaciones de cálculo son registroregistro. Instrucciones específicas de carga y
almacenamiento.
Las operaciones permiten operandos en
memoria.
Usan la mínima cantidad de modos de
direccionamiento.
Buscan permitir la máxima cantidad de modos
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)
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.
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 .
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
MD
OP2
…
OPn
VALOR(ES)
Estructura del Formato de Instrucción
3.3 CODIGOFigura
DE 2.4
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.
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
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 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.
Docente: Ing. José Díaz Chow
Página 25
A R Q U I T E C T U R A
CO
0000
…
1110
1111
O2
xxxxxx
…
xxxxxx
D E
M Á Q U I N A S
O1
xxxxxx
…
xxxxxx
1111 000000
… …
…
1111 011101
xxxxxx
30
xxxxxx
C O M P U T A D O R A S
I I .
15 inst. de 2 operandos
inst. de 1 operando
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
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 más 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
Instrucciones
Contador de Frecuencia Relativo
LOAD
STO
ADD
AND
NOT
RSHIFT
JUMP
HALT
1/4
1/4
1/8
1/8
1/16
1/16
1/16
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)
Página 26
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
LOAD STO
¼
D E
ADD
¼
M Á Q U I N A S
AND
NOT
1/8
1/16
1/8
C O M P U T A D O R A S
I I
RSHIFT JUMP
HALT
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”. Ver el
resultado de este proceso en la 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.
LOAD
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
a)
HALT
1/16
1/8
LOAD
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
1/8
b)
STO
ADD
AND
NOT
RSH
JUMP
1/4
1/4
1/8
1/8
1/16
1/16
1/16
1
0
1
0
1
1/4
1/16
1/8
LOAD
1/2
HALT
0
HALT
1/16
1
1/8
0
1/8
1
0
1/4
1
0
1/2
0
1
c)
1/2
Docente: Ing. José Díaz Chow
Página 27
A R Q U I T E C T U R A
D E
MNemónico
LOAD
STO
ADD
NOT
RSHIFT
JUMP
HALT
M Á Q U I N A S
CO
C O M P U T A D O R A S
I I .
Camino desde la Raíz.
11
10
011
010
0010
0001
0000
izquierda-izquierda
izquierda-derecha
der-izq-izq
der—izq—der
der—der—izq—der
der—der—der—izq
der—der—der—der
Se puede apreciar que el procedimiento de Huffman codifica con menos bits las instrucciones más
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 fórmula:
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 fórmula al esquema de codificación de bloque donde cada instrucción será codificada
con tres bits:
L (CO)med
= 3(1/4 +1/4) + 3(1/8 + 1/8) +3(1/16 + 1/16 + 1/16 + 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)]
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
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%.
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.
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
Palabra de instrucción
CO
MD1
V1
C O M P U T A D O R A S
I I .
Palabra complementaria de V
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:
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
Página 30
V = # ( operando )
Ventajas:
Desventajas:
Uso:
Forma sencilla de obtención del operando.
Sólo permite operandos fuente y valores constantes.
Inicialización de variables y declaración de constantes.
Ejemplo:
MOVE R10, 9
; R10  9
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.5.2 Modo Directo o 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
Modo de direccionamiento
Directo o Directo de Registro
r
BANCO DE
REGISTROS DEL
PROCESADOR
Dirección
Efectiva
Ventajas:
OPERANDO
Rr
Uso:
Rapidez de acceso. El operando ya está dentro del procesador.
Pocos bits para codificar los registros.
Si se necesita estar intercambiando el valor constantemente con una variable en
Memoria
Almacenar datos que se utilizan con mucha frecuencia.
Ejemplo:
MOVE R10, R1
Desventajas:
: 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
Ventajas:
Desventajas:
Uso:
Ejemplo:
Docente: Ing. José Díaz Chow
OPERANDO
Permite acceder a cualquier dirección de memoria.
No se requiere de cálculo adicional.
Requiere muchos bits para direccionamiento.
Requiere soporte en uso de estructuras de datos y programas portables.
Saltos absolutos, Rutinas fijas (sistema), paso de parámetros, puertos de E/S.
MOV R10, (1800)
MOV R10, A
; R10  M(1800)
; R10  M(A)
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 .
3.5.4 Modo Indirecto de Registro
El registro r contiene la dirección efectiva del operando.
MD
Modo de direccionamiento
Indirecto de Registro
r
BANCO DE
REGISTROS DEL
PROCESADOR
MEMORIA
Rr
Dirección Efectiva
OPERANDO
Se pueden dar diferentes niveles de Indirección, según la arquitectura. Como ejercicio visualice el
diagrama gráfico para doble indirección.
Ventajas:
Uso:
Permite acceder a cualquier dirección de memoria usando pocos bits.
Flexibiliza el uso punteros, vectores y estructuras.
Requiere que se cargue la dirección al registro.
Limita el uso de registros para operandos.
Datos estructurados y paso de parámetros a subrutinas.
Ejemplo:
MOV R10, (R1)
Desventajas:
; 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:
Página 32
MOV R10, ((1800))
; R10  M( M(1800))
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.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, 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
Rr
r
Modo de direccionamiento
de Autoincremento
BANCO DE
REGISTROS DEL
PROCESADOR
MEMORIA
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:
Desventajas:
Acceso eficiente a elementos consecutivos en arreglos.
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.
1
EA: Effective Address, Dirección Efectiva.
Docente: Ing. José Díaz Chow
Página 33
A R Q U I T E C T U R A
MD
r
D E
M Á Q U I N A S
MEMORIA
OPERANDO
A
Rr
Operando
Ejemplo:
I I .
Modo de direccionamiento
de Autodecremento
BANCO DE
REGISTROS DEL
PROCESADOR
Rr
C O M P U T A D O R A S
Celda A - k
Celda A
= [ Rr ] - k
= M( [ Rr ] )
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 Indizado o De Índice
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.
Página 34
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
MD
r
D E
M Á Q U I N A S
I I
Modo de direccionamiento de
Indice
@base
BANCO DE
REGISTROS DEL
PROCESADOR
Rr
C O M P U T A D O R A S
MEMORIA
+
Indice
OPERANDO
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:
; R0  M(1800 + [R1])
; R0  M([R5] + [R1])
MOV R0, 1800(R1)
MOV R0, R5(R1)
3.5.10 Modo 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
BANCO DE
REGISTROS DEL
PROCESADOR
Rr
Dirección Base
Modo de direccionamiento
Base + Desplazamiento
MEMORIA
desplazamiento
Base
+
OPERANDO
Operando = M( [ Rr ] + desplazamiento )
Docente: Ing. José Díaz Chow
Página 35
A R Q U I T E C T U R A
Ventajas:
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I .
Desventajas:
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.
Precisa cargar y actualizar la base.
Ejemplo:
MOV R0, R1(10)
; R0  M([R1] +10)
3.5.11 Modo Base-Desplazamiento con Escalación
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
PC
próxima instrucción
originalmente
PC = [PC] + desplazamiento
Ventajas:
Nota:
hacia atrás.
Permite implementar ciclos fácilmente.
Hay que tomar en cuenta el posible uso de números negativos cuando son saltos
Por lo general, éstos se implementan en complemento a 2.
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
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.
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
MD 1
V1
MD 2
V2
Formato de la instrucción
CO
MD1
V1
MD2
V2
0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1
Indirecto en 0 =
modo directo
CO de ADD
Modo de
Registro
Bit de indirecto en 1 > Modo indirecto
000 = 0
-> R0
001 = 1
-> 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.
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 .
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 base decimal puede representarse en
base binaria. 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 Hexadecimal y 3 para Octal) con lo cual es más fácil manipular y convertir números a binario y
viceversa.
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.2.1 Representación de enteros con signo.
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
SIGNO-MAGNITUD
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:
A  Valor( N )  (1)
[ MSB]

0
a r
i n2
i
i
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.
Docente: Ing. José Díaz Chow
Página 39
A R Q U I T E C T U R A
-128
D E
64
M Á Q U I N A S
32
16
8
C O M P U T A D O R A S
4
2
I I .
1
Figura 4.1. Caja de valores para un número con signo de 8 bits
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.
En sistemas simétricos (igual cantidad de posiciones enteras positivas y negativas) se cumple que:
M
2n
2
y
V(N) = A - M
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 unidad de punto flotante (FPU por sus
siglas en inglés) que se implementa interna al procesador.
El problema para realizar cálculos con estos números inicia desde su representación. Son difíciles de
representar por cuanto en su forma decimal se dificulta saber dónde está la coma o punto decimal. Para
evitar ese problema, se maneja el número como si tuviera siempre el punto decimal después del primer dígito
significativo. Al proceso de transformación de cualquier número real a esta representación se le denomina
Normalización, y del número resultante se dice que está normalizado. Por ejemplo:
Consideremos el número 13.56. Este no está normalizado porque su punto decimal está después
del segundo dígito significativo. Para que esté normalizado se debe expresar como 1.356 x 101.
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
Eso significa que se debe recurrir a la notación científica para poder representar estos números normalizados.
La notación en punto flotante es una representación de números reales en forma normalizada que se basa
en la notación científica de la siguiente manera: valor = mantisa*BASEexponente. Se denomina mantisa o
significado a la cadena de dígitos significativos del número.
La representación en punto flotante en binario más aceptada actualmente es el formato que propone el
estándar 754 de la IEEE. Éste en realidad define dos formatos: uno en simple precisión de 32 bits y otro en
doble precisión de 64 bits. El formato estructura la tira de bits (de 32 o 64 bits), en tres campos lógicos: signo,
mantisa y exponente. La base está predefinida (binaria). La mantisa y el signo se almacenan en
representación signo-magnitud y el exponente en exceso a m.
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
4.2.3 Otros Tipos de Datos:
4.2.3.1
CARACTERES O DATOS ALFANUMÉRICOS
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
ESTRUCTURAS:
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.
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.3 LA UNIDAD ARITMETICA
La unidad de ejecución debe poder realizar tanto operaciones aritméticas como lógicas. La suma es la
operación aritmética más importante. Esta operación es muy versátil, ya que de ella pueden derivar el resto de
operaciones aritméticas fundamentales. Por ejemplo, la resta de A - B es equivalente a sumar el valor de A más
el complemento a dos de B (recordemos la definición matemática de resta o sustracción: se suma al minuendo el
inverso aditivo del sustraendo). Asimismo, la multiplicación no es más que una acumulación de sumas sucesivas. El
producto C * A puede ser obtenido sumando A, C veces, o viceversa. Por ello, comprender el proceso para la
implementación de un sumador es clave para comprender cómo 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
Si = xi  yi  ci
Por otro lado:
ci+1 = xiyici + xiyici + xiyici + xiyici
ci+1 = yici + xici + xiyi
Página 42
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
M Á Q U I N A S
C O M P U T A D O R A S
Yi
Xi
Ci+1
D E
Ci
Sumador
Completo
Si
Diagrama de bloque de un
Sumador Completo de 1 bit
I I
Xi
Yi
Ci
Si
Ci+1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
0
0
1
0
1
1
1
Tabla de Verdad del
Sumador Completo
Xi '
Xi
Yi '
Yi
Xi '
Xi
Ci+1
Yi
Ci
Ci
Xi
Yi
Yi '
Si = Xi
Yi
Ci
Ci
Xi
Implementación del Sumador
Yi
Figura 4.3 Sumador completo de 1 bit.
Se pueden 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.
X3
Y3
FA
X2
C3
Y2
FA
X1
C2
Y1
FA
X0
C1
X3 Y3 X2 Y2 X1 Y1 X0 Y0
Y0
FA
C0
C4
S3
C4
S3
S2
S1
S0
C0
CPA
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.
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 .
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 más
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:
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
Página 44
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
Este resultado muestra
que C1, C2, C3 y C4 pueden ser
generados directamente de C0 y
las entradas. Por esta razón,
estas ecuaciones son llamadas
Ecuaciones de Acarreo
Adelantado. Estas ecuaciones
pueden implementarse en un
bloque hardware y alimentar
con el las entradas de los carry
del sumador completo
obteniendo un CLA. La figura 4.5
muestra la implementación de
tal CLA.
D E
M Á Q U I N A S
X3
Y3
C O M P U T A D O R A S
X2
Y2
X1
I I
Y1
X0
C0
Y0
C4
Carry Look Ahead Logic (o Calculator)
C3
C1
C2
C0
FA
FA
FA
FA
S3
S2
S1
S0
Figura 4.5. Un Sumador de acarreo adelantado o CLA de 4 bits.
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
CLA
Y
16
F
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 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
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 .
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
implementación de una
unidad lógica que ofrece dos
simples operaciones AND y
OR., tomando como base un
integrado de 16 compuertas
AND y otro de 16 OR.
X
16
16
Y
AND
MUX
G
16
OR
16
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.
X
Y
16
16
Unidad
Aritmética
F
MUX
Z
16
16
Unidad
Lógica
G
S0
S1
Figura 4.8 Diseño a Bloques de la ALU
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
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
Multiplicación
División
Algoritmo / Técnica de implementación
Algoritmo de Braun
Algoritmos basados en CSA y árboles de Wallace
Algoritmo de Booth
Usar una ROM como tabla
Algoritmo Restoring Divide
Algoritmo Non-Restoring Divide
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
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
0 0 0 0 1 0 11
Después del desplazamiento
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.
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 .
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).
Entradas Externas
Entradas Externas
s1
s0
0
1
2
3
MUX
CLK
s1
s0
CLK
0
1
2
3
s1
s0
s1
s0
S
CLK
CLK
CLR
CLR
D
CLR
CLR
Q
qi
Salida
qi
Salida
Organización interna de la celda
básica S
Diagrama a bloque de la celda
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.
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
X3
C O M P U T A D O R A S
X2
I I
X1
X0
R
(Entrada
derecha)
L
(Entrada
izquierda)
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
s1
s1
s0
s0
CLK
CLR
S3
S2
S1
S0
CLK
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.
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
CLK
CLR Q'
Diagrama de bloque del FF
tipo D
CLR
0
1
1
D
X
0
1
Q
0
0
1
Tabla de Funciones
del FF tipo D
S1
X
0
0
1
1
S0
X
0
1
0
1
CLR CLK
0
X
1
1
1
1
Operación
Clear GPR
Ninguna
Despl. Der.
Despl. Izq.
Carga Paral.
Tabla de Funciones del GPR de 4 bits
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 está
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 emplean este tipo avanzado de registros.
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 .
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
ejemplo, los registros), requiere de un reloj que genere
una base de tiempo para activar o desactivar estas
señales en cada pulso de reloj. El conjunto de acciones
u operaciones de control que la unidad de control
realiza en un mismo pulso de reloj se denomina Paso
de control.
DECODIFICADOR
Bus
de
Dirección
IR
R0
PC
MAR
. . .
Para poder entender el funcionamiento de la unidad
de control, requerimos definir a detalle la estructura
del procesador: ALU, registros de trabajo y de
propósito general, así como la estructura de
interconexión de los componentes dentro del
procesador. Para efectos didácticos vamos a recurrir
nuevamente a nuestro modelo sencillo de procesador
con un sólo bus común, que se muestra en la figura
5.1. Nótese la existencia de registros auxiliares de
trabajo como Y, Z y SOURCE que son inaccesibles al
programador y se usan para almacenar datos
temporalmente entre pasos diferentes de control.
CU
MDR
Rn-1
Y
source
MEMORIA
Bus
de
Datos
Y
Líneas
de
Control
ALU
X
SP
ALU
Z
Figura 5.1. Organización simple de Procesador con bus único
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,
PC
R0
para lo cual emplearía las líneas de activación de tales
x
x
compuertas. Por ejemplo, para un registro Ri, La compuerta de
entrada se activa mediante la señal Riin. Supongamos que
PC
R0
nuestras compuertas se activan con lógica positiva, entonces, si
x
x
esta señal Riin está en 0 lógico, la compuerta está bloqueada o
PC
R0
R1
en alta impedancia, evitando cambios en el contenido del
Y
x
x
registro, pero cuando está en 1 lógico, permite que el contenido
del bus se cargue al registro Ri. La compuerta de salida es
R1
Y
activada por la señal Riout, Si esta señal está en un 0 lógico, aísla
x
la salida del registro del bus, pero si está en 1 lógico escribe el
R1
R2
contenido de Ri en el bus.
x
X
Y
in
in
out
out
in
in
out
in
Es clave comprender que no es permitido activar dos
compuertas de salida en el mismo instante de tiempo (o pulso
de reloj del procesador), pues no tiene sentido, lo que
lograríamos es corromper los datos como hemos expuesto
anteriormente. Por otro lado, sí podemos “copiar” el contenido
del bus en diferentes registros a la vez, es decir, podemos
activar las señales Riin de varios registros en un mismo paso de
control, pero sólo una señal Riout sobre un mismo bus.
ALU
Zin
x
R2
x
R2out
Z
Zout
x
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
1
Acciones
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
Paso
Acciones
1
2
3
R2out, Yin
R1out, ADD, Zin
Zout, R1in
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I .
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 operando fuente y la tercera el 2000 del
operando 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
6 Bits
2 Bits
8 Bits
CO
MD1
V
I I
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
2
3
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
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
2
3
4
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
MDRout, IRin
R1out, SOURCEin
5
6
7
8
R2out, Yin
SOURCEout, ADD, Zin
Zout, R2in
End
Secuencia de Control para la instruccion de ADD (R1), R2
Paso
Acción u Operaciones de Control
1
2
3
4
5
6
6
7
8
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
MDRout, IRin
R1out, MARin, READ, WMFC
MDRout, SOURCEin
R2out, Yin
SOURCEout, ADD, Zin
Zout, R2in
End
Un tipo de instrucción especial son las de salto. Las de
salto condicional y relativo, son especialmente complicadas.
Veamos unos ejemplos de nuestro procesador modelo: Br o Salto
relativo incondicional. Esta instrucción tiene un formato como el
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
significativos del IR, que se denota como campo de bits como
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
que se requiere para permitir llevar al bus de 16 bits los 8 lsb del
IR.
IR
7
0
8
Sign
Extension
IRout
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
2
3
4
5
6
7
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
MDRout, IRin
PCout, Yin
IR(V)out, ADD, Zin
Zout, PCin
End
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 .
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
IF N Then
END
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
Actual
Modo
Anterior
Banderas de Condición
Prioridad
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
“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.
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
5.4 UNIDAD DE CONTROL FIJO
...
IR
...
El indicador del paso de control actual
se puede implementar mediante un contador
de los pulsos del reloj base que se restablezca
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.
BANDERAS DE
CONDICION
...
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
CLCK
DE CONTROL
función de las banderas y códigos de
condición.
...
CODIGOS DE
CONDICION
DECODIFICADOR /
CODIFICADOR
...
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 de control.
Si separamos estas funciones,
podemos especificar
DE LA CU
mejor el diseño de la CU en función de la función principal: generación de las señales de control para cada
paso de cada instrucción. En este enfoque más detallado, se hace evidente la necesidad de una señal de
reset del contador de paso que no es más que la señal End y la necesidad de otra señal de habilitación de
conteo que llamaremos RUN. Esta última señal puede ser muy útil en la implementación de la espera
efectiva de MFC. Cuando RUN está en 1, el contador incrementa, en caso contrario no avanza. La figura 5.7
muestra en detalle esta organización.
CONTADOR DE
PASO
DE CONTROL
CLCK
...
DECODIFICADOR DE PASO
...
T1 T2
Tn
I1
DECODIFICADOR DE
INSTRUCCIONES
...
BANDERAS DE
CONDICION
CODIGOS DE
CONDICION
CODIFICADOR
Im
...
IR
...
I3
...
I2
...
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:
RUN
END
Señales de Control
Figura 5.7 Organización detallada de la CU
Zin = T1 + ADD.T6 + BRN.T5 + ....
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 .
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 de
control END
Generación de la señal
de control Zin
N
T5
T8
ADD
JR
T7
...
...
Zin
BRN
T7
...
T1
T6
BR
N
T4
...
ADD
END
Figura 5.8 Implementación de algunas señales de control
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 me permite implementar
estas condiciones, como el lector puede fácilmente comprobar.
ADD
Generación de la
T4
...
T2
señal RUN
...
Sin embargo, debido a la asincronía entre 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 sincronizar la señal MFC para
que “espere” al reloj base, lo cual se logra anexando un
elemento sincrónico como un FF tipo D. Esta solución se
muestra en la figura 5.11
WMFC
RUN
MFC
Figura 5.9 Implementación de WMFC y RUN.
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
Sincronización de MFC
con el Reloj Base
MCLK
WMFC
CLK
WMFC
RUN
MFC
MFC
D
Q
RELOJ BASE
RUN
READ
T1
T2
T3
Temporización de las señales de control durante la traída de las instrucciones
Figura 5.10 Necesidad de sincronización de MFC.
Figura 5.11 Sincronización MFC con el reloj base
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.
PLA ( PROGRAMABLE LOGIC ARRAY )
...
ARREGLO
AND
...
IR
...
CONTADOR DE
PASO DE
CONTROL
...
BANDERAS Y
CODIGOS DE
CONDICION
ARREGLO
OR
...
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.
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 .
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.
Paso
PCin
PCout
Yin
1
2
0
1
1
0
0
0
…
…
…
…
MARi
READ
MDRout
IRin
ClrY
SetC
ADD
Zin
Zout
R1in
R1out
R2in
R2out
WMFC
END
…
1
0
1
0
0
0
0
0
1
0
1
0
1
0
1
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
n
…
Figura 5.13 Correspondencia Señal de control-bit de cw
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.
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
PCin
PCout
Yin
MARin
READ
MDRout
IRin
CLEAR Y
SET C
ADD
Zin
Zout
R1in
R1out
R2in
R2out
SOURCEin
SOURCEout
WMFC
End
La figura a continuación muestra el microprograma para la instrucción ADD R1, R2.
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
CW
…
1
2
3
4
5
6
7
8
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
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.
El secuenciamiento entre instrucciones se puede lograr
de varias formas, la más sencilla es que éstas estén almacenadas
secuencialmente en la memoria el PC tenga la capacidad de
auto-incrementarse. Otra técnica muy empleada consiste en
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
secuenciador de microinstrucciones.
Muchas instrucciones, sin embargo, requieren verificar
códigos y banderas de condición, así como modificar el flujo del
programa. Entonces, debe agregarse a las Instrucciones la
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 flujo de
microinstrucciones
se
denomina
microrramificación
(ramificación o Branch).
Docente: Ing. José Díaz Chow
IR
Generador
de Dirección
inicial
PC
Memoria del
Programa
cw
Figura 5.15 Secuenciador de microinstrucciones
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 .
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:
IR
Generador de
Dirección
inicial y de
ramificación
Banderas de
Condición
Códigos de
Condición
PC
Memoria del
Programa
cw
Figura 5.16 Secuenciador de microinstrucciones más detallado
Antes
de
secuenciador, necesitamos definir algunas reglas:
pasar a analizar la operación del

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:
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
MicroPrograma Para la Instrucción BRN
Dir
MicroInstrucción
0
1
2
3
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
MDRout, IRin
Branch Dirección Inicial del Prog. adecuado
20
21
22
23
24
Si N entoncesBranch a 24
PCout, Yin
IR(V)out, ADD, Zin
Zout, PCin
End
Es importante notar que la
PC
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
0 0 0 0 0 0 0 1 0 0 0 1
implementado en PLA, en la práctica en esta
Instrucción lo que ocurre es PC = 20. También la
11 10 9
8
7
6
5
4
3
2
1
0
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
N
N
logra modificando los bits del PC selectivamente.
La figura 5.17 nos puede ayudar a comprender
Figura 5.17. Modificación del PC en BRN
esto mejor. Durante la ejecución de la instrucción
20, el PC vale 21 pues se auto incrementó. Supongamos que el PC es de 12 bits y que se codifica en octal
(3 bits por dígito), entonces el valor 21 del PC, se codificaría 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 se
logra estableciendo el valor del bit 2 PC a ~N y el bit 0 del PC a N (PC2  ~N, PC0  N) como muestra
la figura 5.17.
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.
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 .
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
y de ramificación
IR
Códigos de
Condición
INC
PC
cw
CLK
D
WMFC
Q'
Memoria del
Programa
Generador de
Señales de
Control
...
MFC
Señales de
Control
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 de
operandos, sin embarg
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
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
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
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 BR in, BRout para su
manipulación.
F1
(4 bits)
F2
(3 bits)
000:
Nada
001: PCin
010: IRin
011: Zin
100: R0in
101: R1in
110: R2in
111: R3in
0000:Nada
0001: PCout
0010: MDRout
0011: Zout
0100: R0out
0101: R1out
0110: R2out
0111: R3out
1000: SOURCEout
1001: DESTINEout
1010: TMPout
1011: IR(V)out
F7
(1 bit)
…
F3
(2 bits)
F4
(2 bits)
F5
(4 bits)
F6
(2 bits)
00: Nada
00: Nada
0000: Add
00: Nada
01: MARin
10: MDRin
11: TEMPin
01: Yin
10: SOURCEin
11: DESTINEin
0001: Sub
0010: Div
0011: Mult
0100: And
0101: Or
0110: Xor
0111: …
1000: …
1001: …
1010: …
1011: …
01: READ
10: WRITE
F8
(1 bit)
F9
(1 bit)
F10
(1 bit)
0: Nada
0: C = 0
0: Nada
0: Continue
1: Clear Y
1: C = 1
1: WMFC
1: End
...
…
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.
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 .
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
CO
13
12
11
10
MD1
9
8
6
7
5
R1
4
MD2
3
2
0
1
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.
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
START
000
MAR <- [PC]; READ;
Z <- [PC] + 1
001
PC <- [Z]
002
PLA, IR <- [MDR]
PC, AR <-[PLA]

003
161
MAR <- [PC]; READ;
Z <- [PC]+1
141
162
142
MAR, Rsrc <- [Z];
READ
PC <- [Z]
121
MAR <- [Rsrc];READ;
Z <-[Rsrc] + 1
Z <- [Rsrc] - 1
111
MAR <- [Rsrc]; READ
122
Rsrc <- [Z]
163
Y <- [MDR]
164
Z <- [Y] + [Rsrc]
165
MAR <- [Z]; READ
166
MAR <- [MDR]; READ
167
101
SOURCE <- [MDR]
SOURCE <- [Rsrc]
170

200
261
MAR <- [PC]; READ;
Z <- [PC]+1
241
262
242
MAR, Rdst <- [Z];
READ
PC <- [Z]
221
MAR <- [Rdst];READ;
Z <-[Rdst] + 1
Z <- [Rdst] - 1
211
MAR <- [Rdst]; READ
222
Rdst <- [Z]
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
MDR <- [Z]; WRITE
273
Rdst <- [Z]
STOP
Figura 5.20 Diagrama de flujo de la Instrucción ADD
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 .
Haciendo un recuento del tipo de micro ramificaciones tenemos:
1.
2.
3.
4.
Ramificaciones de dirección amplia ( Selección de dirección inicial)
Ramificaciones de asignación de PC ( Modifican el PC: PC  nn)
Ramificaciones de modificación de bits del PC (PCi  [0|1] )
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
6
7
5
4
3
2
0
1
0 1 1 0 0 1 0 1 1 1 0 0 0 0 1 1
MD1
CO
R1
MD2
R2
Figura 5.21 Codificación de Instrucción ADD (R7)+, R3
Dirección
MicroInstrucción
(octal)
000
001
PCout, MARin, READ, Clear Y, Set C, ADD, Zin
Zout, PCin, WMFC
002
MDRout, IRin
003
121
Br {PC[PLA]; PC 101, PC5,4 [IR11,10], PC3  [IR11].[IR10]. [IR9]}
[IR
3]}121[IR
10].[IR
9]} Y, Set C, ADD, Zin
R7out
, MARin11, ].[IR
READ,
Clear
122
Zout, R7in
123
166
Br {PC  166; PC0  [ IR9 ]}, WMFC
MDRout, MARin READ, WMFC
167
MDRout, SOURCEin
170
Br {PC  201, PC5,4 [IR5,4], PC3  [IR5] . [IR4] . [IR3]}
R3out, Yin
201
202
270
271
273
Br {PC  270}
SOURCEout, ADD, Zin
Br {PC  272; PC0  [IR5] . [IR4] . [IR3]}
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
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
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 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.
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 .
5 EL SISTEMA DE MEMORIA
5.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.
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
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 más usadas.
5.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
 Óptica,
 Magneto-Óptica (MO)
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 .
 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.
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
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
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-flexibilidadcoste. 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.
5.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
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 .
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.
Temporización y
control
Contador
de
refresco
Buffer de
direccione
s de filas
Buffer de
direccione
s de
columnas
Decodificador
de
filas
Matriz
de celdas de
memoria
Amplificadores
de lectura
y puerto de E/S
Descodificador
de columnas
Página 76
Buffer
de entrada
de datos
Buffer
de salida
de datos
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
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.
5.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 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.
5.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).
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 .
5.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.
5.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.
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í.
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
5.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é.
5.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.
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 .
5.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é:
5.5.3.1
-
MAPEO DIRECTO:
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,...
-
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.
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
Cache
Etiqueta
Dirección de memoria
Etiqueta
Línea
I I
Memoria
principal
Datos
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é.
 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.
5.5.3.2
CORRESPONDENCIA ASOCIATIVA:
-
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.
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 .
 Flexibilidad.
-
Desventajas:
 Coste en la implementación por uso de memorias asociativas
Memoria principal
Etiqueta
Dirección de memoria
Etiqueta
Datos
Palabra
Comparación
(Acierto de cache)
(Fallo de cache)
5.5.3.3
CORRESPONDENCIA DE CONJUNTOS ASOCIATIVOS:
-
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.
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
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
Dirección de memoria
Etiqueta
Conjunto
Datos
Palabra
Conjunto 0
Comparación
Conjunto 1
(Acierto de cache)
(Fallo de cache)
5.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).
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 .
5.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.
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
6 EL SISTEMA DE ENTRADA-SALIDA
6.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.
6.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.
6.2.1 Interconexión con Buses
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
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 .
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
Entrada/
Salida
Memoria
Bus de Datos
Figura 1. Arquitectura de buses
Figura 7.2.1. Arquitectura de Buses de la Computadora
La anchura del
datos define cuántas palabras de memoria pueden transferirse de una vez.
bus
de
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.
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
CPU +
Cache L1
Controlador
de vídeo
"Bus" AGP
Controladores del sistema
(Chipset)
Controlador de Memoria y
Puente PCI
C O M P U T A D O R A S
I I
Cache L2
Memoria
Principal
Bus del Sistema
Bus PCI
SCSI
Dispositiv os IDE
CD
DD
DD
DD
Controlador IDE
Controlador de DMA
Puente PCI a ISA
LAN
Slot
USB
Bus ISA
Slot
Slot
LPT
Com 1
Disquete
Super
I/O
Com 2
Teclado
Ratón PS/2
Figura 2. Jerarquía de buses de E/S de la PC moderna
6.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.
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 .
6.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.
6.2.3.1
BUS ISA:
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.
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
Características Eléctricas:
+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)
6.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.
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 .
Las líneas de comando (C/BE3 to C/BE0) indican el tipo de transferencia durante la fase de dirección:
C/BE
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Command Type
Interrupt Acknowledge
Special Cycle
I/O Read
I/O Write
reserved
reserved
Memory Read
Memory Write
reserved
reserved
Configuration Read
Configuration Write
Multiple Memory Read
Dual Address Cycle
Memory-Read Line
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.
6.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.
6.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
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
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)
6.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.
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
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 .
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.
6.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.
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
Interfaz con el bus
del sistema
I I
Interfaz con el
dispositivo externo
Registro de datos
Líneas de
datos
Datos
Lógica de
interfaz
con el
dispositivo
externo
Datos
..
Registro de Estado/Control
Líneas de
direcciones
Lógica de
E/S
Líneas de
Control
Lógica de
interfaz
con el
dispositivo
externo
..
Estado
Control
Estado
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).
6.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.
6.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.
6.5.2 Diseño Simple del Sistema de Interrupciones
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 .
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.
6.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:
6.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.
6.5.3.2
USO DE IDS E INTERRUPCIONES VECTORIZADAS:
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
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
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
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.
6.5.4 Concurrencia de Múltiples Interrupciones:
6.5.4.1
PRIORIDADES
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
INTA1
Circuito
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
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 .
(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.

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
INTA
Dispositivo 1
Dispositivo 2
Dispositivo n
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
Prioridad
CPU
INTA 1
Dispositivo
Dispositivo
INTR p
INTA p
Dispositivo
Dispositivo
Figura 7. Árbitro Paralelo-Serie o multinivel
6.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
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
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:
Comienza ISR
Desabilitar interrupciones
Codigo de la ISR
Habilitar interrupciones
Finaliza ISR
6.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.
6.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).
6.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.
6.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.
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 .
Asignaciones de las interrupciones en la IBM PC XT/AT
Interrupción
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
Indice del vector
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
70h
71h
72h
73h
74h
75h
76h
77h
Acción
PC
Pulso del reloj (18.2 por segundo)
Entrada al teclado
Reservado para interrupciones en cascada
COM2
COM1
Controlador de disco fijo
Controlador de disco flexible
Controlador de impresora
Reloj de tiempo real
Redirección de cascada
Reservado
Reservado
Dispositivo auxiliar
Excepción del coprocesador matemático
Controlador de disco fijo
Reservado
XT/AT
XT/AT
XT/AT
XT/AT
XT/AT
XT/AT
XT/AT
XT/AT
AT
AT
AT
AT
AT
AT
AT
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*
INTA*
INT
Esclavo 8259A
Control
IRQ8
IRQ10
IRQ12
IRQ14
IRQ9
IRQ11
IRQ13
IRQ15
INT
Master 8259A
IRQ0
IRQ2
IRQ4
IRQ6
IRQ1
IRQ3
IRQ5
IRQ7
Bus ISA (AT)
Figura 8. Conexión en cascada de dos PIC 8259A
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
Figura 9. Organización Interna del Intel PIC 8259A
6.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.
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 .
6.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.
6.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:
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 10. Modos del DMA
6.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:
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 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 entradasalida (I/O Bus)
Figura 13. DMAC con bus de E/S.
6.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.
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 14. Sincronización de múltiples DMACs.
6.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:
6.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.
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 .
Figura 15. Canal Selector.
6.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.
6.7.3 Canal Multiplexado por bloques:
Este canal multiplexado siempre opera en modo ráfaga.
Figura 16. Canal multiplexor
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
6.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).
6.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).
6.8.1.1
INTERFAZ SERIE RS-232
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.

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
#define COM2
#define COM3
0
1
2
Docente: Ing. José Díaz Chow
Página 105
A R Q U I T E C T U R A
#define COM4
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I .
3
/* some HandSk Signal */
#define
#define
#define
#define
DATA_READY
OVERRUN_ERR
PARITY_ERR
FRAME_ERR
0x100
0x200
0x400
0x800
#define
#define
#define
#define
BREAK_DONE
HOLD_EMPTY
SHIFT_EMPTY
TIME_OUT
0x1000
0x2000
0x4000
0x8000
/* ---------------------- */
#define
#define
#define
#define
CHGE_CLR2S
CHGE_DS_RDY
TRAIL_ERING
CHGE_RX_LIN
0x1
0x2
0x4
0x8
#define
#define
#define
#define
CLR_2_SEND
DATA_SET_RDY
RING_IND
RX_LINE
0x10
0x20
0x40
0x80
/* Commands
#define
#define
#define
#define
/*
CONFIG
WRITE
READ
STATUS
*/
0
1
2
3
Comm Parameters: n Bits, stop Bits, Parity, Baud Rate */
#define BITS_7
#define BITS_8
0x02
0x03
#define STOP_BIT_1
#define STOP_BIT_2
0x00
0x04
#define PARITY_NONE
#define PARITY_ODD
#define PARITY_EVEN
0x00
0x08
0x18
#define
#define
#define
#define
#define
#define
#define
#define
0x00
0x20
0x40
0x60
0x80
0xA0
0xC0
0xE0
BAUD_110
BAUD_150
BAUD_300
BAUD_600
BAUD_1200
BAUD_2400
BAUD_4800
BAUD_9600
Archivo: TERMINAL.C ( Programa simple de comunicación PC-PC)
#include
#include
#define
#define
#define
"com.h"
<conio.h>
CRt 13
NLn 10
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);
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
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();
}
}
}

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
Receive Data
Transmit Data
Data Terminal Ready
System Ground
Data Set Ready + Carrier Detect
Docente: Ing. José Díaz Chow
2
3
4
5
6+1
3
2
6+1
5
4
D-Sub 9
Transmit Data
Receive Data
Data Set Ready + Carrier Detect
System Ground
Data Terminal Ready
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 .
Request to Send
Clear to Send
7
8
8
7
Clear to Send
Request to Send
D-Sub 9
Receive Data
Transmit Data
Data Terminal Ready
System Ground
Data Set Ready + Carrier Detect
Request to Send
Clear to Send
2
3
4
5
6+1
7
8
2
3
6+8
7
20
5
4
D-Sub 25
Transmit Data
Receive Data
Data Set Ready + Carrier Detect
System Ground
Data Terminal Ready
Clear to Send
Request to Send
6.8.1.2
INTERFAZ USB:
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.
Pin
Página 108
Nombre
Color de cable
Descripción
1
VCC
Rojo
+5 V
2
D−
Blanco
Data −
3
D+
Verde
Data +
Docente: Ing. José Díaz Chow
A R Q U I T E C T U R A
4
GND
D E
M Á Q U I N A S
Negro
C O M P U T A D O R A S
I I
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
5 GND
Ninguno
Negro

Tipo A: conectado a tierra

Tipo B: no conectado
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
6.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.
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 .
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
Designación
LPT1
LPT2
Registros del Puerto (Datos = Dirección Base)
Datos
Estado
Control
0378H
0278H
0379H
0279H
037AH
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()
{
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++;
}
}
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
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
Figura 21. Descripción de señales y puertos de la interfaz paralela.
Docente: Ing. José Díaz Chow
Página 111
A R Q U I T E C T U R A
Página 112
D E
M Á Q U I N A S
C O M P U T A D O R A S
I I .
Docente: Ing. José Díaz Chow
Descargar