descargar

Anuncio
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 1: Introducción a la estructura de computadores
1. Objetivos de la asignatura.
2. Niveles de descripción de un computador.
3. Estructura básica de un computador convencional.
4. Evolución histórica: tecnología y arquitectura.
5. Lenguajes de descripción hardware.
1. Objetivos de la asignatura
La arquitectura de un computador está constituida por el conjunto de funcionalidades
disponibles para un programador que utiliza el lenguaje máquina, básicamente, el repertorio de
instrucciones y los elementos de memoria referenciados desde él, es decir, los registros
generales y la memoria principal. Las funcionalidades de una arquitectura se pueden conseguir
con diferentes organizaciones internas o estructuras, diferenciándose unas de otras
fundamentalmente en los parámetros de rendimiento y el coste. Finalmente, la estructura de un
computador se puede implementar con diferentes tecnologías, siendo nuevamente el coste y el
rendimiento los elementos diferenciales. Arquitectura, estructura y tecnología constituyen, pues,
tres niveles de estudio del hardware de un computador.
En esta asignatura abordaremos el estudio de la organización o estructura interna de un
computador. Para ello la materia la dividiremos en cuatro módulos. En el primero realizaremos
una introducción general a la estructura de computadores. En el segundo estudiaremos la
arquitectura del repertorio de instrucciones (ISA), arquitectura que define la interfaz hardwaresoftware de la máquina. En el tercero veremos toda la jerarquía de memoria de una máquina y
su gestión. Finalmente, en el cuarto estudiaremos las unidades de entrada/salida, los periféricos
y los buses de comunicación. El estudio de la unidad aritmético-lógica y la unidad de control se
aborda en la asignatura Ampliación de Estructura de Computadores.
Para situar con mayor precisión el objeto de estudio de esta asignatura analizaremos en el
apartado siguiente los diferentes niveles de descripción que se suelen contemplar en el estudio de un
computador digital.
2. Niveles de descripción de un computador
La estrategia que habitualmente se utiliza para abordar el estudio de los sistemas
complejos consiste en especificarlos a diferentes niveles de abstracción. Cada nivel se
caracteriza por:
A) Unos elementos de entrada, es decir, disponibles para el diseño en este nivel, y que
proceden del nivel inmediato inferior.
B) Unos elementos de salida, es decir, objetivos del diseño en este nivel, y destinados al
nivel inmediato superior.
C)
Una metodología de análisis y síntesis de los elementos de salida en términos de los de
entrada.
Con esta estrategia, la complejidad del sistema queda dividida, acotada y organizada en las
complejidades parciales de cada nivel, dentro de cuyos límites se puede aplicar una metodología
propia de estudio.
Al computador digital como sistema artificial complejo se le ha aplicado esta estrategia.
En nuestro caso consideraremos los siguientes niveles de abstracción dentro del estudio de un
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
computador digital:
APLICACIONES
ALGORITMOS
LENGUAJES DE ALTO NIVEL
SOFTWARE BASICO (S.O.)
ARQUITECTURA
Estructura de
Computadores
TRANFERENCI DE REGISTROS
LOGICO
ELECTRONICO
FISICO
Cada nivel se corresponde con la visión que tiene del sistema un tipo determinado de
usuario, y en cada uno podemos considerar dos procesos de estudio diferentes, el análisis y la
síntesis. El análisis parte de la implementación del sistema a un cierto nivel en términos de
elementos básicos del nivel inferior, y llega a determinar la función del mismo, es decir, su
especificación. El sentido de la síntesis es el opuesto, parte de la especificación de un sistema y
obtiene su implementación en función de los elementos básicos del nivel inferior. En la siguiente
figura hemos representado gráficamente esta relación:
Análisis
ESPECIFICACION
IMPLEMENTACION
Síntesis
Ejemplo:
a
a +b
Su m a dor
b
Sín t esis
a r r a st r e
a
a b a +b a r r a st r e
0
0
1
1
0
1
0
1
0
1
1
0
0
0
0
1
E specifica ción
An á lisis
b
a +b
a r r a st r e
Im plem en t a ción
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Comentaremos en los subapartados siguientes cada uno de estos niveles.
Nivel Físico
En el nivel físico se manipulan como elementos de entrada las formas geométricas que
se corresponden con las máscaras de difusión utilizadas en el proceso de fabricación de los
circuitos integrados del computador. Determinadas disposiciones de estas formas representan
dispositivos electrónicos concretos, tales como transistores, resistencias, etc., que son los
elementos de salida del nivel físico. En este nivel se suele utilizar como herramienta de estudio
software de manipulación gráfica con restricciones.
DD
OUT
IN
VSS
F ís ic o (s ilic io )
Nivel Electrónico
En este nivel los elementos de salida, es decir, los biestables y las puertas lógicas, se
obtiene a partir de dispositivos electrónicos (resistencias, transistores, etc.) conectados según
una determinada topología. Como metodología de estudio (análisis y síntesis) en este nivel se
utilizan técnicas cuantitativas de análisis en el plano eléctrico-temporal, fundamentalmente
ecuaciones algebraicas y diferenciales.
VD
D
IN
OUT
VS S
Circ u ito e lé c tric o
Nivel Lógico
Los elementos de entrada a este nivel son los biestables y las puertas lógicas, y los de
salida son módulos combinacionales y secuenciales tales como multiplexores, codificadores,
sumadores, registros, contadores, etc. Este nivel de estudio dispone de sus propias técnicas de
análisis y síntesis. El comportamiento de un circuito combinacional se representa con una
función lógica que admite una expresión algebraica manipulable simbólicamente dentro de un
formalismo matemático: el álgebra de conmutación (un álgebra de Boole). Para los circuitos
secuenciales se utiliza la teoría de las máquinas de estados finitos.
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
S
Q
NQ
R
Q
S
NQ
R
Circ u ito ló g ic o
Transferencia de Registros (RT)
Los elementos de entrada al nivel RT son registros, módulos combinacionales y
elementos de interconexión (buses y/o multiplexores). Los primeros mantienen el estado del
sistema, los segundos definen las transformaciones elementales del estado, y los terceros
permiten el intercambio de información entre los dos primeros. Los elementos de salida son el
conjunto de transferencias elementales posibles en la ruta de datos construida con los tres tipos
de elementos de entrada. Al contrario de lo que ocurría en los dos niveles anteriores, el nivel RT
no dispone de una herramienta propia de análisis y síntesis, aunque sí es posible utilizar los
modernos lenguajes de descripción hardware (por ejemplo VHDL) como instrumentos de
expresión precisa y estándar a este nivel.
bus
RMIC
RMICAUX
SECUENCIADOR
RI
MAR
ROM
DE
CONTROL
bus
Transferencia de registros
Arquitectura (lenguaje máquina)
Este es el nivel que separa el hardware del software. Los elementos básicos de entrada
son las transferencias y transformaciones posibles de información en la ruta de datos de un
computador. Con ellos se construyen las instrucciones máquina y su método de
secuenciamiento, es decir, lo que se denomina un lenguaje máquina. Lo más significativo de
este nivel es que con él comienzan los niveles propiamente simbólicos, es decir, niveles cuyos
componentes básicos no son objetos físicos, sino símbolos relacionados por un lenguaje, el
instrumento por excelencia del conocimiento simbólico.
El nivel de lenguaje máquina suele ser el primer nivel al que tiene acceso el usuario de
un computador, salvo si la máquina es microprogramable, en cuyo caso dispone de un nivel
intermedio que permite modificar el repertorio de instrucciones. Normalmente, el usuario no
utiliza directamente el lenguaje máquina, sino una representación simbólica del mismo conocida
como lenguaje ensamblador, que ofrece algunas prestaciones más que el puro lenguaje
máquina, como el uso de macros y la definición simbólica de constantes y posiciones de
memoria.
Este nivel queda definido por 1) el repertorio de instrucciones, con sus formatos, tipos de
direccionamiento, modos de secuenciamiento y representación de datos, y 2) la memoria y el
conjunto de registros visibles por el programador. En la actualidad cabe distinguir dos
planteamientos diferentes a la hora de definir el nivel máquina de un computador.
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
M em oria
R egistros
R epertorio d e in stru ccion es
LDR Ri, Dj
STR Ri, Dj
ADD Ri, Rj
En primer lugar está el planteamiento CISC (Complex Instruction Set Computers) que
define un repertorio de instrucciones bastante complejo y numeroso, con muchos tipos de
direccionamiento y muchos modos de control, pretendiendo reducir la distancia semántica que lo
separa de los lenguajes de alto nivel, y facilitar así el diseño del compilador. La
microprogramación es la técnica de diseño de la unidad de control con la flexibilidad suficiente
para facilitar la implementación de las máquinas CISC. Un caso extremo de proximidad al
lenguaje de alto nivel lo tenemos en arquitecturas avanzadas que tienen este tipo de lenguaje
como su lenguaje máquina.
En segundo lugar tenemos el planteamiento RISC (Reduced Instruction Set Computer),
que simplifica la complejidad y el número de instrucciones máquina, dejándolo reducido a un
conjunto pequeño y rápido que cubre un porcentaje muy elevado del peso computacional de los
programas. Los compiladores para este tipo de arquitecturas asumen la responsabilidad de
utilizar eficientemente unas instrucciones con poco contenido semántico pero elevada velocidad
de ejecución.
Dos aspectos importantes del nivel máquina son también la gestión de memoria y la
entrada/salida. Sin embargo, en los computadores actuales estos recursos los utiliza el
programa del usuario a través del sistema operativo.
Software básico (sistema operativo)
El Sistema Operativo (SO) no constituye un nivel del mismo tipo que los demás, por
ejemplo, el lenguaje máquina o el lenguaje de alto nivel. En realidad se trata de un gestor de
determinados recursos del nivel máquina que por la frecuencia y complejidad de uso resulta más
eficiente utilizarlos agrupados en una especie de máquina virtual que es el SO.
En los primeros computadores las funciones del SO eran escasas, limitadas
básicamente a la carga del programa y a la entrada salida. Sin embargo, las competencias de
este sistema han ido aumentando con la complejidad y sofisticación de las máquinas modernas,
que funcionan en entornos multiusuario y multitarea y que requieren una gestión de todos los
recursos de la máquina: la CPU, la jerarquía de memoria, el tratamiento de las excepciones, los
mecanismos de protección, etc.
El protagonismo que el SO tiene en un computador actual hace que cuando se diseña la
arquitectura de un procesador se tengan muy en cuenta las funciones de este sistema.
Lenguajes de alto nivel
En este nivel se utilizan lenguajes de programación con una sintaxis y una semántica
más complejas que las del lenguaje ensamblador. Estos lenguajes pretenden facilitar el trabajo
del programador aportando recursos expresivos más próximos a los problemas que se van a
resolver. En este sentido cabe diferenciar dos grandes grupos. Un primer grupo, denominado de
estilo imperativo como Pascal, Fortran, etc., que presentan una semántica operacional que
refleja directamente el funcionamiento de la máquina Von Neumann, es decir, que obligan al
programador a expresar la secuencia de órdenes cuya ejecución resuelve el problema en
cuestión. El segundo grupo lo formarían los lenguajes de estilo declarativo, como Prolog,
Miranda o Lisp (puro), que disponen de un modelo computacional diferente (aunque equivalente)
al de la máquina Von Neumann. En este caso el programador tan solo tiene que declarar las
relaciones lógicas o funcionales de los elementos que intervienen en la especificación del
problema a resolver.
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Este nivel requiere un proceso de traducción al nivel máquina que es realizado por un
programa denominado compilador. Se trata de un programa que toma como dato de entrada un
programa fuente escrito en un lenguaje de alto nivel, y produce como salida un programa objeto
escrito en lenguaje máquina con una semántica equivalente (igual significado).
Nivel L.A.N.
IF A ope B THEN
<sentencias1>
ELSE
<sentencias2>
L1
L2
Nivel L.M.
CMP A, B
Bope L1
<sentencias2>
BRA L2
<sentencias1>
......
Algoritmos
En el nivel algorítmico se expresa la resolución de un problema mediante un conjunto de
reglas aplicadas de forma sistemática y ordenada, es decir, mediante un algoritmo. Los
procedimientos que define un algoritmo son
independientes de cualquier lenguaje de
programación y de cualquier máquina particular.
Aplicaciones
Las aplicaciones se corresponden con dominios de actividad que pueden automatizarse
con el uso de un computador digital. Del análisis del dominio se extraen unas especificaciones
funcionales que son expresadas mediante algoritmos. Codificados estos algoritmos en un
lenguaje de programación y previa compilación, se ejecutan en la máquina.
• Inconvenientes de la división entre niveles
El establecimiento de niveles de abstracción en el estudio de un computador hace posible
acotar su complejidad al utilizar metodologías de análisis y síntesis propias en cada nivel, permitiendo
que dentro de un nivel el usuario pueda abstraerse de lo que ocurre en los demás niveles. Este
planteamiento que facilita sin duda el estudio del computador presenta sin embargo algunas
dificultades cuando se contempla el problema de la optimización. En efecto, a la hora de implementar
una especificación no sólo deben cumplirse todos los requerimientos funcionales de la misma,
además se deben optimizar ciertas funciones de calidad que generalmente tienen que ver con la
velocidad (maximización) y el costo (minimización). En efecto, existen ocasiones en las que
contemplar tan solo los niveles frontera de un nivel en el que se plantea un problema de diseño
puede dar lugar a la imposibilidad de optimizar la implementación. A título de ejemplo citaremos dos
casos en los que se presenta esta situación. El primero entre los niveles eléctrico y lógico, y el
segundo entre los niveles lenguajes de alto nivel y arquitectura (repertorio de instrucciones)
1) Niveles eléctrico <--> lógico Si nos planteamos el diseño de un multiplexor con
conmutadores bidireccionales (tecnología NMOS estática) respetando los niveles de diseño,
obtendríamos en primer lugar el esquema lógico (con puertas) del multiplexor, y después
expresaríamos cada puerta lógica en términos de los conmutadores bidireccionales.
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
X3
X2
X3
X2
MUX
Z
X1
X1
X0
X0
1
1
El diseño resultante es más costoso (mayor número de conmutadores) que el que podemos
obtener si planteamos el diseño directamente con conmutadores:
X3
S1
S0
S1
S0
S1
S0
S1
S0
1
X2
X1
X0
2) Niveles lenguaje de alto nivel <--> arquitectura
En este caso un compilador, para optimizar el código máquina que genera (mayor velocidad),
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
tiene en cuenta no sólo la arquitectura (repertorio de instrucciones) sino la forma en que se ejecutan
estas instrucciones (estructura) en la ruta de datos de la máquina. Este hecho puede dar lugar a que
el orden de las instrucciones máquina generadas no sea el orden lógico que utilizaría un
programador de lenguaje máquina que ignorase los detalles estructurales de la arquitectura. Esta
situación viene producida fundamentalmente por la segmentación y paralelización de las
instrucciones dentro de la máquina y se estudiará con detalle en las asignaturas de Ampliación de
Estructura de Computadores y Arquitectura e Ingeniería de Computadores.
3. Estructura básica de un computador convencional
La estructura básica de un computador actual sigue siendo la original de von Neumann,
una máquina secuencial que ejecuta datos escalares y que hemos representado en la siguiente
figura:
MEMORIA
P ROCES AD OR
CON TROL
EN TRAD A
S ALID A
U AL
REG.
La memoria almacena las instrucciones del programa, los datos iniciales, los resultados
parciales y los finales. Se accede de forma directa (RAM) a cualquier posición para realizar
operaciones de lectura o escritura.
El procesador es la unidad encargada de leer y ejecutar las instrucciones. Para ello
dispone de una ruta de datos constituida por un conjunto de registros (REG.), una unidad
aritmético-lógica (UAL), y unos buses de comunicación; y una unidad de control, que es la
encargada de generar las señales que gobiernan todos los dispositivos.
La entrada y salida constituyen la unidad para la transferencia de información con el
mundo exterior. Funcionalmente la máquina tiene las siguientes características:
1) Organización lineal de la memoria
2) Palabra de longitud fija.
3) Espacio único de direcciones.
4) Memoria única para datos e instrucciones sin diferenciar entre ambos.
5) Ejecución secuencial de las instrucciones salvo las de ruptura de secuencia
A esta organización básica de von Neumann se han ido incorporando algunas aportaciones
significativas entre las que destacaremos las siguientes:
a) Sistema de interrupciones, que permite la interrupción de un programa en ejecución
producida por una señal externa a la máquina. El sistema de interrupciones permite una mejor
sincronización de la Entrad/Salida con el exterior y la posibilidad de compartir la CPU por más de
un programa
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Programa principal
I1
I2
.
.
.Ii
Ii+1
.
señal de interrupción
línea de interrupción
.
.In
Rutina de tratamiento
i1
i2
.
.
im
b) Sistema de memoria cache, que permite disminuir el tiempo de acceso a la memoria
principal(Mp) ubicando una memoria de menor tamaño y mayor velocidad (memoria cache, Mc)
entre la CPU y Mp. El sistema explota la localidad de referencia de los programas haciendo que
Mc contenga en cada momento los bloques de Mp más referenciados, y evitando así que la CPU
tenga que acceder a Mp:
CPU
palbras
Memoria cache
(Mc)
bloques
Memmoria principal
(Mp)
c) Sistema de memoria virtual, que permite la ejecución de programas cuyo tamaño
supere el de la Mp. Para ello el sistema mantiene en Mp, de forma transparente para el
programador, tan sólo el conjunto de páginas activas (con mayor probabilidad de ser
referenciadas) del programa en ejecución. Las restantes páginas que completan el programa
residen en la memoria secundaria, hasta que son referenciadas, en cuyo caso el sistema las
activa llevándolas a Mp:
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Memoria principal
(Mp)
páginas
Memoria secundaria
(Ms)
4. Evolución histórica: tecnología, estructura y arquitectura
La velocidad de procesamiento de información de un computador está determinada
básicamente por tres elementos: arquitectura, organización (o estructura) y tecnología. Podemos
analizar la influencia de estos elementos en la velocidad de procesamiento de información de un
computador teniendo en cuenta que el tiempo T de ejecución de un programa se puede expresar
como el producto de tres factores: el número de instrucciones del programa (N), el número
medio de ciclos por instrucción (CPI), y el tiempo de ciclo (Tc), como hemos representado en la
siguiente figura:
Tc
P r ogr a m a
1 ciclo
I1
3 ciclos
I2
2 ciclos
I3
N
CP I (n º de ciclos m edio/in st r u cción )
in st r u ccion es
.
t iem po
T
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
T = N * CPI * Tc
Arquitectura del computador
Compilador
Organización del computador
Tecnología
Arquitectura del computador
Organización del computador
T
N
CPI
Tc
=
=
=
=
tiempo de ejecución del programa
número de instrucciones del programa
número medio de ciclos por instrucción
tiempo de ciclo
Es decir, mientras la arquitectura influye a través del número medio de ciclos por instrucción y del
número total de instrucciones, la organización lo hace a través de éste último y el tiempo de ciclo,
mientras que la tecnología lo hace casi exclusivamente a través del tiempo de ciclo (o su inversa, la
frecuencia de reloj del procesador). El tiempo de ciclo viene determinado por los tres niveles tecnológicos:
físico, electrónico, lógico y trasferencia de registros.
La tecnología ha experimentado una transformación continua durante las últimas décadas. Desde
la aparición del primer computador comercial, la industria informática ha pasado por cuatro generaciones
de computadores, diferenciadas básicamente por la tecnología de los componentes básicos. Los relés y las
válvulas de vacío de 1940 a 1950, los diodos y transistores discretos de 1950 a 1960, los circuitos
integrados de pequeña y media escala de integración (SSI/MSI) de 1960 a 1970, y los circuitos integrados
de alta y muy alta escala de integración (LSI y VLSI) desde 1970 en adelante. La disminución del tiempo
de conmutación de los componentes electrónicos ha repercutido directamente en el aumento de velocidad
de los computadores. También el aumento de la capacidad de integración y de encapsulado han repercutido
en la misma dirección. Los cambios tecnológicos alteran constantemente las relaciones de
compromiso tecnología/organización/arquitectura, obligando a la reconsideración de viejas
ideas ante un nuevo avance tecnológico.
Aumento de rendimiento a través de la organización y arquitectura
A lo largo de las últimas cuatro décadas la organización y arquitectura de computadores
ha experimentado un desarrollo gradual, no traumático, que ha ido decantando aquellas
características responsables de las mejoras de rendimiento.
Paralelismo y Segmentación
Las organizaciones y arquitecturas paralelas consiguen que en ciertos instantes de
tiempo el computador procese simultáneamente más de una operación básica. La simultaneidad
temporal se consigue fundamentalmente con dos técnicas: el paralelismo y la segmentación. La
primera ejecuta simultáneamente varias operaciones independientes replicando el número de
operadores hardware. La segunda descompone el operador y la operación correspondiente en
etapas secuenciales y autónomas, de manera que simultáneamente se puedan ejecutar etapas
diferentes de varias operaciones. Ambas técnicas se consideran como dos formas del
paralelismo: el paralelismo espacial o replicación la primera, y el paralelismo temporal la
segunda.
La idea básica de la segmentación estaba ya latente en la propuesta de von Neumann
para construir el primer computador de programa almacenado. Al hablar sobre las técnicas de
entrada/salida, sugería la conveniencia de disponer un buffer que permitiese el solapamiento
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
de la ejecución del programa con las operaciones de E/S, es decir, una forma primaria de
procesamiento segmentado.
Procesadores Segmentados
Se trata de arquitecturas monoprocesador que operan con una organización interna en
la que se segmenta la ejecución de las instrucciones a fin de iniciar una (y finalizar otra) cada
ciclo de operación. Sin embargo este objetivo límite difícilmente llega a conseguirse debido a los
riesgos estructurales, las dependencias de datos, las bifurcaciones y las excepciones. Para
reducir al máximo el efecto de tales ineficiencias se utilizan técnicas software como la
reordenación estática de instrucciones, el renombramiento de registros, y los saltos retardados; y
técnicas hardware como el adelantamiento (forwarding), la reordenación dinámica de
instrucciones y la predicción dinámica de saltos.
Bú squ eda
Decodifica ción
Un ida d
Bu
Un ida d
De
E jecu ción
E scr it u r a
Un ida d
Ej
Un ida d
Es
Regist r os
In st r u cción 1
Bu 1
In st r u cción 2
De1
E j1
E s1
Bu 2
De2
E j2
E s2
Bu 3
De3
E j3
E s3
Bu 4
De4
E j4
In st r u cción 3
In st r u cción 4
E s4
ciclos
1
2
3
4
5
6
7
8
Procesadores Superescalares
Un procesador superescalar de grado m emite m instrucciones por ciclo, debiendo ser
también m el paralelismo a nivel de instrucción para explotarlo completamente. En estos
procesadores los recursos para la decodificación y ejecución de instrucciones se incrementan
hasta el punto de disponer de m cauces segmentados operando concurrentemente, si bien en
algunas etapas los cauces pueden compartir algunas unidades funcionales. En general, los
conflictos por dependencias de datos, de control y estructurales de los procesadores escalares
segmentados siguen existiendo en los superescalares con mayor complejidad.
Las máquinas superescalares proporcionan compatibilidad a nivel del código objeto con
las máquinas escalares, detectando el paralelismo de las instrucciones en tiempo de ejecución.
Normalmente, se dividen las instrucciones máquina en categorías, y como mucho una
instrucción de cada categoría pueden emitirse simultáneamente.
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Un ida d
de
Bú squ eda
Un ida d
de
E m isión
de
In st r u ccion es
Un ida d de ejecu ción 1
vía 1
Un ida d de ejecu ción 2
vía 2
Un ida d de ejecu ción 3
vía 3
Procesadores VLIW
En un procesador VLIW (Very Long Instruction Word) una única instrucción especifica
más de una operación concurrente, reduciéndose el número de instrucciones por programa en
comparación con el caso escalar. Las organizaciones VLIW extendieron y formalizaron el
concepto de microcodificación horizontal que se venia utilizando años atrás para el diseño de
procesadores de propósito especial dedicados a tareas intensivas en cálculo, tales como el
procesamiento de señales digitales. Utilizando técnicas avanzadas de compilación se puede
extraer el paralelismo de grano fino de un amplio rango de aplicaciones científicas y de propósito
general. En estos procesadores los conflictos por dependencias de datos y estructurales se
resuelven antes de la ejecución, y son explícitamente controlados por las instrucciones. El
hardware adicional se dedica a caminos de datos paralelos y más unidades funcionales, en
lugar de a lógica de control y sincronización.
In st r u cción la r ga
DE C
Un ida d de ejecu ción 1
DE C
Un ida d de ejecu ción
DE C
Un ida d de ejecu ción 3
Regist r os
Procesadores Vectoriales
Los procesadores vectoriales disponen de operaciones que trabajan sobre vectores de
números. Por ejemplo, una operación vectorial puede sumar dos vectores de 64 elementos en
punto flotante dando como resultado otro vector de 64 elementos. La instrucción vectorial es
equivalente a un bucle completo en el que se calcula un elemento del resultado en cada
iteración, se actualiza el índice y se bifurca al comienzo.
Una simple instrucción vectorial especifica, pues, una gran cantidad de trabajo, por lo
que se reduce la anchura de banda necesaria para su lectura en comparación con la de las
instrucciones escalares equivalentes. Además, el acceso a los datos tiene un patrón conocido.
Desde el punto de vista arquitectónico son procesadores segmentados con instrucciones
máquina vectoriales. Al no existir dependencias entre operaciones de una instrucción vectorial,
se explota eficientemente la segmentación en las unidades aritméticas. Pero para conseguir el
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
rendimiento máximo de estas arquitecturas hay que alimentar a las unidades funcionales
segmentadas con nuevos datos en cada ciclo de reloj, lo que requiere un gran ancho de banda
con la memoria principal.
Mem or ia
Regist r os
Un ida d a r it m ét ica segm en t a da
Regist r os
Un ida d a r it m ét ica segm en t a da
Regist r os
Un ida d a r it m ét ica segm en t a da
Multiprocesadores de Memoria Compartida
Se trata de arquitecturas compuestas por un conjunto de procesadores que acceden a
una única memoria común a través de una red de interconexión. Utilizan memorias cache
locales para las que hay que resolver el problema de su coherencia con respecto a la memoria
principal y entre sí. Las soluciones que se adoptan tienen un mayor o menor soporte hardware y
dependen mucho de la red de interconexión. Otro problema que plantean estas arquitecturas es
el de la sincronización de los diferentes procesadores cuando participan de una tarea común.
Para ello es necesario disponer del soporte hardware en forma de instrucciones máquina del tipo
TEST&SET, TEST&AND, etc. que permiten implementar secciones críticas y otros mecanismos
de sincronización a nivel del sistema operativo.
P r ocesa dor
P1
P r ocesa dor
P2
P r ocesa dor
Pn
Red de in t er con exión
(bu s, r ed m u lt iet a pa , cr ossba r )
Mem or ia com ú n com pa r t ida
Multicomputadores
Son multiprocesadores de memoria distribuida donde cada procesador tiene un espacio
privado de direcciones. Se comunican y sincronizan mediante paso de mensajes a través de una
red de interconexión. Las topologías de red más utilizadas son la malla y el hipercubo.
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mem or ia
M1
Mem or ia
Mn
P r ocesa dor
P1
P r ocesa dor
Pn
Red de in t er con exión est á t ica
5. Lenguajes de descripción hardware.
Los lenguajes de descripción hardware son lenguajes de alto nivel con una sintaxis
similar a los de programación (C, ADA, Pascal, Modula, etc.) y una semántica que permite el
modelado y simulación de los dispositivos hardware a diferentes niveles de abstracción. Los
primeros lenguajes de este tipo sólo pretendían servir de vehículo de comunicación del diseño.
Se trataba de formalismos de especificación de los dispositivos hardware desarrollados por
instituciones universitarias o por industrias electrónicas que alcanzaron escasa difusión. Pero los
actuales lenguajes han adquirido un alto grado de estandarización y han adoptado los nuevos
conceptos de la ingeniería software, permitiendo la verificación de la especificación del diseño
mediante simulación. Se utilizan como vehículo de entrada a muchas herramientas de diseño
automático. Revisaremos brevemente algunos de estos lenguajes
5.1. Lenguajes precursores
CDL (Computer Design Language) fue desarrollado por Yaohan Chu a comienzo de los años
60 bajo el principio de separación de la componente lógica y electrónica de un computador
digital. CDL refleja directamente el hardware y sus operaciones, es decir, existe una
correspondencia uno-a-uno entre los objetos y operaciones hardware (registros, RAMs, relojes,
suma, cuenta, etc.) y las construcciones del lenguaje. La primera versión del simulador CDL para
IBM 7090 estuvo disponible en 1968, y la versión tercera para Univac pocos años más tarde. Se
utilizó en universidades y en la industria del radar y aeronáutica.
DDL
(Digital systems Design Language) se desarrolló a mediados de los 60 en la
Universidad de Wisconsin con varios objetivos: precisión y concisión para facilitar la
especificación de los diseños, potencia suficiente para modelar sistemas complejos,
independencia respecto a cualquier tecnología o procedimiento de diseño, capacidad de
especificación a diferentes niveles de abstracción y, finalmente, una sintaxis y una semántica
que permitieran la documentación jerárquica del diseño.
AHPL (A Hardware Programming Language) fue propuesto por F.J. Hill y G.R. Peterson unos meses
más tarde que el CDL y DDL, y apareció publicado por primera vez en 1973 en la edición original de
Digital Systems: Hardware Organization and Design. Los autores concibieron AHPL como un lenguaje
de síntesis: todo dispositivo síncrono que pudiese ser implementado en hardware debía ser
expresable en AHPL de manera tal que se pudiese traducir a una realización física siguiendo un
conjunto simple de reglas. En opinión de uno de sus autores, F.J. Hill, que participó como
miembro del grupo de trabajo que formuló las especificaciones originales para VHDL, la
existencia de AHPL favoreció la incorporación de mecanismos para permitir el proceso de
síntesis en VHDL.
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
ISPS
(Instruction Set Processor Specifications) con este lenguaje se dió un paso importante
hacia la formalización del proceso de diseño a niveles de comportamiento. Además de la
simulación y la síntesis, ISPS se utilizó en la generación de software, la verificación de
programas y la evaluación de arquitecturas. ISPS favoreció los aspectos de comportamiento
sobre los estructurales pero sin eliminarlos completamente.
TI-HDL (Texas Instruments-HDL) es un lenguaje de descripción jerárquica del diseño,
estructurado en bloques y basado en texto, que se ha utilizado principalmente en el diseño de
circuitos integrados. Procede de antiguos lenguajes usados allá por 1968, concretamente el
TIBSD (TI Boolean System Description), desarrollado como lenguaje de entrada de datos para
un sistema CAD de circuitos impresos, y Fusim (Functional Simulator), utilizado para describir
modelos de alto nivel de microprocesadores y para generar prototipos de patrones de tests.
5.2. Lenguajes actuales
Verilog es un lenguaje de descripción hardware diseñado por la compañía Cadence Design
Systems Inc., que se ha venido utilizando como lenguaje del simulador digital Cadence. El uso
de Verilog está promovido por la Open Verilog International (OVI), que publicó en octubre del 91
la primera versión del Hardware Description Language Reference Manual. En Verilog la unidad
de diseño fundamental es el módulo, que describe un componente hardware con su interfaz y
contenido. Desde un punto de vista funcional, un módulo Verilog contiene la información de una
entidad y su correspondiente arquitectura VHDL. Verilog no proporciona compilación
independiente de módulos: todos los módulos relacionados con el mismo diseño y simulación
deben estar en el mismo archivo.
UDL/I (Unified Design Language for Integrated circuits) es un lenguaje de descripción
hardware que se viene desarrollando desde 1989 por la Japan Electronic Industry Development
Association, dependiente de importantes compañías japonesas tales como NTT. Una de las
características de UDL/I es que pretende ser específico para modelar circuitos integrados. La
única unidad de diseño existente en UDL/I es la descripción de diseño, que comprende varias
subentidades denominadas descripciones de módulos. Una descripción de diseño contiene el
modelo de un circuito integrado que consta de varias subunidades o módulos, cada uno de los
cuales está especificado por una descripción de módulo.
VHDL (VHSIC Hardware Description Language) es un lenguaje impulsado por el Departamento de
Defensa de los Estados Unidos dentro del programa VHSIC (Very High Speed Integrated Circuits) y
estandarizado por IEEE Computer Society. Con VHDL se puede estudiar un sistema digital a diferentes
niveles de abstracción dentro de un único lenguaje de programación, acelerando considerablemente las
diferentes fases diseño y proporcionando un mejor conocimiento del mismo cuando se aborda la fase de
implementación física. VHDL es un lenguaje con una semántica orientada a la simulación. Por ello, su
principal dominio de aplicación es el modelado de dispositivos hardware para comprobar su corrección
funcional. Sin embargo, como ilustra la siguiente figura sus áreas de aplicación son cada vez más
numerosas, y hoy día se utiliza en la síntesis automática, la diagnosis de fallos, la verificación formal, el
modelado de rendimiento y la documentación
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
S ín te s i
i1
su m a
ca r r y
i2
Mo d e la d o
Re n d im ie n t
D o c u m e n ta c i
Cir cu it o
semisu ma do
Compon en t es:
pu er ta AND
pu er ta OR
pu er ta XOR
............................
............................
VHD L
EN TITY cir cu ito IS
P ORT(i1,i2 : IN bit ; su m , ca r r y : OU T);
E N D cir cu it o;
ARCH ITE CTU RE est r u ct u r a OF cir cu it o
BE GIN
P ROCE SS
..................
E ND
END
Ve rific a c ió
F o rm a
D ia g n o s is d e
i1
su m a
i2
¿cor r ect o
S im u la c ió
ca r r y
si
CLK
X
Z
La síntesis automática tiene como objetivo la generación de dispositivos digitales a partir de una
especificación inicial expresada en un lenguaje de descripción hardware. VHDL, al ser un lenguaje con
una semántica poco formal, en el que se pueden mezclar diferentes estilos de descripción, no es el más
apropiado para utilizar como entrada en las herramientas de síntesis. Sin embargo, dado su status de
estándar IEEE y su amplia aceptación en la industria electrónica, resulta muy conveniente no romper el
ciclo de diseño saliendo de VHDL en la fase de síntesis. Por ello, lo que se realiza habitualmente en este
terreno es definir subconjuntos sintetizables de VHDL. En este sentido cabe distinguir dos grandes
subconjuntos. Uno que engloba las construcciones secuenciales de VHDL, utilizado para la síntesis de alto
nivel, y otro que parte de unas construcciones concurrentes de VHDL que permiten descripciones de
dispositivos a nivel de transferencia de registros (RTL), utilizado para la síntesis de bajo nivel.
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La diagnosis de fallos en circuitos digitales se puede plantear a partir de las descripciones VHDL
de los mismos. En efecto, en lugar de identificar la parte de circuito que falla, podemos localizar la parte de
descripción VHDL cuya implementación hardware tiene un fallo físico y está causando el fallo de
comportamiento observado. En principio esta diagnosis es similar a la que se realiza a nivel de puertas,
pero en este caso el nivel de descripción hardware puede ser más alto y consecuentemente el modelo de
fallos será diferente.
La verificación formal de un diseño consiste en probar que para todos los estados iniciales
aceptables y para todas las entradas posibles, la implementación del diseño cumple su especificación. Las
otras dos alternativas para verificar un diseño, la síntesis automática y la simulación funcional, pueden
resultar incompletas. En efecto, los diseños producidos por síntesis automática son correctos por
construcción si los componentes primitivos están completamente verificados y si las transformaciones
realizadas en el proceso de síntesis son así mismo correctas. Sin embargo, probar la corrección formal de
un método de síntesis implica probar la corrección formal del método en sí y del software que lo
implementa, tarea que puede resultar impracticable. Por otra parte, la verificación funcional por simulación
exhaustiva también es impracticable a partir de una complejidad media en el diseño. La verificación formal
requiere un modelo matemático para representar las propiedades bajo estudio y un cálculo para realizar
computación simbólica sobre el modelo. La lógica es la rama de las matemáticas más ampliamente
utilizada en la verificación formal, incluyendo la lógica de predicados de primer orden, la lógica de orden
superior y la lógica temporal. Al no existir una semántica formal para VHDL los sistemas de verificación
formal, al igual que los sistemas de síntesis, se limitan a subconjuntos del lenguaje.
Los modelos de rendimiento constituyen el nivel más alto de abstracción de los sistemas
electrónicos. Estos modelos se utilizan principalmente para estudiar la capacidad global de procesamiento
de información de un sistema en las primeras etapas del proceso de diseño. El objetivo es identificar las
principales unidades funcionales y definir su forma de actuación en la transformación de los datos de
entrada en datos de salida. A este nivel de conceptualización el diseñador ve una unidad funcional como
algo que realiza una cierta tarea en un cierto tiempo, sin detalles específicos sobre la forma de realizar la
tarea. En realidad, puede que estos detalles no se conozcan aún en esta fase del diseño. Debido a esta
ocultación de detalles sobre los valores de los datos y sus transformaciones específicas se dice que los
datos son no interpretados, y para resaltar este hecho a los modelos de rendimiento se les denomina a veces
modelos no interpretados. VHDL, al disponer de recursos expresivos con alto nivel de abstracción, facilita
la confección de modelos de rendimiento basados en redes de Petri extendidas y colas estocásticas.
Finalmente, la documentación es una de las tareas más importantes en todo proceso de diseño, y
muy particularmente cuando el sistema tiene el grado de complejidad de los circuitos actuales. En estos
casos se hace indispensable disponer de lenguajes con una elevada capacidad de abstracción y ampliamente
aceptados por los diseñadores, como ocurre en la actualidad con VHDL.
Como muestra la siguiente figura, VHDL dispone de recursos expresivos para cubrir totalmente
la descripción y el modelado de dispositivos digitales en los niveles circuito lógico, transferencia de
registros y chip. Los niveles de sistema y circuito eléctrico sólo se cubren parcialmente. Pero lo más
interesante del lenguaje en este aspecto es que permite mezclar en una misma descripción diferentes
niveles. Esto, unido al modelo de concurrencia que permite la construcción de modelos estructurales en los
que los componentes básicos pueden a su vez ser descritos con modelos estructurales, hace posible el
establecimiento de una descomposición estructural de la jerarquía de diseño.
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
S OF TWAR E
AR QU ITECTU RA
VHD L
TRAN S F EREN CIA D E REGIS TROS
LÓGICO
ELECTRICO
F ÍS ICO
Á
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 2: Formato de las instrucciones y modos de direccionamiento
1. Formato de las instrucciones
2. Propiedades generales del direccionamiento
3. Modos de direccionamiento.
4. Soporte de los modos de direccionamiento a los lenguajes de alto nivel
Las instrucciones máquina son las acciones elementales que puede ejecutar un computador.
Una acción compleja deberá codificarse como una secuencia de instrucciones máquina en lo que se
denomina un programa. La arquitectura de un procesador entendida como el conjunto de recursos
operativos disponibles por un programador a nivel de lenguaje máquina queda definida por el repertorio
de instrucciones (ISA: Instruction Set Architecture). En general, una instrucción codifica una operación
básica que el computador realiza sobre unos datos ubicados en la memoria o en los registros de la
máquina y a los que accede utilizando un modo de direccionamiento. Por consiguiente, la arquitectura
ISA de un procesador viene determinada por los siguientes factores:
a) Tipos de datos y formatos que pueden manejar las instrucciones: naturales, enteros, reales,
caracteres, etc.
b) Modos de direccionamiento de los datos ubicados en la memoria: inmediato, directo,
indirecto, etc. Estos dos factores son determinantes para la implementación eficiente de las
estructuras complejas de datos de un lenguaje de alto nivel.
c) Conjunto básico de operaciones que se pueden realizar sobre los datos: suma, resta, etc.
Propiedad de ortogonalidad
Diremos que un repertorio es ortogonal cuando las instrucciones puedan combinar los elemento
de los tres factores anteriores sin ninguna restricción. La ortogonalidad completa no se da en ningún
repertorio de máquina real.
tipo de direccionamiento
.
indirecto -directo
--
inmediato --
(MUL, real, indirecto)
ADD
|
|
XOR
SUB
|
|
MUL
|
operaciones
entero -natural -real --
tipo de datos
1. Formato de las instrucciones
Las informaciones relativas a los cuatro factores anteriores se codifican en cada una de las
instrucciones siguiendo un formato preestablecido. El formato determinará la longitud en bits de las
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
instrucciones y los campos que codifican el valor de los factores citados. En general una
instrucción se compone de los siguientes campos:
• Código de operación (CO)
• Operandos fuente (OP1, OP2,...)
• Operando destino o Resultado (OPd)
• Instrucción siguiente (IS)
CO
OP1
OP2
..........
OPd
IS
El CO determina la operación que se realiza sobre OP1,OP2,... El resultado se deja en OPd. Lo normal es
que el número de operandos fuente de un repertorio no pase de 2. La dirección de la instrucción siguiente IS
queda implícita en todas las instrucciones (se trata de la instrucción siguiente del programa) salvo en las
instrucciones de ruptura condicional o incondicional de secuencia.
1.1 Diseño del repertorio de instrucciones.
Los repertorios de instrucciones podemos clasificarlos atendiendo a los siguientes criterios:
A) Número de operandos explícitos por instrucción
a) 3 operandos explícitos
CO
ejemplo:
OP1 (fuente 1)
OP2 (fuente 2)
OP3 (destino)
AÅB+C
ADD B,C,A
• Máxima flexibilidad
• Ocupa mucha memoria si los operandos no están en registros
b) 2 operndos explícitos
CO
OP1 (fuente 1)
ejemplo:
ADD B, C
OP2 (fuente
BÅB+C
• Reduce el tamaño de la instrucción
• Se pierde uno de los operandos
c) 1 operando explícito
CO
OP1 (fuente
ejemplo:
ADD B
Acumulador Å <Acumulador> + B
• Supone que fuente 1 y destino es un registro predeterminado (acumulador)
• Se pierde un operando fuente
d) 0 operandos explícitos
CO
ejemplo:
ADD
cima de pila Å <cima de pila> + <cima de pila - 1>
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• Se trata de computadores que trabajan sobre una pila
Ejemplo:
3 operandos
ADD C, D, C
SUB A, B, A
MUL A, C, E
ADD
SUB
MUL
MOV
E = (A – B)*(C + D)
2 operandos
1 operando
LOAD A
C, D
SUB B
A, B
STORE A
A, C
LOAD C
C, E
ADD D
MUL A
STORE E
0 operandos
(PUSH) LOAD A
(PUSH) LOAD B
SUB
(PUSH) LOAD D
(PUSH) LOAD C
ADD
MUL
(PULL) STORE E
B) Forma de almacenar operandos en la CPU
a) Arquitectura de pila (HP 3000/70)
b) Arquitectura de acumulador (Motorola 6809)
c) Arquitectura de registros de propósito general (IBM 360)
Ejemplo: código máquina en cada una de las tres alternativas correspondiente a la sentencia de
asignación C := A + B
C=A+B
Pila
Acumulador
Conjunto de registros
PUSH A
LOAD
A
LOAD R1, A
PUSH B
ADD
B
ADD
ADD
STORE C
POP
R1, B
STORE C, R1
C
Las arquitecturas de registros de propósito general se clasifican a su vez atendiendo al número
máximo de operandos (2 ó 3) que pueden tener las instrucciones de la ALU y cuantos de ellos se
pueden ubicar en memoria:
(operandos - en memoria)
(
3
-
0
) Arquitectura registro-registro (también llamada de carga-almacenamiento).
Utilizan tres operandos totales y cero en memoria. Formato de longitud
fija y codificación simple de las instrucciones que pueden ejecutarse en un
número similar de ciclos. Facilitan un modelo simple de generación de
código apara el compilador. SPARC, MIPS, PowerPC
(
2
-
1
) Arquitectura registro-memoria. Utilizan dos operandos totales con uno
ubicado en la memoria. Intel 80X86, Motorola 68000
(
3
-
3
) Arquitectura memoria-memoria. Utilizan tres operandos totales con la
posibilidad de ser ubicados los tres en memoria. VAX
Códigos de operación de longitud fija y variable
n
Una máquina con un formato de instrucción que dedica n bits al CO permitirá 2 instrucciones diferentes,
cada una de las cuales puede tener diferente número de operandos (0, 1, 2, 3, etc.). Los bits del campo
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
OPERANDOS se pueden utilizar para extender el CO de aquellas instrucciones con menor número de operandos.
Ejemplo: Partimos de una máquina con instrucciones de longitud fija de 24 bits y consideraremos los
siguientes supuestos:
1) La máquina dispone de 16 registros generales
4
4
16
CO
R
OP
Ö En este caso se pueden codificar 16 instrucciones de 2 operandos: uno en registro y el otro en
memoria
2) Si queremos extender el CO se puede utilizar una de las 16 combinaciones del CO (quedarían
15 con 2 operandos), por ejemplo CO = 1111, dando la posibilidad de codificar 16 instrucciones de
1 operando en memoria. Si queremos seguir extendiendo el CO podemos utilizar CO = 1111 1111
(quedarían 15 con 1 operando) para definir instrucciones sin operandos (216 = 65.536)
En la siguiente tabla se resume el proceso descrito.
R
0000
R
0001
.
.
.
.
.
.
R
1110
1111 0000
1111 0001
.
.
.
1111 1110
1111 1111
1111 1111
1111 1111
OP
OP
.
.
.
.
.
15 instrucciones de
2 operandos
(CO de 4 bits)
15 instrucciones de
1 operando
OP
0000 0000 0000 0000
0000 0000 0000 0001
.
.
.
1111 1111 1111 1111
(CO de 8 bits)
216 = 65.536
instrucciones de
0 operandos
(CO de 24 bits)
Otra alternativa: dedicar 2 bits para indicar si la instrucción tiene 0, 1 o 2 operandos:
2
L
2
CO
4
16
R
OP
En este caso podemos codificar los siguientes grupos de instrucciones:
L = 00 Î CO de 2 bits Î 4 instrucciones de 2 operandos
L = 01 Î CO de 6 bits Î 64 instrucciones de 1 operando
L = 10 Î CO de 22 bits Î 4.194.304 instrucciones de 0 operandos
Optimización del CO variable en función de la frecuencia de las instrucciones.
Una posibilidad a la hora de codificar las operaciones de un repertorio de instrucciones es utilizar
algún criterio de óptimo. En este sentido tenemos dos alternativas:
a) Frecuencia de aparición en el programa Î optimización de memoria
b) Frecuencia de ejecución en el programa Î optimización del tráfico CPU-Memoria
La alternativa b) es la más interesante en la actualidad, pues prima la velocidad de ejecución sobre
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
la memoria .necesaria para almacenar el programa.
Para optimizar el CO se puede utilizar la codificación de Huffman que veremos con el siguiente
Ejemplo: Supongamos las siguientes frecuencias de ejecución de 7 tipos diferentes de
instrucciones:
Tipo de instrucciones
Frecuencia de ejecución
0.53
ADD
0.25
SUB
0.12
MUL
0.03
DIV
0.03
STA
0.02
LDA
0.02
JMP
Con CO de longitud fija se necesitarían 3 bits. Para obtener el código de Huffman procedemos de
la siguiente manera:
1) Se escriben en una columna las instrucciones y a su derecha su frecuencia de ejecución. Cada
elemento de la columna será un nodos terminal del árbol de decodificación.
2) Se unen las dos frecuencias menores de la columna anterior con sendos arcos, obteniéndose
un nuevo nodo cuyo valor será la suma de los nodos de procedencia.
3) Se repite el paso 2) hasta llegar a la raíz del árbol que tendrá valor 1
4) Comenzando en la raíz, asignamos 0 (1) al arco superior y 1 (0) al inferior hasta llegar a los
nodos terminales
5) Se obtiene el código de cada instrucción recorriendo el árbol de la raíz a la instrucción y
concatenando los valores de los arcos del camino
Para nuestro ejemplo tendremos lo siguiente:
ADD
0.53
SU B
0.25
MU L
0.12
DIV
0.03
0
0
1
0.47
0
0
0.22
0.06
STA
0.03
1
LDA
0.02
0
J MP
0.02
1
0
0.10
1
1
0.04
1
Tipo de instrucciones
Frecuencia de ejecución
Código de Huffman
ADD
SUB
MUL
DIV
STA
LDA
JMP
0.53
0.25
0.12
0.03
0.03
0.02
0.02
0
10
110
11100
11101
11110
11111
Longitud media del código resultante:
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
l m = ∑ f i × l i = 0.53 × 1 + 0.25 × 2 + 0.12 × 3 + 0.003 × 5 + 0.003 × 5 + 0.02 × 5 + 0.02 × 5 =
i
1.89 _ bits < 3 _ bits
2. Propiedades generales del direccionamiento.
Resolución
Es la menor cantidad de información direccionada por la arquitectura. El mínimo absoluto es un bit,
aunque esta alternativa la utilizan pocos procesadores, por ejemplo, el iAPX432 de Intel (1981)
Requiere un gran número de bits para expresar las direcciones de una cierta cantidad de
información y mucho tiempo para alinearlos correctamente. Lo más frecuente en los procesadores
actuales es utilizar resoluciones de 1 o 2 bytes. La resolución puede ser diferente para
instrucciones y datos aunque lo normal es que coincida.
Resolución
Instrucciones
Datos
MC68020
16
8
VAX-11
8
8
IBM/370
16
8
B1700
1
1
B6700
48
48
iAPX432
1
8
Orden de los bytes en memoria
El concepto de endian lo introdujo Cohen para expresar la forma como se ordenan los bytes de un
escalar de varios bytes.
• Modo big-endian: almacena el byte más significativo del escalar en la dirección más baja de
memoria
• Modo little-endian: almacena el byte más significativo del escalar en la dirección más alta de
memoria.
Ejemplo: el hexadecimal 12 34 56 78 almacenado en la dirección de memoria 184 tendrá la
siguiente organización en cada uno de los modos:
big-endian
184
12
185
34
186
56
187
78
little-endian
184
78
185
56
186
34
187
12
Alineación
Un objeto de datos de n bytes ubicado en la dirección de memoria D se dice que está alineado si
D mod n = 0
Objeto de datos direccionado (tamaño)
byte
media palabra (2 bytes)
palabra (4 bytes)
doble palabra (8 bytes)
Alineaciones correctas
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0, 2, 4, 6, 8, 10
0, 4, 8, 12
0, 8, 16
• Determinadas máquinas sólo permiten accesos alineados
• La falta de alineación implica complicaciones hardware
• Los programas con accesos alineados se ejecutan más rápidamente
• Para alinear datos se utiliza una red de alineación. En el caso de la figura para acceder a una
palabra no alineada serán necesarios 2 accesos para obtener la parte alta y baja
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
32 bits
32 bits
32 bits
32 bits
a la CPU
Espacios de direcciones
En un mismo procesador pueden diferenciarse hasta 3 espacios de direcciones diferentes:
• Espacio de direcciones de registros
• Espacio de direcciones de memoria
• Espacio de direcciones de entrada/salida
Los espacios de direcciones de memoria y entrada/salida de algunos procesadores están unificados
(un solo espacio), ocupando los puertos de E/S direcciones de ese espacio único. En estos procesadores
(ejemplo, 68000) no existen instrucciones específicas de E/S, para esta función se utilizan las de referencia a
memoria (carga y almacenamiento) con las direcciones asignadas a los puertos.
3. Modos de direccionamiento.
Los modos de direccionamiento determinan la forma como el operando (OPER) presente en las
instrucciones especifican la dirección efectiva (DE) del dato operando (DO) sobre el que se realiza la
operación indicada por CO.
Inmediato.
CO
OPER
DO = OPER
• El dato operando se ubica en la propia instrucción ==> no requiere accesos a memoria.
• Se suele utilizar para datos constantes del programa
• El tamaño está limitado por el número de bits de OPER
Implícito
CO
• El dato operando se supone ubicado en algún lugar específico de la máquina, por ejemplo, una pila
Directo (memoria o registros)
OPER = Dirección de memoria o de un registro
DE = OPER
DO = <OPER>
Memoria
o
Registros
CO
OPER
DO
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• La especificación de un registro requiere menor número de bits que la de una posición de memoria
• El acceso a los registros es más rápido que a Memoria
• El direccionamiento directo a memoria se conoce como absoluto
• A veces se limita el número de bits de OPER limitando el acceso a sólo una parte de la memoria que
suele ser la correspondiente a las direcciones más bajas (página cero)
Indirecto (memoria)
OPER = Dirección de memoria
DE = <OPER>
DO = <<OPER>>
Memoria
CO
OPER
DE
DO
• Permite el tratamiento de una dirección de memoria como un dato
• Permite el paso por referencia de parámetros a subrutinas
• Permite referenciar un espacio mayor de direcciones
CO
2n-p direcciones
dirección
p bits
n-p bits
CO
dirección
p bits
2n-p direcciones
n-p bits
2n direcciones
dirección
n-bits
Indirecto (registro)
OPER = Dirección de un registro
DE = <OPER>
DO = <<OPER>>
Registros
CO
Memoria
OPER
DE
DO
Modos con desplazamiento.
Calculan la dirección efectiva (DE) sumando al contenido de un registro el operando declarado
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
en la instrucción (OPER) que se interpreta como un desplazamiento respecto al contenido del registro.
La distinta naturaleza del registro hace que se diferencien tres modos con desplazamiento. Todos
explotan la proximidad de los datos o instrucciones referenciadas para utilizar menor número de bits en
el campo OPER.
Direccionamiento base más desplazamiento
DE = <Registro base> + OPER; OPER = desplazamiento
• Se utiliza para la reubicación de datos y programas en memoria
Memoria
CO
OPER
+
DO
Registro Base
Ejemplo: A = B + C
Programa
LOAD RB,1; RD1
LOAD RB, 2; RD2
ADD RD1; RD2
STORE RD1; RB,0
(RD1 <-- <RB>+1)
(RD2 <-- <RB>+2)
(RD1 <-- <RD1> + <RD2>)
(A<RB>+0 <-- <RD1>)
<RB> + 1 = B
<RB> + 2 = C
<RB> + 0 = A
Memoria
RB
A
Registros de datos
B
RD1
C
RD2
Este programa podremos reubicarlo en memoria y siempre llevará a la dirección apuntada por el
registro base RB la suma de los contenidos de las dos direcciones siguientes.
Direccionamiento relativo
DE = <Contador de programa> + OPER; OPER = desplazamiento
• Se utiliza en las instrucciones de salto para conseguir la reubicación de estas instrucciones
• El desplazamiento en estas instrucciones tiene signo (c2) lo que significa que el salto relativo se
puede dar hacia posiciones anteriores o siguientes a la ocupada por la instrucción.
Memoria
CO
OPER
+
DO
Contador de Programa
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Direccionamiento indexado
DE = <Registro índice> + OPER; OPER = desplazamiento
• Se utiliza para recorrer estructuras lineales como los arrays
• Par facilitar su uso se suele complementar con el pre o post incremento o decremento del registro
índice
Memoria
CO
OPER
+
DO
Registro Indice
Resumen de los tipos de direccionamiento
Direccionamiento
instrucción
Indirecto (registro)
registro
Indirecto (memoria)
dirección
Indexado
registro
registro
memoria
dirección
operando
dirección
desplazamiento
+
operando
dirección
base
registro
dirección
+
operando
desplazamiento
Relativo
registro
dirección
+
operando
dirección
Modos compuestos
Veremos los modos compuestos analizando el repertorio de algunos procesadores.
Modos de direccionamiento del MC 68.X
CO
OPER
• Inmediato
DO = OPER
- enteros: 8, 16 y 32 bits
- reales: 32 bits (simple precisión), 64 bits (doble precisión) y 96 bits (precisión extendida)
• Directo
- Memoria o absoluto
DE = OPER, DO = <DE>, con OPER de 16 y 32 bits
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
- Registro
Ri = OPER, DO = <Ri>, con Ri cualquier registro
• Indirecto registro
- puro
DE = <Ri>, con Ri cualquier registro
Memoria
CO
OPER
Ri
DO
DE
- Indirecto registro con postincremento
DE = <Ri>;
Ri Å <Ri> + Inc,
CO
con Inc = 1, 2 ó 4 bytes
Memoria
OPER
Ri
+ Inc
DO
DE
- Indirecto registro con predecremento
Ri Å <Ri> - Dec,
DE = <Ri>,
CO
con Dec = 1, 2 ó 4 bytes
Memoria
OPER
Ri
- Dec
DO
DE
- Indirecto con desplazamiento (= base + desplazamiento)
DE = <Ri> + Despla
Memoria
CO
Despla
+
DO
DE
Ri
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
- Indirecto registro indexado (= base + desplazamiento indexado)
DE = <Ri> + <Rj>xEscala + Despla,
con Escala = 1, 2, 4, 8 bytes
Memoria
Escala
CO
Despla
x
+
DO
DE
Rj
Ri
• Indirecto memoria
- Postindexado (= base + desplazamiento indirecto indexado + desplazamiento)
DE = <<Ri> + despla1> + <Rj>xEscala + Despla2
CO
Despla1
Despla2
Memoria
+
DIR
DE
Ri
DO
Rj
x
+
Escala
- Preindexado (base + desplazamiento indexado indirecto + desplazamiento)
DE = <<Ri> + Despla1 + <Rj>xEscala> + Despla2
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CO
Despla1
Despla2
+
Memoria
Ri
DIR
+
+
DE
Rj
DO
x
Escala
• Relativo
- Básico
DE = <CP> + Despla
Memoria
CO
Despla
+
DO
DE
CP
- Indexado con desplazamiento
DE = <CP> + <Rj>xEscala + Despla
Escala
x
Memoria
CO
Despla
+
DO
DE
Rj
CP
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
- Indirecto memoria postindexado
DE = <<CP> + Despla1> + <Rj>xEscala + Despla2
CO
Despla1
Despla2
Memoria
+
DIR
DE
CP
DO
Rj
x
+
Escala
- Indirecto memoria preindexado
DE = <<CP> + Despla1 + <Rj>xEscala> + despla2
CO
Despla1
Despla2
+
Memoria
CP
+
Rj
DIR
+
DE
DO
x
Escala
Modos de direccionamiento del MIPS R-2000
• Inmediato
• Registro
LA = R
• Relativo
DE = <PC> + Despla
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• Indirecto registro con desplazamiento (= base + desplazamiento)
DE = <Ri> + Despla
Modos de direccionamiento del Pentium II
CO
A
Registros de uso general
Registro base
Registro índice
B
0, 8 ó 32 bits
I
A
Escala
(1,2,4,8)
X
Memoria
+
Registro de segmento
SR
DE
LA
+
segmento
(6 registros SR)
Paginación
• Inmediato
DO = A (1,2,4 bytes)
• Registro
LA = R, DO = <R> (LA = dirección lineal)
• Desplazamiento
LA = <SR> + A
• Base
LA = <SR> + <B>
• Base + desplazamiento
LA = <SR> + <B> + A
• Indexado
LA = <SR> + <I>xEscala + A
• Base + desplazamiento indexado
LA = <SR> + <B> + <I> + A
• Base + desplazamiento indexado escalado
LA = <SR> + <B> + <I>xEscala + A
• Relativo
LA = <PC> + A
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
4. Soporte de los modos de direccionamiento a los lenguajes de alto nivel
Visibilidad en C
Un programa escrito en C no es más que una colección de subprogramas (funciones) en
idéntico nivel, dentro del programa principal (Main). Estas funciones pueden llamarse entre sí, incluso
de forma recursiva. Las variables locales definidas en una función son visibles sólo dentro de la función.
En cambio las variables globales se definen fuera de la funciones (en la función Main) y pueden ser
referenciadas desde cualquiera de ellas.
Las variables locales de una función se asignan dinámicamente Estudiaremos ahora los
modos de direccionamiento más adecuados para satisfacer los requerimientos de los lenguajes de alto nivel.
Estos modos reducirán al mínimo el número de instrucciones requeridas para acceder a los elementos de las
diferentes estructuras de datos (array, record, etc.) que soportan estos lenguajes, es decir, para calcular sus
direcciones efectivas. Estos lenguajes presentan una estructura de bloques e incorporan el concepto de
visibilidad de las variables del programa, es decir, las reglas de acceso a las variables de cada uno de los
bloques.
, es decir, cada vez que se activa la función. La asignación tiene lugar dentro de un registro de
activación (RA) que se ubica en la pila asociada al programa. Dada la naturaleza recursiva de las
llamadas, pueden existir en la pila más de un RA para la misma función (tantos como llamadas).
Supongamos el siguiente perfil de progrma C:
Main( )
{
.
.
.
... = ... fe(...) ...
.
.
.
}
fa (...)
{
.
.
.
fb (...)
{
.
.
.
... = ... fb(...) ...
.
.
.
... = ... fc(...) ...
.
.
.
}
fc (...)
{
.
.
.
... = ... fc(...) ...
.
.
.
... = ... fb(...) ..
.
.
.
}
}
La estructura de este programa sería la siguiente:
fd (...)
{
.
.
.
}
fe (...)
{
.
.
.
... = ... fc(...) ...
.
.
.
}
main
fa
fb
fc
fd
fe
Supongamos que tiene lugar la siguiente secuencia de llamadas:
main Æ fe Æ fc Æ fc Æ fb Æ fb Æ fc
En la pila del programa se ubican los registros de activación correspondientes a cada una de estas
llamadas, tal como se muestra en la siguiente figura, donde se ha sombreado las variables que pueden
ser accedidas desde la tercera activación de la función fc: las globales y las locales a esta tercera
llamada. Para realizar el acceso se dispone de sendos registros que apuntan a cada uno de estos RA,
el Puntero al Registro de Activación Global (PRAG) y el Puntero al Registro de Activación Local (PRAL)
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
RA main
RA fe
PRAG
Puntero al Registro de Activación Global
RA fc
(1ª llamada)
RA fc
(2ª llamada)
Registros de Activación
visibles desde la última
llamada a fc
RA fb
(1ª llamada)
RA fb
(2ª llamada)
RA fc
(3ª llamada)
PRAL
Crecimiento de la PILA
Puntero al Registro de Activación Local
Visibilidad en Pascal
En los lenguajes de tipo Pascal un bloque puede ser un procedure o una function, y el concepto
de visibilidad adquiere una estructura anidada. Los bloques de un programa de este tipo presentan una
estructura jerárquica y la visibilidad de variables desde la llamada a un bloque se extiende a todos los
bloques (últimas llamadas) en el camino hasta la raíz (main)
main
Ba
Bc
Bb
Bd
Be
Bf
Bh
Bi
Bg
program main(..)
procedure a
begin
procedure c
begin
...
end
procedure d
begin
...
end
end
procedure b
begin
procedure e
begin
... function h (..)
end
procedure f
begin
... function i (..)
end
procedure g
begin
...
end
end
end
Secuencia de llamada: main Æ Ba Æ Bb Æ Bb Æ Bf Æ Be Æ Bh Æ Bh
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
RA main
RA Ba
PRAG
RA Bb
(1ª llamada)
RA Bb
(2ª llamada)
Registros de Activación
visibles desde la última
llamada al bloque Bh
RA Bf
RA Be
Display del RA Bh
RA Bh
(1ª llamada)
RA Bh
(2ª llamada)
PRAL
El display de un RA contiene un puntero a cada RAi visible desde RA
Acceso a variables escalares locales o globales (contenido)
RA main
Despla
PRA G
Variable g lobal
RA
(procedimiento
en ejecución)
Despla
PRA L
Variable local
Variables locales:
DE = <PRAL> + despla Î direccionamiento base + desplazamiento
Variables globales:
DE = <PRAG> + despla Î direccionamiento base + desplazamiento
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a variables escalares no locales (contenido)
main
Ba
Bb
Bl
Bc
Bd
Secuencia de llamada: main Æ Ba Æ Ba Æ Bb Æ Bc Æ Bd
RA main
RA Ba
PRAG
(1ª llamada)
RA Ba
Despla 2
(2ª llamada)
RA Bb
RA Bc
Ubicación del dato accedido
Despla 1
RA Bd
display
PRAL
DE = <<PRAL> + Despla1> + Despla 2 Î
direccionamiento base + desplazamiento indirecto + desplazamiento
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a variables escalares locales (dirección)
Var. referenciada
RA proc. Ejec.
Despla
Puntero local
PRAL
DE = <<PRAL> + Despla> Î
direccionamiento base + desplazamiento indirecto
Acceso a variables escalares no locales (dirección)
Var. referenciada
RA proc. refer.
Despla 2
Referencia a var.
Inicio RA referenc.
Despla 1
display
RA proc. Ejec.
PRAL
DE = <<<PRAL> + Despla1> + Despla 2> Î
direccionamiento base + desplazamiento indirecto + desplazamiento indirecto
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a variables de tipo array locales (contenido)
RA proc. Ejec.
1º elemento
Factor_escala (=1,2,4,8)
Despla
Indexación
array
X
RX
n-simo elemento
PRAL
DE = <PRAL> + Despla + <RX>factor_escala Î
direccionamiento base + desplazamiento indexado
Acceso a variables de tipo array no locales (contenido)
RA proc. referen.
1º elemento
Factor_escala (=1,2,4,8)
Despla 2
Indexación
array
X
RX
n-simo elemento
Despla 1
Inicio RA referenc.
display
RA proc. Ejec.
PRAL
DE = <<PRAL> + Despla 1> + Despla 2 + <RX>factor_escala Î
direccionamiento base + desplazamiento indirecto + desplazamiento indexado
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a variables de tipo array locales (dirección)
Factor_escala (=1,2,4,8)
1º elemento
Indexación
array
X
RX
n-simo elemento
RA proc. Ejec.
Despla
Puntero local
PRAL
DE = <<PRAL> + Despla > + <RX>factor_escala Î
direccionamiento base + desplazamiento indirecto indexado
Acceso a variables de tipo record locales (contenido)
RA proc. ejec.
1º campo
Despla 1
Despla 2
record
n-simo campo
PRAL
DE = <PRAL> + Despla 1 + Despla 2 Î
direccionamiento base + desplazamiento
Despla 1 = dirección e inicio del record
(conocido en tiempo de compilación)
Despla 2 = posición en record del campo accedido
(conocido en tiempo de compilación)
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a variables de tipo record anidados locales (contenido)
RA proc. ejec.
1º campo de RR(x)
1º campo de R (y)
record RR
Despla 1
Despla 2
Despla 3
2º campo de R (z)
PRAL
RR: record
x: real
R: record
y: boolean
z: integer
.
.
.
end R
.
.
.
end RR
acceso al campo z de R
DE = <PRAL> + Despla 1 + Despla 2 + Despla 23Î
direccionamiento base + desplazamiento
Despla 1 = dirección e inicio RR
Despla 2 = posición en RR del campo R
Despla 3 = posición en R del campo accedido z
(conocido en tiempo de compilación)
(conocido en tiempo de compilación)
(conocido en tiempo de compilación)
Acceso a variables de tipo record locales (dirección)
Despla 2
campo accedido
record
RA proc. ejec.
Despla 1
puntero local
PRAL
DE = <<PRAL> + Despla 1> + Despla 2 Î
direccionamiento base + desplazamiento indirecto + desplazamiento
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Apéndice (motivación del direccionamiento indirecto)
Consideremos un computador con una memoria de 4K palabras de 12 bits, un registro acumulador y dos bits
de condición (Z y N)
000
11
0
11
0
M E M OR IA
ACUMULADOR
(AC)
R egistro d e estad o
1 0
NZ
FFF
Todas las instrucciones tienen longitud fija de 12 bits y están compuestas por un código de
operación (CO) situado en los 4 bits más significativos (del 8 al 11) y una dirección/operando
situada en los 8 bits menos significativos (del 0 al 7). Los 8 bits de la dirección/operando tienen el
significado de dirección en las instrucciones de salto y referencia a memoria, y significado de dato
en las instrucciones de operando inmediato.
11
8 7
CO
0
DIR ECCION /OPE RAN DO
La máquina dispone de once instrucciones, tres de carga y almacenamiento (LDA, STA, LDAI),
tres aritmetico-lógicas (SUM, SUMI, NOR), cuatro de salto condicional (JZ, JNZ, JN, JNN) y una
instrucción de parada (HALT). En la siguiente tabla se muestran el código simbólico, el tipo de
direccionamiento, el código binario (CO) y la semántica de cada una de las instrucciones. El
símbolo <-- significa transferencia de la información a su derecha hacia el elemento a su izquierda;
MEMORIA(DIRECCION) expresa el contenido de la posición de MEMORIA apuntada por
DIRECCION; los paréntesis angulares expresan contenido y el símbolo & concatenación.
Nombre Simbólico
LDA
STA
SUM
LDAI
SUMI
NOR
JZ
JNZ
JN
JNN
HALT
DIR/OPE
DIR
DIR
DIR
OPE
OPE
DIR
DIR
DIR
DIR
DIR
-
COP
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
0000
Semántica
AC <-- MEMORIA(DIR)
MEMORIA(DIR) <-- <AC>
AC <-- <AC> + MEMORIA(DIR)
AC <-- 0000&OPERANDO
AC <-- <AC> + 0000&OPERANDO
AC <-- <AC> NOR MEMORIA(DIR)
PC <-- DIR SI <Z> = 1
PC <-- DIRE SI <Z> = 0
PC <-- DIR SI <N> = 1
PC <-- DIR SI <N> = 0
parada de la máquina
24
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Programa
Inicializa 10 posiciones de memoria (de la 20 a la 29) con un contenido igual a su dirección.
Dirección Simbólico
Binario
comentario
0
LDA
4
0001 00000100
AC <-- (STA -----)
1
SUMI 1
0101 00000001
AC <-- (STA -----) + 1
2
STA
4
0010 00000100
MEMORIA(4) <-- (STA ------ + 1)
3
LDA 14
0001 00001110
AC <-- índice
4
STA ---0010 00010011
MEMORIA(índice) <-- índice
5
SUMI 1
0101 00000001
AC <-- índice + 1
6
STA índice
0010 00001110
índice <-- índice + 1
7
LDA 30
0001 00001101
AC <-- límite
8
NOR 30
0110 00001101
AC <-- complemento1(límite)
9
SUMI 1
0101 00000001
AC <-- complemento2(límite)
10
SUM índice
0011 00001110
AC <-- índice - límite
11
JNZ 0
1000 00000000
Vuelve a dirección 0 si resultado ≠ 0
12
HALT
0000 00000000
Parada
13
30
000000011110
límite
14
20
000000010100
índice
Para referenciar posiciones de memoria consecutivas (indexación) hemos utilizado un artificio poco
recomendable en programación: modificar instrucciones en tiempo de ejecución, concretamente, sumando un
1 a la instrucción STA índice (inicialmente en binario 001000010011) de la posición 4. De esa forma, cada
vez que se recorra el cuerpo del ciclo que constituye el programa, la instrucción STA índice referenciará la
posición de memoria siguiente a la que referenció en el recorrido anterior. El ciclo finalizará cuando el índice
iguale el límite. Para detectarlo se realiza la resta índice -limite (complementando a dos límite, es decir,
complementando a 1 y sumando 1, y sumando el resultado a índice) y se bifurca sobre Z.
Esto lo podemos solucionar introduciendo el direccionamiento indirecto (ind) para la instrucción de
almacenamiento STA (ind) y modificando las instrucciones 0,1,2 y 4 del programa de la forma siguiente:
0
1
2
LDA 14
SUMI 1
STA 14
4
STA (ind) 14
25
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 3: Formato de los datos y clases de instrucciones
1. Tipos de datos y formatos de representación.
2. Instrucciones que operan sobre datos.
3. Instrucciones de control del flujo de ejecución.
4. Soporte de las instrucciones de control a las construcciones de alto nivel
1. Tipos de datos y formatos de representación.
Números naturales
Representación binaria
N ≡ ( x n−1 , x n− 2 ,..., x1 , x 0 )
n−1
V(N) = ∑ 2 . xi
i
i= 0
•
•
•
rango de representación = [0, 2n - 1]
resolución = 1
dificultades:
ƒ el resultado de la suma puede necesitar n+1 bit
ƒ no es posible en general la resta: habría que comprobar que el minuendo es mayor que el
sustraendo
ƒ para el producto se necesitan 2n bits
Representación BCD(Decimal Codificado en Binario)
Codifica en binario puro con 4 bits cada uno de los dígitos decimales
Ejemplo
2 5 5 --->
BCD = 0010 0101 0101 en cambio en binario sería:
2 5 5 --->
binario = 1111 1111
Existen 2 formatos de representación:
ƒ
BCD desempaquetado
1111 0010
zona
1111 0101
dígito
ƒ
0010
zona
dígito
1111 0101
zona
dígito
BCD empaquetado
0101
0101
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Números enteros
Signo y magnitud
N ≡ ( x n−1 , x n− 2 ,..., x1 , x 0 )
n−2
V ( N ) = ∑ 2 i xi
si Xn-1 = 0
i =0
n−2
V ( N ) = − ∑ 2 i xi
si Xn-1 = 1
i =0
como
1 - 2•Xn-1 = 1 si Xn-1 = 0
1 - 2•Xn-1 = -1 si Xn-1 = 1
n−2
V ( N ) = (1 − 2 xn−1 ) ∑ 2i xi
i =0
•
•
•
rango de representación = [-(2n-1 - 1), 2n-1 - 1]
resolución = 1
dificultades
ƒ doble representación del cero
ƒ no es posible en general la resta: habría que comprobar que el minuendo es mayor que el
sustraendo
Complemento a dos
•
•
Los números positivos se representan igual que en signo y magnitud
Los números negativos se representan como 2n - magnitud del número
Ejemplo: (para n= 8 bits) X = - 50 se representa por
1 0000 0000 = 28
- 0011 0010 = 50 (magnitud de -50)
0 1100 1110 = - 50 en c2
•
El valor del número X se puede expresar en general como:
n− 2
V ( N ) = − xn−1 • 2 n−1 + ∑ 2i xi
i =0
Se puede obtener el valor decimal de un número en c2 sumando los pesos de las posiciones con
1:
-128
64
32
16
8
4
1
-128
0
0
0
1
+8
0
2
0
1
0
= -120
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
0 bien pesando sólo las posiciones con cero (cuando el número es negativo) y sumando 1:
64 + 32 + 16
+
4
+
2
+ 1 + 1 = 120
Podemos calcular el c2 de un número binario complementando bit a bit (c1) y sumado 1:
0 1 0 0 0 0 0 1 = 65
c1 = 1 0 1 1 1 1 1 0
+
1
1 0 1 1 1 1 1 1 = -65
•
•
•
rango de representación = [-2n-1 , 2n-1 - 1]
resolución = 1
ventaja: la resta se convierte en suma del c2 del sustraendo
Complemento a uno
•
•
•
Los números positivos se representan igual que en signo y magnitud
Los números negativos se representan como 2n - magnitud del número - 1
El valor del número X se puede expresar en general como:
n −2
V ( N ) = − xn−1 • (2 n−1 + 1) + ∑ 2i xi
i =0
•
•
•
rango de representación = [- 2n-1 - 1, 2n-1 - 1]
resolución = 1
dificultades
ƒ doble representación del cero
ƒ la resta es más compleja que en c2
•
Para hallar el c1 de un número binario se complementa bit a bit el número.
Tabla de representación de los tres sistemas para n = 4 bits
Número decimal Signo y magnitud
Complemento a 1 Complemento a 2
0111
0111
0111
+7
0110
0110
0110
+6
0101
0101
0101
+5
0100
0100
0100
+4
0011
0011
0011
+3
0010
0010
0010
+2
0001
0001
0001
+1
0000
0000
0000
0
-0
1000
1111
No existe
1111
1110
1001
-1
1110
1101
1010
-2
1101
1100
1011
-3
1100
1011
1100
-4
1011
1010
1101
-5
1010
1001
1110
-6
1001
1000
1111
-7
-8
no existe
No existe
1000
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Números reales
Utilizando una notación exponencial, un número real R queda determinado por dos valores, un exponente
(e) y una mantisa (m) tal que el valor de R venga dado por la expresión:
e
V(R) = B • m
Donde B es una base conocida. Por ejemplo, utilizando base 10 tenemos:
976.000.000.000.000
0,0000000000000976
=
=
9,76 •10 14
9,76 •10 -14
Los números quedarían definidos por:
976.000.000.000.000
0,0000000000000976
Æ
Æ
mantisa m = 9,76;
mantisa m = 9,76;
exponente
exponente
e = 14
e = -14.
La representación en coma flotante utiliza esta definición y establece un formato para la mantisa y para el
exponente.
Exponente
Utiliza una representación sesgada o codificación en exceso con un sesgo = 2k-1-1; siendo k el número
de bits reservados para el campo del exponente. Es decir, en lugar de representar directamente
e, utilizamos su codificación E exceso 127, siendo E = e + 127.
Para k = 8 bits se codifica el exponente (con signo) con valores que van de –127 a +128 utilizando el
código exceso 28-1-1 = 127. Los correspondientes valores codificados van en decimal de 0 (todos
los bits a 0) a 255 (todos los bits a 1). La tabla siguiente muestra el rango de valores del
exponente y su codificación en exceso 127:
E (binario)
0000 0000
0000 0001
0000 0010
.
.
.
0111 1110
0111 1111
1000 0000
.
.
.
1111 1111
E (decimal)
0
1
2
.
.
.
126
127
128
.
.
.
255
e = E-127
-127
-126
-125
.
.
.
-1
+0
+1
.
.
.
+128
Una propiedad importante de la codificación sesgada es que se mantiene el orden natural de los vectores
binarios en relación con su magnitud: el más grande es el 1111 1111 y el más pequeño 0000 0000, cosa
que no ocurre en la representación en signo y magnitud, c1 o c2. Esta propiedad es importante a la hora de
comparar números en coma flotante.
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mantisa
La mantisa m se representa en coma fija normalizada (signo y magnitud), es decir, haciendo que el primer
dígito decimal valga 1, y ajustando convenientemente el exponente:
mantisa m
Æ
mantisa normalizada M = ± 0,1bbb...b
con b ∈ { 0, 1 }
Como el primer bit de la mantisa es siempre 1 no necesita almacenarse en el campo M, por lo que se
pueden representar mantisas con 24 bits con valores en decimal que van de:
0,5
correspondiente a la mantisa 0,100000000000000000000000
a
1 ( en realidad 1- 2 -24 ) correspondiente a la mantisa 0,111111111111111111111111
Base
Se suele utilizar la base 2. (la arquitectura IBM S/390 utiliza base 16)
Teniendo en cuenta lo anterior, un número real R vendría representado por:
V(R) = (-1)s • 2 E - 127 • M
con el siguiente formato para una longitud de palabra de 32 bits (1 para el signo de la mantisa, 8 para el
exponente, 23 para la magnitud de la mantisa):
31
30
23 22
s
E
signo
Exponente
0
M
Mantisa
Por ejemplo:
0111 1111 = 127
+ 1 0100
1001 0011
0,11010001 x 2 10100
-0,11010001 x 2 10100
0,11010001 x 2-10100
-0,11010001 x 2-10100
=
=
=
=
0
1
0
1
10010011
10010011
01101011
01101011
10100010000000000000000
10100010000000000000000
10100010000000000000000
10100010000000000000000
corresponden a las expresiones decimales:
0,8164062 x 2 20
- 0,8164062 x 2 20
0,8164062 x 2 -20
- 0,8164062 x 2 -20
=
=
=
=
856063,95
- 856063,95
0,000000778585
- 0,000000778585
Los rangos de números que pueden representarse en coma flotante con 32 bits y el formato descrito
aparecen en la siguiente gráfica:
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
desbordamiento
a cero negativo
desbordamiento
negativo
desbordamiento
a cero positivo
números negativos
representables
números positivos
representables
desbordamiento
positivo
recta real
-24
- (1 - 2 ) x 2
128
- 0,5 x 2
-127
0
0,5 x 2
-127
-24
(1 - 2 ) x 2
128
En esta gráfica se aprecia la existencia de 5 regiones excluidas de dichos rangos:
•
•
•
•
región de desbordamiento negativo
región de desbordamiento a cero negativo
región de desbordamiento a cero positivo
región de desbordamiento positivo
Problemas de la representación en coma flotante:
•
•
La anterior representación no contempla un valor para el cero. Sin embargo, en la practica se destina
una configuración de bits especial, como veremos en el estándar del IEEE.
Aparecen dos tipos de desbordamientos, el desbordamiento propiamente dicho que ocurre cuando una
215
operación aritmética da lugar a un número cuyo exponente es mayor que 128 (ejemplo 2
), y el
desbordamiento a cero que ocurre cuando una magnitud fraccionaria es demasiado pequeña (ejemplo
2-215)
•
Los números representados no están espaciados regularmente a lo largo de la recta real. Están más
próximos cerca del origen y más separados a medida que nos alejamos de él.
•
Tenemos que elegir el compromiso entre rango de representación y precisión de la misma repartiendo
convenientemente los bits entre mantisa y exponente. Si aumentamos los bits del exponente
aumentamos el rango pero disminuimos la densidad de números representados en dicho rango, ya que
la cantidad total de valores representables lo determina el número total de bits (32).
Hay que notar que con la representación en coma flotante no se representan más valores individuales. Con
32
32 bits sólo podemos representar 2
valores diferentes. La coma flotante distribuye estos valores entre
dos intervalos, uno positivo y otro negativo.
Estándar IEEE 754
Desarrollado para facilitar la portabilidad entre diferentes procesadores de programas numéricos
La base implícita es 2 y utiliza dos formatos, uno simple de 32 bits y otro doble de 64 bits, además define
dos formas ampliadas de estos formatos (dependientes de la implementación).
formato simple
31
30
23 22
s
E
signo
Exponente
0
f
Mantisa
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
formato doble
63
62
52 51
s
signo
0
E
f
Exponente
Mantisa
En el formato simple, los valores de exponente de 1 a 254 representan números en coma flotante
normalizados distintos de cero, con exponente sesgado en un rango de -127 a +127 y
mantisa con un 1 implícito a la izquierda del punto decimal, lo que significan 24 bits efectivos.
Ejemplo:
RIEEE = 1 10000001 01000000000000000000000
↓ ↓
↓
- e = 129 - 127 = 2
f = 0.01(2 = 0.25(10 => 1.f = 1.25(10 => R(10 = -1.25 • 2 2 = - 5
En este estándar no todos los patrones de bits se interpretan como valores numéricos, algunas se utilizan
para representar valores especiales:
1)
Un exponente cero con una fracción cero representa al +0 ó -0, dependiendo del bit de signo.
2) Un exponente todo unos con una parte fraccionaria cero representa al +∞ o al -∞, dependiendo del bit
de signo.
3)
Un exponente de todo unos con una fracción distinta de cero se conoce como NaN (Not a Number) y
se emplea para indicar varias condiciones de excepción.
4) Un exponente cero con una parte fraccionaria distinta de cero representa un número denormalizado.
En este caso el bit a la izquierda de la coma es cero y el exponente original -126.
En la siguiente tabla resumimos la interpretación de los números en coma flotante y simple precisión:
signo
0
1
0
1
0
1
0 ó1
0 ó1
0
1
positivo normalizado ≠0
negativo normalizado ≠0
cero positivo
cero negativo
más infinito
menos infinito
NaN silencioso
NaN indicador
positivo denormalizado
negativo denormalizado
precisión simple (32 bits)
exponente
0<E<255
0<E<255
0
0
255(todos 1s)
255(todos 1s
255(todos 1s
255(todos 1s
0
0
fracción
f
f
0
0
0
0
≠0
≠0
f≠0
f≠0
valor
2 E - 127(1,f)
-2 E - 127(1,f)
0
-0
∞
-∞
NaN
NaN
2 E - 126(0,f)
-2 E - 126(0,f)
Infinito
n
n
n
n
n
+
+
x
(+
(+
(((+
∞)
∞)
∞)
∞)
∞)
=
=
=
=
=
+
+
+
∞
∞
∞
∞
∞
n
(+
(((+
÷ (+∞)
∞)+ (+
∞)+ (∞)- (+
∞)- (-
= +0
∞) =
∞) =
∞) =
∞) =
+
+
∞
∞
∞
∞
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
NaN indicadores y silenciosos
Un NaN es un valor simbólico codificado en formato de coma flotante. Existen dos tipos: indicadores y
silenciosos. Un NaN indicador señala una condición de operación no válida siempre que aparece como
operando. Permiten representar valores de variables no inicializadas y tratamientos aritméticos no
contemplados en el estándar.
Los NaN silenciosos se propagan en la mayoría de las operaciones sin producir excepciones. La siguiente
tabla indica operaciones que producen un NaN silencioso:
Operación
Suma o resta
Multiplicación
División
Resto
Raíz cuadrada
(+
((+
(-
∞)+
∞)+
∞)∞)-
((+
(+
(-
∞)
∞)
∞)
∞)
0 x ∞
0/0
∞/∞
x RE 0
∞ RE y
x con x < 0
Números denormalizados
Se incluyen para reducir las situaciones de desbordamiento hacia cero de exponentes. Cuando el exponente
del resultado es demasiado pequeño se denormaliza desplazando a la derecha la parte fraccionaria e
incrementando el exponente hasta que el exponente esté dentro de un rango representable.
Caracteres
ASCII (American Standard Code for Information Interchange)
Utiliza un patrón de 7 bits con el que se pueden representar hasta 128 caracteres diferentes, suficientes para
codificar los caracteres del alfabeto incluyendo signos especiales y algunas acciones de control. El patrón
011XXXX representa los dígitos decimales del 0 al 9 con los correspondientes valores binarios para
XXXX.. Así, 011 0000 representa al 0; 011 0001 representa al 1; etc.
EBCDIC(Extended Binary-Coded-Decimal Interchange Code)
Se trata de un código de 8 bits utilizado por IBM. En este caso los dígitos decimales del 0 al 9 vienen
codificados por los patrones del 1111 0000 al 1111 1001.
Como se puede observar en ambos casos la representación es compatible con la BCD empaquetada de 4
bits. Además, el valor binario (sin signo) de ambos códigos mantiene el orden de los símbolos
correspondientes a los dígitos decimales y caracteres, lo que facilita la ordenación de información
simbólica en los programas.
Compresión de datos
La representación de datos comprimidos ha ido adquiriendo cada vez más importancia debido a la
utilización de mayores cantidades de información, sobre todo en las aplicaciones multimedia.
Comprimiendo datos se optimiza tanto la memoria utilizada para su almacenamiento como el tiempo de
transmisión por las redes. Uno de los métodos de compresión más conocido es el llamado de Lempel-Ziv
(LZ), que aprovecha de forma bastante simple las repeticiones de ciertos patrones de bits que aparecen en
una cadena. Se aplica a cualquier tipo de información representada por una cadena de bits y se realiza en
los siguientes pasos:
1) Se descompone la cadena de modo que no se repita el mismo patrón de bits. Para ello:
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
a) se coloca un separador después del primer dígito
b) el siguiente separador se coloca de modo que el fragmento entre separadores sea el
más corto posible que no haya aparecido previamente.
El proceso continúa hasta fragmentar toda la cadena.
Ejemplo: la cadena de bits
101100101001101001000
se fragmentaría de la forma siguiente:
1-0-11-00-10-100-110-1001-000
2) Se enumeran los fragmentos.
1 2 3 4 5 6
7
8
9
1-0-11-00-10-100-110-1001-000
Cada fragmento es siempre la concatenación de un fragmento prefijo aparecido con anterioridad, y de un
bit adicional, 0 ó 1. Por ejemplo, el fragmento número 3, 11, es el número 1 seguido de un 1; el número 6,
100, es el 5 seguido de un 0; y así sucesivamente.
3) Se sustituye cada fragmento por el par (número de prefijo, bit adicional). El 0 indicará el
prefijo vacío. En nuestro ejemplo:
(0,1)-(0,0)-(1,1)-(2,0)-(1,0)-(5,0)-(3,0)-(6,1)-(4,0)
4) Se codifican en binario los números de los prefijos.
En nuestro ejemplo, como aparecen siete prefijos, se necesitan tres bits para codificarlos:
(000,1)-(000,0)-(001,1)-(010,0)-(001,0)-(101,0)-(011,0)-(110,1)-(100,0)
5) Se quitan los paréntesis y los separadores y obtenemos la cadena de bits comprimida:
000100000011010000101010011011011000
La descompresión se realiza siguiendo el proceso inverso y conociendo el número de bits de la
codificación del prefijo, tres en nuestro ejemplo. Sabemos entonces que cada fragmento está codificado por
cuatro bits, tres para el prefijo y uno para el bit adicional:
000100000011010000101010011011011000
1) 0001-0000-0011-0100-0010-1010-0110-1101-1000
2) (000,1)-(000,0)-(001,1)-(010,0)-(001,0)-(101,0)-(011,0)-(110,1)-(100,0)
3) (0,1)-(0,0)-(1,1)-(2,0)-(1,0)-(5,0)-(3,0)-(6,1)-(4,0)
1 2 3 4 .......
4) 1-0-11-00 .......
En el ejemplo anterior la cadena resultante es más larga que la original, en contra del propósito del
método. La causa es la poca eficiencia del método para cadenas muy cortas. Cuando se aplica a una cadena
muy larga, los fragmentos crecen en longitud más rápidamente que las subcadenas de bits necesarias para
su codificación. Por ejemplo, supongamos que una cadena de 100.000 bits se ha dividido en 1.000
fragmentos con un tamaño medio de 100 bits (los primeros serán probablemente más cortos y los últimos
más largos). Para codificar el prefijo solo se necesitan 10 bits (210 = 1024). Por tanto cada fragmento estará
codificado por 11 bits (los 10 del prefijo más el bit adicional), mientras que su longitud original era de 100
bits. Es decir, el método lograría comprimir el fichero de datos a un 10% de su tamaño original.
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
100.000 bit s
100 bit s
1.000 fr a gm en t os
1.000 fragmentos => 20 bits para su codificación
+1 bit adicional
21 bits/fragmento x 1.000 fragmentos = 21.000 bits
luego 100.000 bits se comprimen a 21.000 bits => al 20% de su tamaño
Está claro que cuanto más largos sean los fragmentos, más eficaz será el método. Esto ocurre si la
cadena tiene muchas repeticiones. El caso extremo es una cadena con todo ceros. En este caso la
fragmentación es muy simple:
0-00-000-0000-00000-000000-0000000-...
Ejemplo1: cadena de 28 ceros, se comprime en una de igual tamaño
0000000000000000000000000000
1 2 3
4
5
6
7
0-00-000-0000-00000-000000-0000000
(0,0)-(1,0)-(2,0)-(3,0)-(4,0)-(5,0)-(6,0)
000,0-001,0-010,0-011,0-100,0-101,0-110,0
0000001001000110100010101100
Ejemplo2: cadena de 36 ceros, se comprime en una de 32 bits
000000000000000000000000000000000000
1 2 3
4
5
6
7
8
0-00-000-0000-00000-000000-0000000-00000000
(0,0)-(1,0)-(2,0)-(3,0)-(4,0)-(5,0)-(6,0)-(7,0)
000,0-001,0-010,0-011,0-100,0-101,0-110,0-111,0
00000010010001101000101011001110
Ejemplo3: cadena de 55 ceros, se comprime en una de 50
0000000000000000000000000000000000000000000000000000000
1 2 3
4
5
6
7
8
9
10
0-00-000-0000-00000-000000-0000000-00000000-000000000-0000000000
(0,0)-(1,0)-(2,0)-(3,0)-(4,0)-(5,0)-(6,0)-(7,0)-(8,0)-(9,0)
0000,0-0001,0-0010,0-0011,0-0100,0-0101,0-0110,0-0111,0-1000,0-1001,0
00000000100010000110010000101001100011101000010010
Una cadena con n ceros se dividiría en un número de fragmentos m -1 tal que:
n = 1+2+3+...+(m-1) = m(m+1)/2
(progresión aritmética)
lo que implica que aproximadamente m ≈ 2n .
Para 1MB, que son 8.388.608 bits, tendríamos 4.096 fragmentos y necesitaríamos sólo 12 bits
para describir el prefijo. Por tanto, necesitaríamos 13 bits para describir cada fragmento o 53.248 bits para
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
describir el fichero entero. El fichero habría quedado reducido a 6,65 KB, es decir, al 0,63 % de su tamaño
original.
El caso opuesto es una cadena de bits cuya fragmentación contenga todas las subcadenas posibles.
Por ejemplo, hay 128 subcadenas de 8 bits. Si la fragmentación resultara en una concatenación de todas
ellas, se necesitarían 8 bits para describir el prefijo y 9 para describir el fragmento, mientras que la longitud
original de los fragmentos es de 8 bits. El método resultaría perfectamente inútil en este caso.
El método LZ es más eficaz cuanto más regular sea la cadena, es decir, cuantas más repeticiones
contenga. Esta característica está de acuerdo con el teorema de Shannon, que afirma que cuanto más
regular y menos aleatoria sea una cadena (menor sea su entropía), mayor será su grado de compresión.
Shannon demostró que para una cadena de n bit aleatorios y completamente independientes unos de otros
la entropía vale:
H = -n[p log2 p + (1 - p) log2 (1 - p)]
donde p es la probabilidad de que cada bit sea un 1.
Como el programa WinZip de Windows utilizan alguna variante de este método, se puede
comprobar empíricamente la fórmula de Shannon creando ficheros de cadenas de bits aleatorios con
diferentes probabilidades p = 0,01; 0,1; 0,2, etc. y comprimiendo los ficheros con WinZip. Después se
podrá observar que los tamaños comprimidos están en la misma relación que los previstos en la fórmula de
Shannon.
Ejemplo4: cadena de 55 ceros seguida de un 1, se comprime en una de 55 bits
00000000000000000000000000000000000000000000000000000001
1 2 3
4
5
6
7
8
9
10
11
0-00-000-0000-00000-000000-0000000-00000000-000000000-0000000000-1
(0,0)-(1,0)-(2,0)-(3,0)-(4,0)-(5,0)-(6,0)-(7,0)-(8,0)-(9,0)-(0,1)
0000,0-0001,0-0010,0-0011,0-0100,0-0101,0-0110,0-0111,0-1000,0-1001,0-0000,1
0000000010001000011001000010100110001110100001001000001
Ejemplo5: cadena de 42 bits con máxima variación, se comprime en una de 64
0100011011000001010011100101110111
1 2 3 4 5 6 7
8
9
10 11 12 13 14
0-1-00-01-10-11-000-001-010-011-100-101-110-111
(0,0)-(0,1)-(1,0)- (1,1-(2,0)-(2,1)-(3,0)-(3,1)-(4,0)-(4,1)-(5,0)-(5,1)-(6,0)-(6,1)
000,0-000,1-001,0-001,1-010,0-010,1-011,0-011,1-100,0-100,1-101,0-101,1-110,0-110,1
00000001001000110100010101100111100010011010101111001101
Tipos de datos en el 68000
Utiliza la alternativa big-endian para ordenar los bytes de las palabras (2 bytes) y dobles palabras (4
bytes), es decir, el byte menos significativo se almacena en la dirección más baja. Dispone de los siguientes
tipos:
‰ Entero con signo en c2: de 1 byte, 2 bytes y 4 bytes.
‰ Entero sin signo: de 1 byte, 2 bytes y 4 bytes.
‰ BCD empaquetado (2 dígitos d 4 bits en un byte)
Carece de datos en formato de coma flotante
Tipos de datos en el Pentium II
Puede trabajar con tipos de datos de 8 (byte), 16 (palabra), 32 (palabra doble) y 64 (palabra cuádruple)
bits de longitud. Los tipos mayores de 1 byte no es necesario que estén alineados en memoria, el
procesador se encarga de ello si no lo están. Utiliza la alternativa little-endian para ordenar los bytes de las
palabras, dobles palabras y cuádruples palabras, es decir, el byte menos significativo se almacena en la
dirección más baja. Admite una gran variedad de tipos:
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
‰
‰
‰
‰
‰
‰
‰
‰
General: byte, palabra, doble palabra y cuádruple palabra con contenido binario arbitrario.
Entero: valor binario con signo en c2 de una palabra, una doble palabra, o una cuádruple palabra.
Ordinal: entero sin signo de un byte, una palabra o una doble palabra.
BCD desempaquetado: un dígito BCD en cada byte
BCD empaquetado: dos dígitos BCD en un byte.
Campo de bits: secuencia contigua de bits independientes no alineada de hasta 232 - 1 bits.
Cadena de bytes: Secuencia contigua de bytes, palabras, o dobles palabras de hasta 232 - 1 bytes.
Coma flotante:
• IEEE 754 de simple precisión (32 bits)
• IEEE 754 de doble precisión (64 bits)
• IEEE 754 de precisión ampliada(78 bits)
2. Instrucciones que operan sobre datos.
En este apartado revisaremos las instrucciones máquina que operan sobre datos. En el siguiente
veremos las que controlan el flujo de ejecución. Podemos clasificar las instrucciones que operan sobre
datos en los siguientes grupos:
‰ Movimiento o transferencia de datos
‰ Desplazamiento y rotación
‰ Lógicas y manipulación de bits
‰ Transformación de datos
‰ Entrada/salida
‰ Manipulación de direcciones
En otro apartado estudiaremos las nuevas instrucciones paralelas que operan simultáneamente sobre un
conjunto de datos del mismo tipo, conocidas como SIMD (Single Instructions Multiple Data) e
introducidas por primera vez en el Pentium para acelerar las operaciones enteras de las aplicaciones
multimedia (MMX), y ampliadas en el Pentium III a las operaciones paralelas de coma flotante (SSE:
Streaming SIMD Extension), muy frecuentes en las aplicaciones visuales.
2.1 Instrucciones de movimiento o transferencia de datos
Se trata del tipo más básico de instrucción máquina. Transfieren el contenido de información entre
elementos de almacenamiento: registros (REG), memoria (MEM) y PILA. Dependiendo de la fuente y
destino de la transferencia estas instrucciones suelen recibir nombres diferentes que resumimos en la
siguiente tabla:
REG --> REG: transferencia
REG -->MEM: almacenamiento (store)
REG --> PILA: inserción (push)
MEM --> REG: carga (load)
MEM --> MEM: movimiento(move)
MEM --> PILA: inserción (push)
PILA --> REG: extracción (pop)
PILA --> MEM: extracción (pop)
Una instrucción de este tipo deberá especificar los siguientes elementos:
• Tipo de transferencia. Para especificar el tipo existen dos alternativas:
- Una instrucción genérica, con un único CO, siendo el operando el que especifica el tipo de
movimiento. Ejemplo MOVE
- Una instrucción diferente para cada tipo de movimiento. Ejemplos TR, STO, LD, PUSH, POP
• Direcciones de la fuente y destino de la transferencia. Son los operandos de la instrucción con sus
correspondientes tipos de direccionamiento
• Tipo y tamaño del dato transferido: byte, media palabra, una palabra, doble palabra, etc. Ejemplo MC
68.X
MOVE
tipo OPs
DESTINO
b
W
LW
FUENTE
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• Número de datos a mover:
- Movimiento simple. Como el ejemplo anterior
- Movimiento múltiple
Ejemplo: MC 68.X
MOVEM
Dir
Tamaño Reg.
Dir Memoria
16 o 32 bits
Máscara de la lista de registros
Memoria
Registros
Reg --> Mem
Mem --> Reg
Ejemplo VAX-11
MOVEC
Long. Fuente
Dirección Fuente
Relleno
Long. Destino
Dirección Destino
Memoria
Memoria
Relleno
Long. Fuente = Long. Destino => transferencia total
Long. Fuente > Long. Destino => transferencia parcial: finaliza cuando se agota el destino
Long. Fuente < Long. Destino => transferencia total: se completa con el carácter de relleno
2.2 Instrucciones de desplazamiento y rotación
Una instrucción de este tipo deberá especificar los siguientes elementos:
• Tipo de operación: desplazamiento aritmético, lógico, rotación (especificado en CO)
• Cuenta: número de posiciones (normalmente 1 bit, especificado en CO)
• Dirección: izquierda, derecha (especificado en CO o en el signo de Cuenta)
• Tipo de dato: normalmente su longitud
‰
Desplazamientos aritméticos
S
desplazamiento aritmético derecha
‰
S
0
desplazamiento aritmético izquierda
Desplazamientos lógicos
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
0
0
desplazamiento lógico derecha
‰
desplazamiento lógico izquierda
Rotaciones
rotación derecha
rotación izquierda
2.3 Instrucciones lógicas y de manipulación de bits
Son instrucciones para la manipulación de bits individuales dentro de una unidad direccionable (byte,
palabra, etc.) a través de operaciones booleanas. Las instrucciones lógicas operan bit a bit sobre los
vectores de bits de sus operandos, las más frecuentes en los repertorios son las siguientes:
‰ • NOT (complementación)
‰ • AND (conjunción lógica)
‰ • OR (disyunción lógica)
‰ • XOR (disyunción exclusiva)
‰ • Equivalencia
Con la AND podemos realizar funciones de máscara cuando queramos seleccionar un conjunto
determinado de bits, y con la XOR podemos complementar bit a bit un segmento de bits. En el siguiente
ejemplo hemos creado una máscara sobre los 4 bits menos significativos de R1 haciendo la AND con R2, y
hemos complementado los 6 bits centrales de R1 haciendo la XOR con R3:
<R1> = 1010 0101
<R2> = 0000 1111
<R3> = 0111 1110
<R1> AND <R2> = 0000 0101
<R1> XOR <R3> = 1101 1011
Las instrucciones de manipulación de bits permiten poner a 0 ó a 1 determinados bits del
operando, en especial algunos bits del registro de estado.
2.4 Instrucciones aritméticas
Casi todos los repertorios disponen de las operaciones aritméticas básicas de suma resta multiplicación
y división sobre enteros con signo (coma fija). Con frecuencia disponen también de operaciones sobre
reales (coma flotante) y decimales (BCD).
‰
‰
‰
‰
‰
‰
‰
‰
‰
Suma
Resta
Multiplicación
División
Cambio de signo
Valor absoluto
Incremento
Decremento
Comparación
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
2.5 Instrucciones de transformación de datos
‰
Traducción: traducen valores de una zona de memoria utilizando una tabla de correspondencia.
‰
Conversión: operan sobre el formato de los datos para cambiar la representación.
Por ejemplo cambio de BCD a binario o cambio de formato EBCDIC a formato ASCII como realiza la
instrucción Translate (TR) del S/370.
2.6 Instrucciones de entrada/salida
Estas instrucciones coinciden con las de referencia a memoria de carga y almacenamiento (LOAD
y STORE) para aquellos procesadores que disponen de un único espacio de direcciones compartido para
Memoria y E/S.
Los procesadores con espacio de E/S independiente disponen de instrucciones específicas tales
como:
‰
Inicio de la operación: START I/O
‰
Prueba del estado: TEST I/O
‰
Bifurcación sobre el estado: BNR (Branch Not Ready)
‰
Entrada: IN que carga en el procesador un dato de un dispositivo periférico
‰
Salida: OUT que lo envía a un dispositivo periférico.
2.7 Instrucciones de manipulación de direcciones
Estas instrucciones calculan la dirección efectiva de un operando para manipularla como un dato
cargándola en un registro o una pila.
Como ejemplos tenemos las instrucciones LEA y PEA del 68000:
LEA.L opf, An: dirección fuente --> An
lleva dirección efectiva del operando fuente opf al registro de direcciones An
PEA.L opf: dirección fuente --> Pila
lleva dirección efectiva del operando fuente opf a la Pila de la máquina a través del registro SP con
predecremento: dirección --> -(SP)
2.8 Instrucciones que operan sobre datos del Pentium II
MOV
PUSH
PUSHA
MOVSX
MOVS
LODS
Movimiento o transferencia de datos
Transferencia entre registros, o entre registro y memoria
Inserción del operando en la pila
Inserción de todos los registros en la pila
Transfiere un byte a una palabra, o una palabra a una doble palabra con extensión del
signo
Mueven un byte, palabra o doble palabra de una cadena indexada
Carga un byte, palabra o doble palabra de una cadena
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
SHL
SHR
SAL
SAR
ROL
ROR
Desplazamiento y rotación
Desplazamiento lógico a la izquierda
Desplazamiento lógico a la derecha
Desplazamiento aritmético a la izquierda
Desplazamiento aritmético a la derecha
Rotación izquierda
Rotación derecha
SETcc
Lógicas y manipulación de bits
Conjunción lógica de los operandos
BitTes&Set utilizada para primitivas de sincronismo en multiproceso
Identifica el primer bit a 1 de una palabra o doble palabra y almacena su número de
posición en un registro
Pone un byte a cero o a uno dependiendo de algún bit del registro de estado
XLAT
Transformación de datos
Traduce con la ayuda de una tabla
IN
OUT
Entrada/Salida
Entrada de dato desde un dispositivo de E/S
Salida de dato hacia un dispositivo de E/S
LEA
Manipulación de direcciones
Carga el desplazamiento del operando fuente (no su valor) en el destino
AND
BTS
BSF
2.9 Instrucciones que operan sobre datos del 68000
(Ver bibliografía de Laboratorio de Estructura de Computadores)
2.10 Instrucciones paralelas SIMD (Single Instruction Multiple Data)
Se trata de instrucciones muy optmizadas para realizar operaciones multimedia. Fueron
introducidas en el 96 en la microarquitectura P6 de la familia IA-32 como tecnología MMX del
Pentium. Estas instrucciones operan sobre los datos siguiendo un modo SIMD(Single Instruction
Multiple Data), es decir, realizando la misma operación (single instruction) en paralelo sobre múltiples
secuencias de datos, consiguiendo una mejora de velocidad sobre la alternativa secuencial del orden
de 2 a 8 veces. Las ventajas de estas extensiones SIMD se habían
probado con éxito en los
repertorios de otros procesadores, por ejemplo, en el SPARC de Sun Microsystems con el nombre de
VIS (Visual Instruction Set) y PA-RISC de Hewlett-Packard con el nombre de conjunto de
instrucciones MAX-2.
Los programas multimedia operan sobre señales muestreadas de vídeo o audio
representadas por grandes vectores o matrices de datos escalares relativamente pequeños (8 a 16
bits) o incluso 32 bits para señales 3D
Tipos de datos
Los diferentes medios de una aplicación multimedia suelen utilizar el siguiente número de bits para
codificar sus informaciones básicas:
Gráficos y vídeos: utilizan 8 bits para cada punto (escala de grises) o componente de color.
Audio: utiliza 16 bits para cada valor muestreado de la señal.
Gráficos 3D: pueden utilizar hasta 32 bits por punto.
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Para poder realizar el procesamiento paralelo de estas informaciones básicas, MMX define los tres
tipos de datos siguientes:
8 bytes empaquetados
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
B
4 palabras empaquetadas
1 palabra
1 palabra
1 palabra
1 palabra
W
2 dobles palabras empaquetadas
1 doble palabra
1 doble palabra
D
1 cuádruple palabras empaquetada
Q
1 cuádruple palabra
Registros MMX
Existen 8 registros de propósito general MMX que se designan como mmi (i = 0,...7). Estos
registros no tienen una realidad independiente dentro de la organización del procesador, se soportan
sobre los 64 bits menos significativos de los registros de punto flotante de 80 bits. El campo de
exponente del correspondiente registro de punto flotante (bits 64-78) y el bit de signo (bit 79) se pone
a 1’s, convirtiendo el contenido en un valor NaN desde el punto de vista de los valores en punto
flotante. De esta forma se reduce la posible confusión, asegurando que los valores de datos MMX no
se tomen como valores en punto flotante. Las instrucciones MMX acceden sólo a los 64 bits menos
significativos de los registros. Este uso dual de los registros de punto flotante no significa que se
pueda mezclar en las aplicaciones ambos usos de forma indiscriminada. Dentro de una aplicación el
programador deberá asegurar que el código MMX y el código en punto flotante estén encapsulados
en rutinas separadas.
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
1 byte
Repertorio de instrucciones MMX
Formato CSO [<tipo de datos>] <registros MMX>
CSO = Código Simbólico de Operación
Tipo de datos = B, W, D ó Q
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ejemplo: instrucción de suma paralela con truncamiento de dos registros MMX con 8 bytes
empaquetados
PADDB mmi, mmj
<mmi> + <mmj> Æ mmj
0101
0101
+
0101
+
+
0101
0101
+
+
0101
+
0101
0101
+
mmi
+
0101
0101
0101
0101
0101
0101
0101
0101
mmj
1010
1010
1010
1010
1010
1010
1010
1010
mmi
Instrucciones Aritméticas
Este grupo lo forman 9 instrucciones, 3 de suma, 3 de resta y 3 de multiplicación. En ellas se
distingue entre la aritmética con saturación y con truncamiento. En la aritmética binaria con
truncamiento el resultado de una operación con desbordamiento queda truncado por la pérdida del bit
de desbordamiento. Por el contrario, en la aritmética con saturación, cuando la suma produce un
desbordamiento, o la resta un desbordamiento negativo, el resultado se fija respectivamente al mayor
o menor valor representable.
Ejemplo:
+
1111 0000 0000 0000
0011 0000 0000 0000
rebose --> 1
0010 0000 0000 0000
resultado en aritmética con truncamiento
1111 1111 1111 1111 resultado en aritmética con saturación
La aritmética con saturación se utiliza, por ejemplo, cuando se suman dos números que
representan intensidad de imagen (nivel de negro., por ejemplo, o de un color base) y no se quiere
que el resultado sea menos negro (menos intenso en el caso de color base) que la suma de las
imágenes originales. Las instrucciones de este grupo son las siguientes:
Instrucciones Aritméticas
PADD [B, P, D] mmi, mmj
PADDS [B, W] mmi, mmj
PADDUS [B, W] mmi, mmj
PSUB [B,W, D ] mmi, mmj
PSUBS [B,W] mmi, mmj
PSUDUS [B, W] mmi, mmj
PMULHW
PMULLW mmi, mmj
PMADDWD mmi, mmj
Semántica
Suma paralela con truncamiento de 8 B, 4 W ó 2 D
Suma con saturación
Suma sin signo con saturación
Resta con truncamiento
Resta con saturación
Resta sin signo con saturación
Multiplicación paralela con signo de 4 palabras de 16 bits, con elección
de los 16 bits más significativos del resultado de 32 bits
Multiplicación paralela con signo de 4 palabras de 16 bits, con elección
de los 16 bits menos significativos del resultado de 32 bits
Multiplicación paralela con signo de 4 palabras de 16 bits, y suma de
pares adyacentes del resultado de 32 bits
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Instrucciones de Comparación
La tecnología MMX dispone de instrucciones paralelas de comparación que generan una máscara de bits
como resultado. Estas instrucciones posibilitan la realización de cálculos dependientes de los resultados
anteriores eliminando la necesidad de instrucciones de bifurcación condicional. La máscara resultado de
una comparación tiene todo 1’s en los elementos correspondientes a una comparación con resultado true, y
todo 0’s cuando el resultado de la comparación es false:
a3
a2
a1
a0
=
=
=
=
b3
b2
b1
b0
SI
a3 = b3
a2 ≠ b2
a1 = b1
a0 ≠ b0
ENTONCES
11...11
00...00
11...11
00...00
Las instrucciones de este grupo son las siguientes:
Instrucciones de Comparación
PCMPEQ [B, W, D] mmi, mmj
PCMPGT [B, W, D]
Semántica
Comparación paralela de igualdad, el resultado es una máscara de 1´s
si True y de 0´s si False
Comparación paralela de > (magnitud), el resultado es una máscara de
1´s si True y de 0´s si False
mmi, mmj
Instrucciones de Conversión
La tecnología MMX utiliza dos conjuntos de instrucciones para realizar conversiones entre los tipos de
datos MMX (PACK y UNPACK). Las instrucciones UNPACK toman un tipo de datos pequeño y producen
uno mayor (por ejemplo, uno de 16 bits en otro de 32 bits). Las instrucciones UNPACK toman dos
operandos y los entrelazan, como ocurre en el siguiente ejemplo para datos con componentes de 16 bits:
mmi
b3 b2
b1 b0
mmj
a3 a2
b1
b0 a0
a1 a0
mmi
a1
Si sólo se quiere desempaquetar elementos de 16 bits en elementos de 32 bits se ejecuta la
instrucción UNPACK con un operando de todos 0’s. El resultado es 2 palabras de 32 bits con 0’s en
las posiciones más significativas:
mmi
0
0
0
0
mmj
a3 a2
0
a1
0
a1 a0
mmi
a0
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Las instrucciones de este grupo son las siguientes:
Instrucciones de Conversión
PACKUSWB mmi, mmj
PACKSS [WB, DW] mmi, mmj
PUNPCKH [BW, WD, DQ] mmi, mmj
PUNPCKL [BW, WD, DQ] mmi, mmj
Semántica
Empaqueta palabras en bytes con saturación sin signo
Empaqueta palabras en bytes con saturación con signo, o palabras
dobles en palabras
Desempaqueta en paralelo los B, W o D más significativos del registro
MMX. Mezcla entrelazada
Desempaqueta en paralelo los B, W o D menos significativos del registro
MMX. Mezcla entrelazada
Instrucciones Lógicas
El repertorio MMX dispone de 4 operaciones lógicas que realizan otras tantas operaciones bit a bit de este
tipo sobre los 64 bits de los operandos. Combinadas con las máscaras resultantes de las instrucciones de
comparación permiten la realización de cálculos alternativos en función de resultados anteriores. Las
instrucciones de este grupo son las siguientes:
Instrucciones Lógicas
PAND mmi, mmj
PANDN mmi, mmj
POR mmi, mmj
PXOR mmi, mmj
Semántica
AND lógico bit a bit (64 bits)
AND NOT lógico bit a bit (64 bits)
OR lógico bit a bit (64 bits)
XOR lógico bit a bit (64 bits)
Instrucciones de Desplazamiento
Este grupo lo constituyen operaciones de desplazamiento y rotación lógicos y aritméticos realizados en
paralelo sobre cada uno de los elementos de datos de uno de sus operandos. El otro indica el número de
bits de desplazamiento o rotación. Las instrucciones de este grupo son las siguientes:
Instrucciones de Desplazamiento
PSLL [W, D, Q]
mmi
PSRL [W, D, Q]
PSRA [W, D,]
mmi
mmi
Semántica
Desplazamiento lógico izquierda paralelo de W, D ó Q tantas veces
como se indique en el registro MMX o valor inmediato
Desplazamiento lógico derecha paralelo de W, D ó Q tantas veces como
se indique en el registro MMX o valor inmediato
Desplazamiento aritmético derecha paralelo de W ó D tantas veces
como se indique en el registro MMX o valor inmediato
Instrucciones de Transferencia
La única instrucción de este grupo permite la transferencia de información entre registros
MMX, la carga de registros MMX desde memoria, y el almacenamiento de los contenidos de los
registros MMX en memoria:
Instrucción de Transferencia
MOV [D, Q] mmi, memoria
Semántica
Transfiere una D ó Q a/desde el registro MMX
Ejemplo 1. Codificación MMX de un bucle iterativo
for i = 0
if a[i] =
Salida[i]
Salida[i]
to 3
color then
= c[i] else
= a[i]
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Fase 1
mm0
A
color
mm1
Color
00...00
mm0
a3
a2
a1
a0
=
=
=
=
color
color
11...11
00...00
color
11...11
Fase 2
a3
a2
a1
mm2
a0
c3
c2
c1
AND = (NOT-AND)mm0
00...00
11...11
0
a2
00...00
0
c0
mm4
C
AND
11...11
mm0
a0
mm0
11...11
00...00
c3
11...11
00...00
mm0
c1
0
mm4
0
OR
c3
a2
c1
a0
mm0
El programa MMX que implementa el proceso iterativo es el siguiente:
MOVQ
MOVQ
MOVQ
MOVQ
PCMPEQW
PAND
PANDN
POR
mm0, A
mm2, mm0
mm4, C
mm1, Color
mm0, mm1
mm4, mm0
mm0, mm2
mm0, mm4
;carga el array A
;hace copia del array A
;carga el array C
; carga Color
;compara A con Color
;selecciona elementos de C
;selecciona elementos de A
;genera la salida
Ejemplo 2. Transposición de matrices
T
⎡a3 a 2 a1 a 0 ⎤
⎡d 3 c3 b3 a3 ⎤
⎢b b b b ⎥
⎢
⎥
⎢ 3 2 1 0 ⎥ = ⎢d 2 c 2 b2 a 2 ⎥
⎢c3 c 2 c1c0 ⎥
⎢d1c1b1 a1 ⎥
⎢
⎥
⎢
⎥
⎣d 0 c0 b0 a 0 ⎦
⎣d 3 d 2 d1 d 0 ⎦
El proceso se realiza en dos pasos y supondremos que los elementos de la matriz son palabras de
16 bits. En la fase 1 se utiliza la instrucción UNPACK para entrelazar los elementos de filas
adyacentes; y en la fase 2 se desempaquetan los resultados de la primera fase utilizando esta vez
instrucciones UNPACK de doble palabra (32 bits) para producir la salida deseada. El proceso se
resume en la siguiente figura:
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
mm4
d3 d2
mm3
c3 c2
d1 d0
c1 c0
mm2
b3 b2
mm3
mm1
a3 a2
b1
b0 a0
a1 a0
mm1
d1
mm3
d1 c1
b1 b0
c1
d0 c0
d0 c0
mm1
b1 a1
mm1
c0 b0 a0
d0
b0 a0
d1
a1
mm3
c1 d0 c0
d1
mm5
b1 a1
b0 a0
mm5
c1 b1 a1
El programa MMX que implementa el proceso de transposición es el siguiente:
MOVQ
MOVQ
MOVQ
MOVQ
PUNPCKLWD
PUNPCKLWD
MOVQ
PUNPCKLDQ
PUNPCKHDQ
mm1, fila1
mm2, fila2
mm3, fila3
mm4, fila4
mm1, mm2
mm3, mm4
mm5, mm1
mm1, mm3
mm5, mm3
;carga la primera fila de la matriz
;carga la segunda fila de la matriz
;carga la tercera fila de la matriz
;carga la cuarta fila de la matriz
;desempaqueta palabras orden inf. de filas 1 & 2, mm1=[b1,a1,b0,a0]
;desempaqueta palabras orden inf. de filas 3 & 4, mm3=[d1,c1,d0,c0]
;copia mm1 en mm5
;desempaqueta dobles palabras orden inferior -> mm1=[d0,c0,b0,a0]
;desempaqueta dobles palabras orden superior -> mm1=[d1,c1,b1,a1]
las otras 2 filas [d3,c3,b3,a3] y [d4,c4,b4,a4] se generan de forma análoga.
Ejemplo 3:
Función de desvanecimiento gradual de una imagen B y aparición simultanea de otra imagen A
Las dos imágenes A y B se combinan en un proceso que efectúa sobre cada par de pixels homólogos
la media ponderada por un factor de desvanecimiento fade que irá variando de 0 a 1, y su
complementario (1-fade), que lo hará de 1 a 0
Pixel_resultante = Pixel_A * fade + Pixel_B*(1 - fade)
El resultado es una transformación gradual de la imagen B en la imagen A a medida que fade pasa
de 0 a 1. Cada pixel ocupa 1 byte y hay que desempaquetarlo previamente a un valore de 16 bits
para adaptarlo al tamaño de las multiplicaciones MMX de 16 bits.
Si una imagen tiene una resolución de 640 X 480 y en el cambio de imagen se emplean 255 valores
posibles para fade (fade codificado con 1 byte), será necesario ejecutar el proceso 640*480*255 =
7.833.600 veces. Eso para el caso de imágenes en blanco y negro, si fuesen en color necesitaríamos
esa cantidad multiplicada por 3 (tres componentes básicas del color), es decir 23.500.800. Para
secuenciar las operaciones pongamos la expresión anterior de la intensidad del pixel resultante de la
siguiente forma:
Pixel_resultante =
Pixel_A * fade + Pixel_B - Pixel_B*fade =
(Pixel_A - Pixel_B) * fade + Pixel_B
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Luego hay que restar al Pixel_A el valor del Pixel_B, multiplicar el resultado por fade y sumar
finalmente el valor del Pixel_B. A estas operaciones hay que añadir las previas de movimiento de
datos y desempaquetamiento. En la siguiente figura aparece el esquema del proceso:
a3
Imagen_A
a2 a1 a0
mm0
mm1
b3
Imagen_B
b2 b1 b0
Desempaquetar
mm0
a3
a2
a1
a0
b3
b2
b1
b0
mm1
Resta
mm0
r3
r2
r1
r0
x
x
x
x
fade
fade
fade
fade
mm3
=
r3*fade
=
r2*fade
=
r1*fade
=
r0*fade
mm0
+
+
+
+
b3
b2
b1
b0
=
=
nuevo3 nuevo2
mm1
=
nuevo1
=
nuevo0
mm0
r3
r1
mm0
empaqueta
r2
r0
El programa MMX que implementa este proceso es el siguiente:
PXOR
mm7, mm7
;pone a cero mm7
MOVQ
mm3, valor_fade
;carga en mm3 el valor de fade replicado 4 veces
MOVD
mm0, imagenA
;carga en mm0 la intensidad de 4 pixels de la imagen A
MOVD
mm1, imagenB
;carga en mm1 la intensidad de 4 pixels de la imagen B
PUNPCKLBW
mm0, mm7
;desempaqueta a 16 bits los 4 pixels de mm0
PUNPCKLBW
mm1, mm7
;desempaqueta a 16 bits los 4 pixels de mm1
PSUBW
mm0, mm1
;resta la intensidad de la imagen B de la de A
PMULHW
mm0, mm3
;multiplica el resultado anterior por el valor de fade
PADDDW
mm0, mm1
;suma el resultado anterior a la imagen B
PACKUSWB
mm0, mm7
;empaqueta en bytes los 4 resultados de 16 bits
3. Instrucciones de control del flujo de ejecución.
El orden de procesamiento de las instrucciones viene determinado por el avance del contador de
programa, que lo hace de forma secuencial con todas las instrucciones salvo con las de los siguientes
grupos:
‰
‰
Bifurcación condicional (e incondicional)
Bifurcación a subrutinas
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Este grupo de instrucciones juega un triple papel en las posibilidades expresivas y computacionales del
repertorio:
‰
Toma de decisiones en función de resultados previamente calculados. Las instrucciones de
bifurcación condicional cumplen este papel en el repertorio.
‰
Reutilización de parte del código del programa. Los procesos iterativos son el caso más elemental
de reutilización de código, que se construyen con instrucciones de bifurcación condicional. El
segundo caso es el de las subrutinas, con ellas se construyen los bloques (funciones y
procedimientos) de los lenguajes de alto nivel.
‰
Descomposición funcional del programa. Se trata del segundo papel que cumplen las subrutinas
dentro de un programa: facilitar la modularidad del mismo, y con ello su depuración y
mantenibilidad.
3.1 Instrucciones de bifurcación condicional
Los tres componentes básicos de las instrucciones de salto condicional son: el código de operación, la
condición de salto y la dirección destino.
CO
Condición
Dirección
Semántica:
IF Condición = True THEN
CP <-- Dirección
ELSE
CP <-- <CP> + 1
Gestión de la Condición
• Generación
a) Implícita: la condición se genera como efecto lateral de la ejecución de una
instrucción de manipulación de datos (ADD, SUB, LOAD, etc.)
b) Explícita: existen instrucciones específicas de comparación o test que sólo
afectan a las condiciones (CMP, TST, etc.)
• Selección
a) Simple: afecta a un sólo bit del registro de condiciones (Z, N, C, etc.)
b) Compuesta: afecta a una combinación lógica de condiciones simples (C+Z, etc.)
simples
nemotécnico
CC (carry clear)
CS (carry set)
NE (not equal)
EQ (equal)
VC (overflow clear)
VS (overflow set)
PL (plus)
MI (minus)
Condición
¬C
C
¬Z
Z
¬V
V
¬N
N
compuestas
nemotécnico
Condición
HI (high)
¬C • ¬Z
LS (low or same)
C+ Z
HS (high or same)
¬C
LO (low)
C
GE (greater or equal)
N xor ¬V
LT (less than)
N xor V
GT (greater than)
(N xor ¬V)and¬Z
LE (less or equal)
(N xor V)orZ
24
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• Uso
a) Con almacenamiento de la condición en un registro de estado o condición: una 1ª
instrucción de gestión de datos o comparación genera la condición que se
almacena en un registro de estado de la máquina, y una 2ª instrucción
selecciona la condición y bifurca en caso que sea cierta (True)
b) Con almacenamiento de la condición en un registro general: una 1ª instrucción de
gestión de datos o comparación genera la condición que se almacena en un
registro general de la máquina que debe especificarse en la misma, y una 2ª
instrucción selecciona la condición y bifurca en caso que sea cierta (True)
c) Sin almacenamiento de la condición: una única instrucción genera, selecciona la
condición y bifurca en caso que sea cierta (BRE R1, R2, DIR : salta a DIR si
<R1> = <R2>)
Especificación de la dirección
• direccionamiento directo (Jump)
• direccionamiento relativo (Branch)
• direccionamiento implícito (Skip: salta una instrucción si se cumple la condición))
3.2 Subrutinas
Supongamos que en diferentes puntos de un programa se realiza la operación de elevar al cuadrado
un número. El código simbólico (MC68000) de la operación sería el siguiente:
MOVE.W
MULS
MOVE,W
N, D0
D0, D0
D0, N
El programador tiene dos opciones para repetir el código en los puntos donde aparezca la operación:
las macros y las subrutinas.
a) Una MACRO o subrutina abierta es una llamada que se realiza en aquellos puntos donde aparece
la operación y que el ensamblador sustituye por el código correspondiente en un proceso
denominado de expansión de macros.
N1
2
MOVE .W
MULS
MOVE .W
N2
N1, D0
D0, D0
D0, N1
2
MOVE .W
MULS
MOVE .W
N2, D0
D0, D0
D0, N2
25
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
b) Una SUBRUTINA o subrutina cerrada por el contrario no repite el código en cada llamada, bifurca
a un único código que una vez ejecutado devuelve control a la instrucción siguiente a la que realizó la
bifurcación:
N12
MOVE .W
MU LS
MOVE .W
N, D0
D0, D0
D0, N
N22
Cuatro problemas hay que resolver en el mecanismo de una subrutina (cerrada):
‰
Controlar la dirección de vuelta a la instrucción siguiente a la que realizó la llamada
‰
Organizar el paso de parámetros
‰
Ubicar las variables locales de la subrutina
‰
Preservar el contexto del programa
Analizaremos las diferentes alternativas de resolución de estos problemas resaltando las ventajas e
inconvenientes de cada una.
3.2.1 Control de la dirección de vuelta
Para hacer que la dirección de vuelta de una subrutina sea siempre la siguiente a la de la
instrucción que realiza la llamada se pueden utilizar las siguientes alternativas:
1) Utilización de un registro
Se trata de una alternativa fácil de implementar y rápida en su ejecución, sin embargo, impide el
anidamiento y la recursión.
Prog. Principal
Subrutina
Sub
dir
Salto
Sub
Retorno
dir
Registro
Pi i l
dir
PC
Aunque en el 68000 no es necesario utilizar esta alternativa, su codificación podría ser la siguiente:
26
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
cuadrado
MOVE.W
MULS
MOVE.W
JMP
N, D0
D0, D0
D0, N
(A0)
.......
N1, N
siguiente1,
cuadrado
A0
siguiente1
MOVE.W
LEA.L
JMP
......
N2, N
siguiente2,
cuadrado
A0
siguiente2
MOVE.W
LEA.L
JMP
.
.
2) Utilización de una posición de memoria de la subrutina
Esta alternativa exige que antes de bifurcar a la subrutina se ponga la dirección de vuelta en una
posición de memoria perteneciente a la subrutina (por ejemplo, la primera). El retorno se realiza con un
salto incondicional e indirecto sobre esta posición.
Prog. Principal
dir
Salto Sub1
Subrutina 1
Subrutina 2
dir
dir1
Sub1
Sub2
Salto Sub2
dir1
Retorno
Retorno
Esta alternativa permite un número ilimitado de llamadas anidadas, pero no permite la recursión.
En el 68000 codificaríamos esta alternativa llevando el contenido de la posición de memoria a un registro
de direcciones y realizando para implementar la vuelta un salto indirecto sobre él:
vuelta
cuadrado
--------------------------MOVE.W
N, D0
MULS
D0, D0
MOVE.W
D0, N
LEA.L
vuelta, A0
JMP
(A0)
.......
siguiente1, A1
A1, vuelta
cuadrado
siguiente1
LEA.L
MOVE.L
JMP
.......
siguiente2, A1
A1, vuelta
cuadrado
siguiente2
LEA.L
MOVE.L
JMP
......
27
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
3) Utilización de una pila (stack)
Inmediatamente antes de realizar la bifurcación a la subrutina se coloca la dirección de retorno en
la pila. Lo último que realiza la subrutina es recuperar esta dirección de retorno y llevarla al contador de
programa. Esta alternativa permite el anidamiento y la recursión porque resuelve el orden de los retornos
con el orden de inserción y extracción que impone la Pila. Se vuelve a la instrucción siguiente a la última
llamada porque de la pila siempre se extrae el último retorno almacenado.
En el 68000 existen dos instrucciones que realizan las dos acciones descritas:
JSR
D1
bifurca a D1 almacenando previamente la dirección de la instrucción siguiente en la Pila
RTS
lleva el último retorno introducido en la Pila al PC.
Prog. Principal
Subrutina 1
Subrutina 2
Sub1
dir
Sub2
Subrutina 3
Sub3
JSR Sub1
JSR Sub2
JSR Sub3
dir1
dir2
RTS
RTS
RTS
La evolución de la Pila en las secuencias de llamadas y vueltas sería la siguiente:
Pila antes de
la llamada a
sub1
Pila después
de la llamada
a sub1
Pila después
de la llamada
a sub2
Pila después
de la llamada
a sub3
Pila después
de la vuelta
de sub3
Pila después
de la vuelta
de sub2
Pila después
de la vuelta
de sub1
dir2
dir
dir1
dir1
dir1
dir
dir
dir
dir
La estructura del código para el 68000 sería la siguiente:
cuadrado
MOVE.W
MULS
MOVE.W
RTS
N, D0
D0, D0
D0, N
......
cuadrado
siguiente1
JSR
.....
JSR
.....
cuadrado
siguiente2
......
28
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
3.2.2 Paso de parámetros
1) Utilización de un registro
La utilización de registros para el paso de parámetros y devolución de resultados entre el
programa principal y la subrutina es el método más rápido (pues no hay que acceder a memoria) pero
resulta bastante limitado si el procesador no dispone de un buen número de registros. (Veremos más
adelante que en algunos procesadores RISC existen mecanismos especiales para realizar el paso de
parámetros a través de registros con solapamiento).
2) Utilización de memoria
La utilización de memoria para el paso de parámetros aporta mayor capacidad pero lentifica
el proceso por la necesidad de acceder a memoria. Tanto esta alternativa como la anterior impiden la
recursión de las subrutinas
3) Utilización de la pila
Cuando se realiza la llamada no sólo se introduce en la pila la dirección de retorno, sino que
previamente se introducen también los parámetros que deben transferirse. La subrutina accede a los
parámetros actuales en la pila.
Prog. Principal
Subrutina
Sub
Paso de
parámetros
(PUSH)
JSR Sub
dir
RTS
Liberación
de parámetros
La evolución de la Pila en el proceso de llamada y vuelta de subrutina sería la siguiente:
Pila antes
del paso de
parámetros
Pila después
del paso de
parámetros
Pila después
de la llamada
a sub
Pila después
de la vuelta
de sub
Pila después
de la
liberación
del área de
parámetros
dir
3.2.3
parametro n
parametro n
parametro n
parámetro 1
parámetro 1
parámetro 1
Preservación del contexto
Para que no se modifique el contexto de operación del programa principal, será necesario que la subrutina
comience preservando el valor todos los registros que se modifican en su ejecución, y finalice restaurando
el valor de dichos registros:
29
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Prog. Principal
Subrutina
Sub
Preservación
del contexto
Paso de
parámetros
(PUSH)
JSR Sub
dir
Restauración
del contexto
Liberación
de parámetros
RTS
En este caso la evolución de la Pila sería la siguiente:
Pila antes
del paso de
parámetros
Pila después
del paso de
parámetros
Pila después
de la llamada
a sub
Pila después
de preservar
el contexto
Pila después
de restaurar
el contexto
Pila después
de la vuelta
de sub
contexto
3.2.3
dir
dir
dir
parametro n
parametro n
parametro n
parametro n
parametro n
parámetro 1
parámetro 1
parámetro 1
parámetro 1
parámetro 1
Pila después
de la
liberación
del área de
parámetros
Variables locales de la subrutina
Para que una subrutina con variables locales sea re-entrante y por tanto recursiva es necesario crear un
conjunto nuevo de variables locales cada vez que se produce una nueva llamada sin haber finalizado la
anterior. Para ello se puede utilizar de nuevo la Pila, que se convierte así en el soporte de la gestión
dinámica de la memoria en las llamadas a subrutinas. El conjunto de información que se introduce en la
pila como consecuencia de una llamada a subrutina se conoce como Registro de Activación (RA)
Prog. Principal
Paso de
parámetros
(PUSH)
Subrutina
Sub
Creación de
variab. locales
Preservación
del contexto
JSR Sub
dir
Liberación
de parámetros
Restauración
del contexto
Destrucción de
variab. locales
RTS
30
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La evolución de la Pila en el proceso de llamada, ejecución con variables locales y vuelta de subrutina sería la
siguiente:
Pila después
del paso de
parámetros
Pila después
de la llamada
a sub
Pila después
de reservar
var. locales
Pila después
de preservar
el contexto
Pila después
de restaurar
el contexto
Pila después
de liberar
var. locales
Pila después
de la vuelta
de sub
contexto
parámetros
variables
locales
variables
locales
variables
locales
dir
dir
dir
dir
dir
parámetro 1
parámetros
parámetros
parámetros
parámetros
parámetros
Finalmente, para que el RA de una subrutina pueda recuperarse cuando se vuelve de una
llamada a otra subrutina, es necesario que antes de realizar la llamada se guarde en el nuevo RA (el
de la subrutina llamada) la dirección del antiguo RA (el de la subrutina que realiza la llamada, o
subrutina padre). De esta manera todos los RAs quedan enlazados a través de este nuevo campo:
contexto
Estado de
la Pila
var. locales
R.A
de
Sub3
Subrutina
en
ejecución
D. RA padre
Dir. Retorno
parámetros
contexto
Subrutina 1
var. locales
R.A
de
Sub2
D. RA padre
Sub1
Subrutina 2
Sub2
Subrutina 3
Sub3
Dir. Retorno
parámetros
JSR Sub2
JSR Sub3
RTS
RTS
contexto
var. locales
R.A
de
Sub1
RTS
D. RA padre
Dir. Retorno
parámetros
MC 68000
En el 68000 los registros de activación se gestionan con las instrucciones LINK y UNLK, y contienen
los cuatro campos siguientes:
•
•
parámetros reales de la llamada a la subrutina,
dirección de retorno de la subrutina,
31
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
•
puntero del registro de activación del subprograma padre
zona de variables locales.
El puntero al registro de activación actual se almacena en un registro de direcciones, que normalmente es el
registro A6. El puntero de pila (SP) es el registro A7 y el puntero a las variables globales A5.
SP
A7
PRAL
A6
PRAG
A5
Variables locales
Puntero al RA padre
Dirección de retorno
Parámetros
Variables globales
La instrucción LINK sirve para reservar la memoria correspondiente a un registro de activación y
actualizar el puntero al mismo, es decir, para asignar y enlazar el registro de activación. La instrucción
UNLIK deshace el enlace y devuelve la memoria.
La instrucción LINK tiene el siguiente formato:
LINK An, #desplazamiento
An se usará como puntero al registro de activación, y el desplazamiento es un número entero
negativo, cuya magnitud es el número de bytes que ocupan las variables locales. Su semántica es la
siguiente:
An --> -(SP); SP --> An; SP + desplazamiento --> SP
Es decir:
1.
2.
3.
Guarda el registro en la pila.
Copia el contenido del puntero de pila en el registro.
Suma el número negativo al puntero de pila, decrementando el puntero de pila un número de bytes
igual al que ocupan las variables locales.
Teniendo en cuenta que en la pila están ya los parámetros y la dirección de retorno de la subrutina la
ejecución de esta instrucción inmediatamente después de entrar en la rutina tiene el siguiente efecto:
•
•
•
Guarda en la pila el puntero de registro de activación actual (A6), que contiene el puntero de registro
de activación de la subrutina padre.
Copia el puntero de pila en el puntero de registro de activación actual, que no varía durante la
ejecución de la subrutina. Con esto se enlaza el registro de activación de la subrutina con el de la
subrutina padre.
Decrementa el puntero de pila reservando espacio para las variables locales de la subrutina.
32
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La instrucción UNLK desasigna la zona de memoria local restituyendo el puntero de registro de activación
de la subrutina padre. Tiene el siguiente formato:
UNLK An
An es el registro de direcciones que se ha usado como puntero de registro de activación. Su
semántica es la siguiente:
An --> SP; (SP)+ --> An
Es decir:
1.
2.
Copia el contenido del registro en el puntero de pila.
Saca un palabra larga de la pila y la almacena en el registro.
La ejecución de esta instrucción antes del retorno de subrutina tiene el siguiente efecto:
• Copia en el puntero de pila el contenido del puntero del registro de activación actual. Con esto se
libera la zona de variables locales de la pila.
• Saca de la pila el puntero de registro de activación de la subrutina padre y lo coloca como puntero de
registro de activación actual. El puntero de pila queda apuntando a la dirección de retorno.
Programa Principal
Sub
Subrutina
LINK A6, #despla
Preservación del
contexto
Paso de parámetros
(PUSH)
JSR Sub
dir
Liberación
de parámetros
Restauración del
contexto
UNLK A6
RTS
Pentium
El procesador Pentium II tiene instrucciones equivalentes a las del 68000 para realizar la gestión de
las subrutinas: CALL, ENTER, LEAVE y RETURN equivalentes a JSR, LINK, UNLK y RTS.
Programa Principal
Sub
Subrutina
ENTER
Preservación del
contexto
Paso de parámetros
(PUSH)
CALL Sub
dir
Liberación
de parámetros
Restauración del
contexto
LEAVE
RETURN
33
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Sin embargo, en el 8088 y 8086 la subrutina se iniciaba con la siguiente secuencia de instrucciones:
PUSH EBP
MOV EBP, ESP
SUB ESP, espacio_para_variables_locales
dode EBP es el PRAL y ESP el Puntero de pila (SP).
Esta secuencia de instrucciones es más rápida que su equivalente ENTER que se introdujo con el
80286 (10 ciclos ENTER frente a 6 la secuencia anterior). La instrucción ENTER se añadió al
repertorio para sustituir a todo el código anterior, aunque su velocidad de ejecución es menor que la
de dicho código.
4. Soporte de las instrucciones de control a las construcciones de alto nivel
4.1 Construcciones condicionales
IF-THEN
L.A.N.
IF A ope B THEN
<sentencias1>
L
LM.
CMP A, B
B¬ope L
<sentencias>
......
L1
L2
L.M.
CMP A, B
Bope L1
<sentencias2>
BRA L2
<sentencias1>
......
IF-THEN-ELSE
L.A.N.
IF A ope B THEN
<sentencias1>
ELSE
<sentencias2>
IF-THEN-ELSE-IF
L.A.N.
IF A1 ope1 B1 THEN
<sentencias1>
ELSE IF A2 ope2 B2 THEN
<sentencias2>
......
ELSE IF An open Bn THEN
<sentenciasn>
ELSE
<sentencias>
L1
L2
Ln-1
Ln
L
L.M.
CMP A1, B1
B¬ope1 L1
<sentencias1>
BRA L
CMP A2, B2
B¬ope2 L2
<sentencias2>
BRA L
.......
CMP An, Bn
B¬open Ln
<sentenciasn>
BRA L
<sentencias>
........
34
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CASE
L.A.N.
CASE K
OF
0: <sentencias1>
1: <sentencias2>
......
n: <sentenciasn>
defecto: <sentencias>
L.M.
TABLA
L0
L1
L2
...
Ln
Ln+1
L0
L1
Ln
Ln+1
FIN
MOVE K, A1
LEA TABLA(A1), A2
JMP (A2)
<sentencias0>
BRA FIN
<sentencias1>
BRA FIN
....
<sentenciasn>
BRA FIN
<sentenciasn+1>
........
4.2 Construcciones iterativas
WHILE-DO
L.A.N.
WHILE A ope B
BEGIN
<sentencias1>
END DO
INI
L
L.M.
CMP A, B
B¬ope L
<sentencias>
BRA INI
<sentencias1>
......
REPEAT
L.A.N.
REPEAT
<sentencias>
UNTIL A ope B
INI
L.M.
<sentencias>
CMP A, B
B¬ope INI
......
FOR
L.A.N.
FOR A = B TO C DO
<sentencias>
L1
L.M.
MOVE B, A
CMP C, A
BGT L2
<sentencias>
INC A
BRA
......
35
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 4: Rendimiento del procesador.
1. Medidas del rendimiento de un computador
2. Influencia en el rendimiento de las alternativas de diseño.
3. Influencia de los compiladores de lenguajes de alto nivel.
4. Procesadores RISC y CISC.
1. Medidas del rendimiento de un computador
Cuando se quieren comparar diferentes procesadores es necesario establecer el criterio de medida que
permita cuantificar los resultados de la comparación. En este sentido existen dos extremos que aclarar
previamente: la unidad de medida y el patrón de medida. El primero se refiere a la métrica utilizada para
cuantificar la comparación. Y el segundo al objetivo mismo de la comparación.
El tiempo es la unidad de medida por excelencia cuando se comparan varios procesadores, aunque no
siempre coincidan los puntos de vista de los diferentes observadores. Así, el usuario de un procesador puede decir
que el procesador A es mejor que el procesador B cuando A ejecuta su programa en menor tiempo que B. En
cambio el responsable de un centro de cálculo entenderá que A es mejor que B si es capaz de ejecutar mayor
número de trabajos por unidad de tiempo. El primero estará interesado en el tiempo de respuesta (response time)
del procesador mientras que el segundo lo estará en la productividad (throughput). Pero en ambos casos la clave
es el tiempo: el procesador que realiza la misma cantidad de trabajo en el menor tiempo posible será el más rápido,
la diferencia estriba en si medimos una tarea (tiempo de respuesta) o muchas (productividad).
El patrón de medida más significativo es el conjunto de programas reales que se ejecutan en los
procesadores. Sin embargo aquí surge de nuevo y con más intensidad la diversidad de puntos de vista. En efecto,
el usuario de un editor de texto querrá medir el rendimiento de un procesador respecto a la eficiencia para ejecutar
su programa, que posiblemente no coincida con el punto de vista del usuario de un programa de diseño gráfico.
Fijar de la forma más objetiva posible los patrones o programas respecto a los cuales se mida el rendimiento de un
procesador será pues una tarea polémica y siempre cuestionada por la comunidad de interesados en los resultados
de la medida.
1.1 Tiempo de ejecución
El tiempo que tarda un programa en ser ejecutado por un computador puede ser difícil de medir, debido a
los Sistemas Operativos Multitarea y a los dispositivos de E/S, que tienen tiempos de respuesta que son
independientes de la frecuencia de reloj del ordenador. Por ello es necesario diferenciar entre el tiempo que tarda
una CPU en ejecutar el código de un programa, el tiempo que utiliza el S.O. para realizar sus tareas, y el tiempo
necesario para acceder a los dispositivos de E/S.
El tiempo de ejecución de un programa lo dividiremos en las siguientes componentes:
• Tiempo de respuesta
• Tiempo de CPU
A su vez, el tiempo de CPU lo dividimos en:
• Tiempo de CPU utilizado por el usuario.
• Tiempo de CPU utilizado por el S.O.
‰
Tiempo de respuesta Es el tiempo necesario para completar una tarea, incluyendo los accesos al disco, a la
memoria, las actividades de E/S y los gastos del S.O. Es el tiempo que percibe el usuario.
‰
Tiempo de CPU Es el tiempo que tarda en ejecutarse un programa, sin tener en cuenta el tiempo de espera
debido a la E/S o el tiempo utilizado para ejecutar otros programas. Se divide en:
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
‰
Tiempo de CPU utilizado por el usuario. Es el tiempo que la CPU utiliza para ejecutar el programa del
usuario. No se tiene en cuenta el tiempo de espera debido a la E/S o el tiempo utilizado para ejecutar otros
programas
‰
Tiempo de CPU utilizado por el S.O. Es el tiempo que el S.O. emplea para realizar su gestión interna.
La función time de Unix produce una salida de la forma: 90.7u 12.9s 2:39 65%, donde:
• Tiempo de CPU del usuario = 90.7 segundos
• Tiempo de CPU utilizado por el sistema = 12.9 segundos
• Tiempo de CPU= 90.7 seg.+ 12.9seg = 103.6
• Tiempo de respuesta = 2 minutos 39 segundos =159 segundos
• Tiempo de CPU = 65% del tiempo de respuesta = 159 segundos*0.65 = 103.6
• Tiempo esperando operaciones de E/S y/o el tiempo ejecutando otras tareas 35% del tiempo de respuesta =
159 segundos*0.35 = 55.6 segundos
El tiempo de respuesta se utiliza como medida del rendimiento del sistema (con el sistema no cargado), mientras
que el rendimiento de la CPU normalmente hace referencia al tiempo de CPU del usuario sobre un sistema no
cargado.
El tiempo de CPU de un programa podemos expresarlo como:
Tiempo_de_CPU = Número_de_ciclos_de_reloj_de_la_ CPU • Tc
donde Tc = Duración_del_ciclo_de_reloj
Tiempo _ de _ CPU =
Número _ de _ ciclos _ de _ reloj _ de _ la _ CPU
Fc
donde Fc = Frecuencia_de_reloj = 1/Tc
Además del número de ciclos de reloj que necesita la ejecución de un programa, también se puede medir el
número de instrucciones NI ejecutadas, y podremos calcular el número medio de Ciclos de reloj Por Instrucción o
CPI como:
CPI =
Número _ de _ ciclos _ de _ reloj _ de _ la _ CPU
NI
por lo que el tiempo de CPU podemos expresarlo como:
Tiempo_de_CPU = NI • CPI • Tc.
o bien:
Tiempo _ de _ CPU =
NI • CPI
Fc
•
NI: depende del compilador y la arquitectura utilizada, y se expresa en instrucciones/programa
•
CPI: depende de la arquitectura y estructura (organización) de la máquina, y se expresa en ciclos de
reloj/instrucción
•
Tc: Depende de la estructura y la tecnología de la máquina, y se expresa en segundos/ciclo de reloj
En determinadas situaciones de diseño puede ser útil calcular el número total de ciclos de reloj de la CPU como:
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
n
Número_de_ciclos_de_reloj_de_la_CPU =
∑ CPI
i
• NI i
i =1
donde NIi representa el número de veces que el grupo de instrucciones i es ejecutado en un programa, y CPIi
representa el número medio de ciclos de reloj para el conjunto de instrucciones i. El tiempo de CPU se evalúa en
este caso mediante una de las 2 siguientes expresiones:
⎛
n
∑ CPI
⎝
Tiempo_de_CPU = ⎜
i =1
i
⎞
• NI i ⎟ • Tc
⎠
⎛ n
⎞
⎜⎜ ∑ CPI i • NI i ⎟⎟
⎝ i =1
⎠
Tiempo _ de _ CPU =
Fc
El número medio de ciclos por instrucción vendrá dado por:
⎞
⎛ n
⎜⎜ ∑ CPI i • NI i ⎟⎟
NI
⎠ n
⎝ i =1
= ∑ (CPI i • i )
CPI =
NI
NI
i =1
Esta última expresión calcula el CPI multiplicando cada CPIi individual por la fracción de ocurrencias de las
instrucciones i en el programa. CPIi debe ser medido, y no calculado a partir de la tabla del manual de referencia,
ya que se deben incluir los fallos de cache y otras ineficiencias del sistema de memoria.
Ejemplo
Se consideran 2 alternativas para implementar el salto condicional en un procesador:
CPU A: Una instrucción de comparación genera el código de condición, y una de salto bifurca en función del
valor de código generado.
CPU B: Una única instrucción de salto que incluye la comparación.
En ambos casos la instrucción de salto consume 2 ciclos de reloj, las demás instrucciones consumen 1 ciclo. Se
ignoran las pérdidas debidas al sistema de memoria.
En la CPU A, el 20% de las instrucciones ejecutadas son saltos condicionales, y como en esta CPU cada salto es
precedido por una comparación, otro 20% de las instrucciones ejecutadas son comparaciones.
Debido a que la CPU A no incluye la comparación en el salto, su ciclo de reloj es un 25% más rápido que el de la
CPU B.
Bajo estas condiciones ¿Qué CPU es más rápida?
Solución
Com pa r a cion es
Sa lt os
CP U A
20 %
CP U B
20 %
20 %
100
Ot r a s
in st r u ccion es
60 %
80
60 %
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tc_B/ Tc_A = 1.25 ==>
Tc_B = 1.25 • Tc_A
NI_B = 0.8 • NI_A
Tiempo de CPU_A = NI_A • CPI_A • Tc_A
Tiempo de CPU_B = NI_B • CPI_B • Tc_B
Tiempo de CPU_B = (0. 8 • NI_A ) • CPI_B• ( 1.25 • Tc_ A )
Tiempo de CPU_B = (0.8 • 1.25) • NI_A * CPI_B • Tc_A.
CPI_A = (NI_salto_A /NI_A) •CPI_salto + (NI_resto_A/NI_A) •CPI_resto =
(20/100) •2 + (80/100)•1 = 0.2 • 2 + 0.8 • 1 = 1.2
CPI_B = (NI_salto_B /NI_B) •CPI_salto + (NI_resto_B/NI_B) •CPI_resto =
(20/80) •2 + (60/80)•1 = 0.25•2 + 0.75•1 = 1.25
Luego la alternativa de diseño correspondiente a la CPU A sería más rápida. La ganancia de velocidad de la
alternativa A sobre la B valdrá:
Tiempo de CPU_A = 1.2 • NI_A • Tc_A.
Tiempo de CPU_B = 1.25 • NI_A • Tc_A
Tiempo de CPU_B 1.25
=
= 1.0416
Tiempo de CPU_A 1.2
1.2 Otros parámetros de rendimiento
‰
MIPS (Millones de Instrucciones Por Segundo)
NI
MIPS =
Tiempo _de _ejecución 10
Tiempo _ de _ ejecución =
6
=
1
6
CPI * 10 * Tc
=
Fc
CPI * 10 6
NI
MIPS * 10 6
•
Los MIPS dependen del repertorio de instrucciones, por lo que resulta un parámetro difícil de utilizar para
comparar máquinas con diferente repertorio
•
Varían entre programas ejecutados en el mismo computador
•
Pueden variar inversamente al rendimiento, como ocurre en máquinas con hardware especial para punto
flotante, que emplean menor tiempo que las que no disponen de este hardware y por tanto tienen mejor
rendimiento. Sin embargo presentan un menor valor de los MIPS porque ejecutan menor número de
instrucciones
En definitiva, los MIPS pueden fallar al dar una medida del rendimiento, puesto que no reflejan el tiempo de
ejecución. Por esta razón se han venido utilizando los MIPS relativos, que miden cuantas veces más tarda en
ejecutarse un programa en la máquina a medir que en una de referencia, que por definición tiene un MIPS (VAX11/780):
MIPS relativos =
Tiempo de ejecución en la máquina de referencia
• MIPS refeerencia
Tiempo de ejecución en la máquina a medir
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
MIPSrefeerencia = 1 (MIPS del VAX-11/780)
‰
MFLOPS (Millones de operaciones en punto FLOtante Por Segundo)
MFLOPS =
•
Número de operaciones en coma flotante de un programa
Tiempo de ejecución • 10 6
Existen operaciones en coma flotante rápidas (como la suma) o lentas (como la división), por lo que puede
resultar una medida poco significativa. Por ello se han utilizado los MFLOPS normalizados, que dan distinto
peso a las diferentes operaciones. Por ejemplo: suma, resta, comparación y multiplicación se les da peso 1;
división y raíz cuadrada peso 4; y exponenciación, trigonométricas, etc. peso 8:
‰
Productividad (throughput)
Número de tareas ejecutadas en la unidad de tiempo
1.3 Ganancia de velocidad (speedup): Ley de Amdahl
Para calcular el aumento de rendimiento que puede obtenerse al mejorar alguna parte de un computador
se utiliza la Ley de Amdahl: La mejora obtenida en el rendimiento global de un computador al utilizar algún
modo de ejecución más rápido está limitada por la fracción de tiempo que se puede utilizar ese modo más rápido.
La ganancia de velocidad global de un sistema se define por el siguiente cociente:
gv global =
Tiempo _ de _ ejecución _ sin _ mejora( Tsin )
Tiempo _ de _ ejecución _ con _ mejora( Tcon )
Si llamamos fm a la fracción de tiempo que puede utilizarse el modo de ejecución más rápido, es decir,
introduciendo una mejora, y gvmejora la ganancia de velocidad propia del elemento o modo mejorado, la ganancia
de velocidad global del sistema vendrá dada por la siguiente expresión:
(1 - fm) * Tsin
Tcon = (1 - fm) * Tsin + fm * Tsin / gvmejora
Tsin
tiempo en
que se
puede
utilizar la
mejora
fm * Tsin / gvmejora
fm * Tsin
tiempo
ahorrado
en la
mejora
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
gvglobal =
Tsin
Tsin
1
=
=
Tcon ( 1 − f )* Tsin + f m * Tsin ( 1 − fm ) + f m
m
gvmejora
gvmejora
Esta expresión recoge la forma cuantitativa de la ley de Amdahl. Si obtenemos el límite cuando la ganancia de
velocidad del modo mejorado tiende a infinito, es decir, suponemos que el modo mejora infinitamente, obtenemos
lo siguiente:
1
lim _ gv global =
1− fm
gv mejora → ∞
Es decir, que la ganancia de velocidad global se mantiene limitada por una expresión de la fracción fm
gvglobal
1/(1-fm)
gvmejora
Ejemplo
Un disco magnético 10 veces más rápido que en la máquina original. El disco se utiliza sólo el 40% del tiempo de
ejecución. ¿Cual es la ganancia de velocidad global?
fr=0.4
gvmejora = 10
CPU
gvglobal
gvmejora = 10; fm = 0.4 ==> gvglobal =
lim gvglobal =
1
(1 − 0.4)
1
(1 − 0.4) +
0.4
10
=
1
= 1.56
0.64
= 1.666 (máxima ganancia para velocidad del disco infinita)
gvmejora --> ∞
1.4 Rendimiento medio armónico
Sean P1, P2, ..., Pi,...Pm un conjunto de programas que representan modos de funcionamiento de una carga de
trabajo. Por ejemplo, P1, puede representar el modo de funcionamiento entero, P2 el modo real, etc.
las velocidades de ejecución en instrucciones/segundo de los programas anteriores, y t1,
Sean r1, r2, ..., ri,... rm
t2, ... , ti,... tm los tiempos de ejecución medios por instrucción en segundos/instrucción: ti = 1/ri
Se definen los siguientes parámetros:
Tiempo de ejecución medio aritmético
1 m
1 m 1
Ta = ∑ t i = ∑
m i =1
m i =1 ri
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Velocidad de ejecución media armónica
1
m
Rh =
= m
Ta
1
∑r
i =1 i
Tiempo de ejecución medio ponderado
m f
Ta* = ∑ i con f1, f2, ... fi, ...fm los pesos de los programas P1, P2, ..., Pi,...Pm;
i =1 ri
m
∑ fi = 1
i =1
Velocidad de ejecución media armónica ponderada
1
1
R*h = * = m
f
Ta
∑ ri
i =1 i
Velocidad de ejecución media aritmética
1 m
R a = ∑ ri
m i =1
Velocidad de ejecución media aritmética ponderada
m
R a = ∑ f i * ri
i =1
Problema cuando se promedian velocidades en lugar de tiempos
P1 ejecuta 10.000 instrucciones en 5 segundos => r1 = 2.000 instrucciones/segundo
P2 ejecuta 10.000 instrucciones en 2 segundos => r2 = 5.000 instrucciones/segundo
P1
P2
10.000 instruciones
10.000 instrucciones
5 segundos
2 segundos
Velocidad de ejecución media aritmética Ra = (2.000 + 5.000)/2 = 3.500 instrucciones/segundo
Si con esta velocidad media calculamos las instrucciones ejecutadas en 7 segundos =
3.500 * 7 = 24.500 instrucciones ≠ 20.000
Ta = 1/2(5/10.000 + 2/10.000) = 7/20.000 => Rh = 1/Ta =20.000/7 =2.857,14
Si con esta velocidad media armónica calculamos las instrucciones ejecutadas en 7 segundos =
2.857,14 * 7 = 20.000
Ejemplo
Se ejecutan 4 programas P1, P2, P3, P4 (que representan 4 modos de ejecución de un programa general) sobre 3
computadores A, B y C. Por cada programa se ejecutan 108 instrucciones, resultando los siguientes tiempos en
segundos:
Tiempo de ejecución (seg)
Programa
P1
P2
P3
P4
A
1
10.000
500
100
Computador
B
10
100
1000
800
C
20
20
50
100
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
¿Cuál es el computador más rápido?
Los MIPS da cada procesador para cada programa valdrán:
MIPS
Programa
P1
P2
P3
P4
Ta =
1
m
m
∑
ti =
i =1
1
m
m
A
100
0,1
0,2
1
Computador
B
10
1
0,1
0,125
C
5
5
2
1
∑r
i =1
1
i
Tiempos de ejecución medios aritméticos
Ta(A) = 1/4*(1/100+1/0,1+1/0,2+1)
Ta(B) = 1/4*(1/10+1+1/0,1+1/0,125)
Ta(C) = 1/4*(1/5+1/5+1/2+1)
= 16,01/4
= 4,002
= 19,1/4
= 4,775
= 1,9/4 = 0,475
Velocidades de ejecución medias armónicas
Rh(A) = 1/ Ta (A) = 0,25
Rh(B) = 1/ Ta (B) = 0,21
Rh(C) = 1/ Ta (C) = 2,12
Luego el mejor computador (más rápido) es C, seguido de A, y seguido de B
Velocidad de ejecución media geométrica
m
R g = ∏ Ri1 / m
i =1
Velocidad de ejecución media geométrica ponderada
m
R g* = ∏ Ri f i
i =1
Se utiliza con medidas de rendimiento normalizadas con respecto a una máquina de referencia.
1.5 Patrones de medida (Benchmarks)
Para evaluar el rendimiento de un computador podemos utilizar diferentes técnicas:
• Modelos analíticos (matemáticos) de la máquina
• Modelos de simulación (algorítmicos) de la máquina
• La máquina real
Las dos primeras alternativas se utilizan cuando la máquina no está disponible. Los modelos analíticos tienen
limitado su ámbito de utilización por la dificultad de expresar en forma de ecuaciones matemáticas el
comportamiento detallado de la máquina y su carga de trabajo. Se utilizan en fases muy tempranas de diseño para
realizar estimaciones generales del rendimiento.
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Los modelos de simulación pueden construirse con mayor precisión, recogiendo especificaciones detalladas
de diseño. Sin embargo, estos modelos requieren una gran capacidad computacional cuando se incorporan todos
los componentes básicos de la máquina.
En la tercera alternativa es la máquina o máquinas reales las que se evalúan con el fin de disponer de algún
criterio de elección. En este caso (y posiblemente en algunos modelos de simulación) será necesario disponer de
un conjunto de programas representativos de la carga real de trabajo que vaya a tener la máquina, y con respecto a
los cuales se realicen las medidas. Estos programas patrones se denominan benchmarks, y serán el objeto de
estudio de este apartado.
Podemos utilizar diferentes criterios no excluyentes a la hora de clasificar los benchmarks que se utilizan en
la actualidad para evaluar los computadores.
Comenzaremos con una clasificación general en función del ámbito de aplicación que representan, es decir, el
tipo de recursos computacionales que mayoritariamente intervienen en la evaluación. En este sentido los
clasificaremos en:
•
Enteros: aplicaciones en las que domina la aritmética entera, incluyendo procedimientos de búsqueda,
operaciones lógicas, etc. Por ejemplo, SPECint2000.
•
Punto flotante: aplicaciones intensivas en cálculo numérico con reales. Por ejemplo, SPECfp2000 y
LINPACK.
•
Transacciones: aplicaciones en las que dominan las transacciones on-line y off-line sobre bases de datos.
Por ejemplo, TPC-C.
En segundo lugar los agruparemos por la naturaleza del programa que implementan:
•
Programas reales: Compiladores, procesadores de texto, etc. Permiten diferentes opciones de ejecución.
Con ellos se obtienen las medidas más precisas
•
Núcleos (Kernels): Trozos de programas reales. Adecuados para analizar rendimientos específicos de las
características de una determinada máquina: Linpack, Livermore Loops
•
Patrones conjunto (benchmarks suits) Conjunto de programas que miden los diferentes modos de
funcionamiento de una máquina: SPEC y TPC.
•
Patrones reducidos (toy benchmarks): Programas reducidos (10-100 líneas de código) y de resultado
conocido. Son fáciles de introducir y ejecutar en cualquier máquina (Quicksort,...)
•
Patrones sintéticos (synthetic benchmarks): Código artificial no perteneciente a ningún programa de
usuario y que se utiliza para determinar perfiles de ejecución. (Whetstone, Dhrystone)
A continuación estudiaremos con algún detalle tres de los benchmarks con mayor difusión.
LINPACK
Es una colección de subrutinas Fortran que analizan y resuelven ecuaciones lineales y problemas de mínimos
cuadrados. Los sistemas de ecuaciones lineales que contempla utilizan diferentes formas de las matrices:
generales, en banda, simétricas, triangulares etc. Se diseñó para medir el rendimiento en supercomputadores a
finales de los 70 y principio de los 80 (Dongarra). Lo componen las siguientes subrutinas:
‰
‰
‰
‰
matrices generales
matrices en banda
matrices definidas positivas
matrices en banda definidas positivas
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
‰
‰
‰
‰
‰
‰
‰
matrices indefinidas simétricas
matrices triangulares
matrices tridiagonales
descomposición de Cholesky
descomposición QR
actualización de las descomposiciones QR y Cholesky
descomposición valores singulares
La tabla siguiente muestra los resultados de este benchmark para algunos computadores corriendo bajo un sistema
operativo y utilizando un compilador concreto. La primera columna numérica presenta el resultado en
Mflops/segundo, es decir, en millones de operaciones en punto flotante por segundo para una matriz de orden
100. La segunda para una matriz de orden 1000, y la tercera presenta el rendimiento de pico de la máquina. Para
resolver un sistema de n ecuaciones se realizan 2/3n3 + 2n2 ( se cuentan tanto las sumas y as multiplicaciones) .
Computador
Cray T916 (8 proc. 2.2 ns)
Cray T916 (4 proc. 2.2 ns)
Cray T916 (2 proc. 2.2 ns)
Cray T916 (1 proc. 2.2 ns)
Cray C90 (16 proc. 4.2 ns)
Cray C90 (8 proc. 4.2 ns)
Cray 3-128 (4 proc. 2.11 ns)
Hitachi S-3800/480(4 proc 2 ns)
Hitachi S-3800/380(3 proc 2 ns)
Hitachi S-3800/280(2 proc 2
Hitachi S-3800/180(1 proc 2 ns)
Cray 3-128 (2 proc. 2.11 ns)
Cray C90 (4 proc. 4.2 ns)
Cray C90 (2 proc. 4.2 ns)
Cray C90 (1 proc. 4.2 ns)
NEC SX-3/44R (4 proc. 2.5 ns)
NEC SX-3/42R (4 proc. 2.5 ns)
NEC SX-3/41R (4 proc. 2.5 ns)
NEC SX-3/34R (3 proc. 2.5 ns)
NEC SX-3/32R (3 proc. 2.5 ns)
NEC SX-3/31R (3 proc. 2.5 ns)
NEC SX-3/24R (2 proc. 2.5 ns)
NEC SX-3/22R (2 proc. 2.5 ns)
NEC SX-3/21R (2 proc. 2.5 ns)
NEC SX-3/14R (1 proc. 2.5 ns)
NEC SX-3/12R (1 proc. 2.5 ns)
Cray 3-128 (1 proc. 2.11 ns)
NEC SX-3/44 (4 proc. 2.9 ns)
NEC SX-3/24 (2 proc. 2.9 ns)
NEC SX-3/42 (4 proc. 2.9 ns)
NEC SX-3/22 (2 proc. 2.9 ns)
NEC SX-3/14 (1 proc. 2.9 ns)
NEC SX-3/12 (1 proc. 2.9 ns):
Cray Y-MP/832 (8 proc. 6 ns)
Fujitsu VP2600/10 (3.2 ns)
Cray Y-MP/832 (4 proc. 6 ns)
Fujitsu VPP500/1(1 proc. 10 ns)
Cray Y-MP M98 (8 proc. 6 ns)
Fujitsu VP2200/10 (3.2 ns)
Cray 2S/4-128 (4 proc. 4.1 ns
OS/Compilador
cf77
cf77
cf77
cf77
CF77
CF77
CSOS
(6.0) -Zp -Wd-68
(6.0) -Zp -Wd-68
(6.0) -Zp -Wd-68
(6.0) -Zp -Wd-68
5.0 -Zp -Wd-e68
5.0 -Zp -Wd-e68
1.0 level 129
OSF/1 MJ
CSOS 1.0
CF77 5.0
CF77 5.0
CF77 5.0
FORTRAN:V03-00
level 129
-Zp -Wd-e68
-Zp -Wd-e68
-Zp -Wd-e68
N=100
Mflops/s
522
479
468
421
408
393
388
387
387
f77sx 040 R2.2 -pi*:*
f77sx 040 R2.2 -pi*:*
CSOS 1.0 level 129
368
368
327
f77sx 020 R1.13 -pi*:*
f77sx 020 R1.13 -pi*:*
CF77 4.0 -Zp -Wd-e68
FORTRAN77 EX/VP V11L10
CF77 4.0 -Zp -Wd-e68
FORTRAN77EX/VP V12L20
CF77 5.0 -Zp -Wd-e68
FORTRAN77 EX/VP V12L10
CSOS 1.0 level 129
314
313
275
249
226
206
204
203
202
N=1000
Mflops/s
10800
5711
2943
1576
10780
6175
2862
20640
16880
12190
6431
1622
3275
1703
902
15120
8950
4815
12730
6718
3638
9454
5116
2627
5199
2757
876
13420
8149
7752
4404
4511
2283
2144
4009
1159
1490
1733
1048
1406
Peak
Mflops/s
14400
7200
3600
1800
15238
7619
3792
32000
24000
16000
8000
1896
3810
1905
952
25600
12800
6400
19200
9600
4800
12800
6400
3200
6400
3200
948
22000
11000
11000
5500
5500
2750
2667
5000
1333
1600
2666
1250
1951
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
SPEC: (System Performance and Evaluation Cooperative)
SPEC es una sociedad sin ánimo de lucro cuya misión es establecer, mantener y distribuir un conjunto
estandarizado de benchmarks que se pueden aplicar a las últimas generaciones de procesadores. Se han
sucedido ya 4 generaciones de benchmarks: SPEC89, SPEC92, SPEC95 y SPEC2000. En lo que sigue nos
limitaremos a la última, que es la única en vigor.
SPEC2000
SPEC CPU2000
Los diseña el OSG (Open Systema Group) de SPEC que es el encargado de los benchmarks de componentes
y sistemas. En este apartado se encuentran los SPECint2000 y SPECfp2000, representativos de las
aplicaciones enteras y reales (punto flotante). Dentro de SPEC existen otros dos grupos HPG (High
Performance Group) y GPCG (Graphics Performance Caracterization Group).
La máquina de referencia de los SPEC CPU2000 es la UltraSPARC10 con un procesador UltraSPARC IIi, a
300 MHz y 256 MB de memoria. Esto significa que todos los resultados se calculan como ratios frente a la
máquina de referencia, que por definición tiene SPECint2000 = 100, y SPECfp2000 = 100.
SPECint2000
Lo integran los siguientes programas:
‰
gzip: programa de compresión de datos que utiliza el algoritmo de Lempel-Ziv (LZ77).
‰
vpr(versatil place and route): implementa los procesos de ubicación (placement) y conexionado
(routing) de un circuito digital sobre bloques lógicos de FPGAs. Pertenece a la clase de programas
de optimización combinatoria. Utiliza simulated annealing como procedimiento de optimización.
‰
gcc: compilador de C que genera código para el procesdor Motorola 88100.
‰
mcf: Programa de planificación temporal (scheduling) de transporte público que utiliza el código
MFC del método simplex de red (versión especializada del algoritmo simplex de programación
lineal).
‰
crafty: programa de juego de ajedrez por computador con un número significativo de operaciones
enteras y lógicas tales como AND, OR, XOR y desplazamientos.
‰
parser: analizador sintáctico de inglés basado en gramáticas de enlace (link grammar) con un
diccionario de mas de 60.000 palabras.
‰
eon: trazador de rayos (ray tracer) que transmite un número de líneas 3D (rayos) sobre un modelo
poligonal 3D, calcula la intersección entre las líneas y los polígonos, y genera nuevas líneas para
calcular la luz incidente en los puntos de intersección. El resultado final es una imagen vista por
cámara.
‰
perlbmk: versión del lenguaje de script Perl en el que se han eliminado las características
específicas del SO.
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
‰
gap: implementa un lenguaje diseñado para computar en grupos (GAP: Groups, Algorithm and
Programming).
‰
vortex: procede de un OODBMS (sistema de gestión de bases de datos orientado a objetos) que se
ha adaptado para conformarlo a las exigencias de SPEC2000.
‰
bzip2: basado en la versión 0.1 de bzipb.
‰
twolf: paquete de ubicación (placement) y conexionado (routing) en el proceso de diseño de
circuitos integrados basados en celdas standard. Utiliza el algoritmo de simulated annealing.
SPECffp2000
Lo integran los siguientes programas:
‰
wupwise: cromodinámica cuántica
‰
swim: modelado del agua superficial
‰
mgrid: resolutor multi-malla: campo potencial 3D
‰
applu: ecuaciones diferenciales parciales elípticas/parabólicas
‰
mesa: librería gráfica 3D
‰
galgel: dinámica de fluidos
‰
art: reconocimiento de imágenes/redes neuronales
‰
equake: simulación de propagación de ondas sísmicas
‰
facerec: procesamiento de imagen: reconocimiento del rostro
‰
ammp: química computacional
‰
lucas: teoría de números/prueba de números primos
‰
fma3d: simulación de choques por elementos finitos
‰
sixtrack: diseño de aceleradores de física nuclear de alta energía
‰
apsi: meteorología: distribución de contaminantes
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tiempo en una UltraSPARC10 con
procesador UltraSPARCIIi, 300
MHz y 256 MB de memoria
= 100 SPECint2000
CINT2000 Result
Copyright © 1999-2002 Standard Performance Evaluation Corporation
Intel Corporation
Intel D850MD motherboard (2.0A GHz, Pentium 4 processor)
SPEC license #
13
Benchmark
Tested by: Intel Corporation
Reference
Time
Base
Runtime
Base
Ratio
Test date: Nov-2001
Runtime
1400
184
762
182
767
175.vpr
1400
316
443
315
444
176.gcc
1100
128
862
128
861
181.mcf
1800
326
552
326
553
186.crafty
1000
147
681
146
686
197.parser
1800
249
723
250
721
252.eon
1300
142
917
122
1066
253.perlbmk
1800
209
860
209
860
254.gap
1100
116
944
116
945
255.vortex
1900
162
1171
159
1192
256.bzip2
1500
259
580
254
591
300.twolf
3000
596
503
594
505
CPU:
CPU MHz:
FPU:
CPU(s) enabled:
CPU(s) orderable:
Parallel:
Primary Cache:
Secondary Cache:
L3 Cache:
Other Cache:
Memory:
Disk Subsystem:
Other Hardware:
Software Avail: Oct-2001
722
SPECint2000
Vendor:
Model Name:
Hardware Avail: Jan-2002
Ratio
164.gzip
SPECint_base2000
SPECint2000 =
735
SPECint_base2000 =722
735
Intel Corporation
Intel D850MD motherboard (2.0A GHz,
Pentium 4 processor)
Pentium 4 processor (2.0A GHz, 400
MHz bus)
2000
Integrated
1
1
No
12k micro-ops I + 8KBD on chip
512KB(I+D) on chip
N/A
N/A
256 MB (2 128 MB PC800 RDRAM nonECC modules)
IBM DTLA-307030 ATA-100
None
Operating System:
Compiler:
File System:
System State:
Software
Windows XP Professional(Build 2600)
Intel C++ Compiler 5.0.1 Build 010525Z
Microsoft Visual C++ 6.0 SP5(for
libraries)
FAT32
Default
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CINT2000 Result
Copyright © 1999-2000 Standard Performance Evaluation Corporation
Intel Corporation
Intel VC820 (1.0 GHz Pentium III)
SPEC license #
13
Benchmark
Tested by: Intel Corporation
Reference
Time
Base
Runtime
Base
Ratio
SPECint2000 =
410
SPECint_base2000 =407
Test date: Mar-2000
Runtime
1400
288
486
287
488
175.vpr
1400
426
329
426
329
176.gcc
1100
297
371
295
373
181.mcf
1800
710
254
710
254
186.crafty
1000
200
499
200
499
197.parser
1800
523
344
523
344
252.eon
1300
320
406
320
406
253.perlbmk
1800
312
576
313
576
254.gap
1100
290
379
289
381
255.vortex
1900
272
697
266
714
256.bzip2
1500
413
363
398
377
300.twolf
3000
844
355
820
366
407
SPECint2000
Hardware Vendor:
Model Name:
CPU:
CPU MHz:
FPU:
CPU(s) enabled:
CPU(s) orderable:
Parallel:
Primary Cache:
Secondary Cache:
L3 Cache:
Other Cache:
Memory:
Disk Subsystem:
Other Hardware:
Software Avail:
Ratio
164.gzip
SPECint_base2000
Hardware Avail: Mar-2000
Intel Corporation
Intel VC820 (1.0 GHz Pentium III)
1.0 GHz Pentium III processor
1.0 GHz
Integrated
1
1
No
16KBI + 16KBD on-die
256KB(I+D) on-die ECC
N/A
N/A
256 MB PC800 RDRAM non-ECC
IBM DJNA 371800 ATA-66
Diamond Multimedia Viper 770 Ultra
TNT2 AGP
410
Operating System:
Compiler:
File System:
System State:
Software
Windows 2000 (Build 2195)
Intel C Compiler 4.5 for Windows 2000
Microsoft Visual C++ 6.0 C libraries,
SmartHeap library
FAT32
Default
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CFP2000 Result
Copyright © 1999-2002 Standard Performance Evaluation Corporation
Intel Corporation
Intel D850EMV2 motherboard (2.0A GHz, Pentium 4 processor)
SPEC license #
13
Tested by: Intel Corporation
Reference
Time
Benchmark
Base
Runtime
Base
Ratio
SPECfp2000 =
SPECfp_base2000 =
Test date: May-2002
Runtime
1600
168
952
167
957
171.swim
3100
235
1317
233
1333
172.mgrid
1800
246
730
245
736
173.applu
2100
263
798
258
815
177.mesa
1400
183
767
182
769
178.galgel
2900
268
1084
265
1094
179.art
2600
489
532
484
538
183.equake
1300
144
905
137
950
187.facerec
1900
201
947
200
951
188.ammp
2200
434
507
431
511
189.lucas
2000
189
1057
189
1057
191.fma3d
2100
282
746
281
746
200.sixtrack
1100
302
365
293
376
301.apsi
2600
454
572
454
573
764
SPECfp2000
Model Name:
CPU:
CPU MHz:
FPU:
CPU(s) enabled:
CPU(s) orderable:
Parallel:
Primary Cache:
Secondary Cache:
L3 Cache:
Other Cache:
Memory:
Disk Subsystem:
Software Avail: Apr-2002
Ratio
168.wupwise
SPECfp_base2000
Hardware Avail: May-2002
773
764
773
Intel Corporation
Intel D850EMV2 motherboard (2.0A
GHz, Pentium 4 processor)
Pentium 4 processor (2.0A GHz, 400
MHz bus)
2000
Integrated
1
1
No
12k micro-ops I + 8KBD on chip
512KB(I+D) on chip
N/A
N/A
256 MB (2 128 MB PC800-40 RDRAM
non-ECC modules)
IBM 120GXP 80 GB
IC35L080AVVA07-0 ATA-100
Operating System:
Compiler:
File System:
System State:
Software
Windows XP Professional(Build 2600)
Intel C++ Compiler 6.0 Build 020321Z
Intel Fortran Compiler 6.0 Build 020321Z
Microsoft Visual C++ 6.0 SP5(for
libraries)
FAT32
Default
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La siguiente gráfica muestra la evolución de los procesadores en los últimos años caracterizados
por su valor de SPECint con referencia en el VAX 11/780
TPC (Transaction Processing Performance Council)
TPC es un consorcio de 47 fabricantes de software y hardware entre los que se encuentran Compaq, Digital,
IBM, NCR, Sun, Informix, Intel, Microsoft y Oracle dedicado al diseño de benchmarks para la medida de
rendimiento de los sistemas informáticos. Estos benchmarks analizan la mayoría de los aspectos del sistema en
relación con el procesamiento de transacciones, es decir, accesos de consulta y actualización a bases de datos.
Tiene el inconveniente de la cantidad de tiempo que requieren las pruebas (meses) haciendo que su coste sea
elevado (millones de pesetas). Los benchmarks TPC-A , TPC-B y TPC-C ya están en desuso. TPC-D fue
sustituido en abril de 1999 por TPC-H y TPC-R.
‰
TPC-H: es un benchmark de soporte a la decisión. Consta de un conjunto preguntas (queries)
específicas, orientadas a la actividad comercial.
‰
TPC-R: es similar a TPC-H pero permite optimizaciones adicionales basadas en el conocimiento de las
preguntas.
Además, TPC ha introducido un benchmark para medir las transacciones en la WEB:
‰
TPC-W: La carga de trabajo se configura en un entorno de comercio que simula las actividades de un
servidor de WEB orientado a las transacciones comerciales.
Estudiaremos con más detalle en los siguientes parágrafos los actuales TPC-R y TPC-H.
TPC-R y TPC-H
Los benchmarks TPC-R y TPC-H fueron introducidos para sustituir al TPC-D como estándar industrial
para aplicaciones comerciales. Los dos son muy similares ya que modelan la misma aplicación comercial (base de
datos, preguntas y funciones de refresco). Se diferencian en las reglas de implementación , ya que mientras TPCH limita el uso de índices y esquemas de particiones, TPC-R no limita el uso de estas estructuras en la base de
datos.
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Base de Datos
La base de datos de TPC-H y TPC-R utiliza un esquema en la 3ª forma normal y responde al diagrama relaciónentidad de la siguiente figura (8 tablas):
part
partsupp
supplier
customer
nation
lineitem
orders
region
TPC dispone de un generador de datos para todas las tablas de la base dependiendo del factor de escala
SF. El factor de escala determina el tamaño de los datos de la base, por ejemplo, SF=100 significa que la suma de
todas las tablas de la base es igual a 100 GB. Las dos tablas mayores son lineitem y orders que contienen el 83%
de los datos. El tamaño de todas las tablas excepto nation y region tienen un tamaño proporcional al factor de
escala.
Carga de Trabajo
Las cargas de trabajo para ambos benchmarks constan de los siguientes componentes:
•
•
•
Construcción de la base de datos
Ejecución de 22 preguntas de solo-lectura en modo monousuario y multiusuario
Ejecución de 2 funciones de refresco.
La construcción de la base de datos incluye todos los tiempos de respuesta para crear las tablas, cargar los
datos, crear índices, definir y validar restricciones, etc.
Las 22 preguntas están definidas en SQL-92 como plantillas (templates), por lo que antes de ser ejecutada
sobre la base de datos se tiene que realizar la sustitución de parámetros. Se han elegido para mostrar la capacidad
del sistema utilizando todos los recursos en contextos monousuario y multiusuario.
Las dos funciones de refresco (RF1 y RF2) modelan la carga de nueva información (RF1) y la eliminación
de información obsoleta (RF2). RF1 inserta nuevas filas en la tabla lineitem y orders, mientras que RF2 elimina el
mismo número de filas de las mismas tablas.
Métrica de rendimiento
La principal métrica de rendimiento de TPC es la métrica de rendimiento compuesta (QphH/QphR). Para
calcular la métrica compuesta de un sistema para un factor de escala dado, hay que ejecutar un test de potencia
seguido por un test de capacidad de procesamiento (throughput). Después se combinan los resultados de ambos
tests para calcular la métrica compuesta.
En un test de potencia se ejecuta la función de refresco RF1, seguida por la ejecución de las 22 preguntas en
modo de único usuario, y por la ejecución de la función de refresco RF2.
En el test de capacidad se ejecutan las 22 preguntas (flujos de preguntas Si) en orden predefinido en múltiples
sesiones concurrentes. Además en una sesión separada se ejecuta secuencialmente un par de actualizaciones
(RF1, RF2) por cada flujo de preguntas.
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Test de Potencia
tiempo
Test de Capacidad (throughput)
S1
Inserción
S2
Sn
RF1
RF1
RF2
Q1
Q2
Q3
.
.
.
Q21
Q22
Flujo de
preguntas
....
.
.
.
RF1
Borrado
RF2
RF2
El número mínimo de flujos depende del factor de escala, según la tabla siguiente:
Factor de Escala (SF)
1
10
100
300
1000
3000
10000
Flujos (S)
2
3
4
6
7
8
9
Los resultados de los test de potencia y capacidad se utilizan para calcular la potencia de procesamiento
(Powre@Size) y la capacidad de procesamiento (Throughput@Size)
La potencia de procesamiento se calcula como la media geométrica de los tiempos de respuesta
correspondientes a las preguntas y funciones de refresco. La unidad es preguntas/hora. La media geométrica
reduce los efectos de las preguntas con tiempos de respuesta muy cortos y muy largos. Para un factor de escala SF
dado, la potencia de procesamiento se calcula como:
3600 ∗ SF
Power @ Size =
24
•
•
•
•
i = 22
j =2
i =1
j =1
∏ QI (i,0) * ∏ RI ( j,0)
i=1,2,...22;j=1,2
QI(i,0): tiempo de respuesta en segundos de la query Qi del test de potencia (power)
RI(j,0): tiempo de respuesta en segundos de la función de refresco RFj
3600: segundos (= 1 hora)
La capacidad de procesamiento se calcula como la razón del número total de preguntas ejecutadas a lo largo del
intervalo de ejecución. La unidad es preguntas/hora. Para un factor de escala SF viene dada por:
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Throughput @ Size =
•
•
•
•
S ∗ 22 ∗ 3600
∗ SF
TS
Ts:tiempo de respuesta de la ejecución multi flujo
S: número de flujos
3600: segundos (= 1 hora)
22: número de preguntas por flujo
La métrica de rendimiento compuesta (QphH para TPC-H y QphR para TPC-R) se calcula como:
QphH @ Size, QphR @ Size = Power @ Size ∗ Throughput @ Size
TPC-H y TPC-R también definen una métrica precio/rendimiento como la división del precio total del sistema
por el resultado de la métrica compuesta.
100 GB Results
Rank
Company
System
QphH Price/QphH
System
Availability
Database
Operating
System
Oracle 9iR2
w/Real
Application
Cluste
HP Tru64
Unix
V5.1A/IPK
1
HP
AlphaServer
5,578
ES45 Model
68/1000
404 US $
07/15/02
2
IBM eServer
x350 with 2,960
DB2 UDB
336 US $
06/20/02
347 US $
3
SGI 1450
Server with
DB2 UDB
EEE v7.2
2,733
Date
Cluster
Submitted
07/15/02
Y
IBM DB2 UDB Turbolinux 7
7.2
Servers
02/01/02
Y
10/31/01
IBM DB2 UDB
EEE 7.2
Linux 2.4.3
05/11/01
Y
Microsoft
Windows
.NET
Enterprise
Server
07/31/02
N
4
HP Proliant
1,933
DL760 X900
89 US $
12/31/02
Microsoft SQL
Server 2000
Enterprise
Edition
5
ProLiant 80001,699
X700-8P
161 US $
08/01/00
Microsoft SQL
2000
Microsoft
Windows
2000
07/21/00
N
Microsoft
Windows
2000
Advanced
Server
06/26/02
N
6
HP Proliant
DL580 G2
1,695
82 US $
06/26/02
Microsoft SQL
Server 2000
Enterprise
Edition
7
e-@ction
Enterprise
Server
ES5085R
1,669
169 US $
01/31/01
Microsoft SQL
Server 2000
Microsoft
Windows
2000
12/22/00
N
8
Netfinity
8500R
1,454
200 US $
08/01/00
Microsoft SQL
Server 2000
Microsoft
Windows
2000
05/23/00
N
ProLiant 80001,308
8P
174 US $
08/01/00
Microsoft SQL
2000
Microsoft
Windows
2000
04/05/00
N
195 US $
08/18/00
Microsoft SQL
Server 2000
Microsoft
Windows
2000
08/18/00
N
9
10
NetServer
LXr8500
1,291
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
300 GB Results
Rank
Company
System
Compaq
ProLiant
12,995
DL760 x90064P
1
System
Availability
Database
Operating
System
199 US $
06/20/02
IBM DB2
UDB 7.2
Microsoft
Windows
2000
Advanced
Server
04/09/02
Y
QphH Price/QphH
Date
Cluster
Submitted
2
NUMA-Q
2000
7,334
616 US $
08/15/00
IBM DB2
UDB 7.1
DYNIX/ptx
4.5.1
05/03/00
N
3
Compaq
AlphaServer
ES45 Model
68/1000
5,976
453 US $
06/01/02
Oracle 9i R2
Enterprise
Edition
Compaq
Tru64 Unix
V5.1A/IPK
05/05/02
Y
4
NUMA-Q
2000
5,923
653 US $
09/05/00
IBM DB2
UDB 7.1
DYNIX/ptx
4.5.1
09/05/00
N
10/17/02
N
Unisys
ES7000 Orion
4,774
130 Enterprise
Server
5
219 US $
03/31/03
Microsoft
Microsoft
SQL Server Windows .NET
Server 2003
2000
Datacenter
Enterprise
Edt.
Ed. 64-bit
6
NUMA-Q
2000
4,027
652 US $
09/05/00
IBM DB2
UDB 7.1
DYNIX/ptx
4.5.1
09/05/00
N
7
AlphaServer
ES40 Model
6/667
2,832
1,058 US $
02/14/01
Informix XPS
8.31 FD1
Compaq
Tru64 UNIX
V5.1
12/19/00
Y
8
ProLiant
8000-8P
1,506
280 US $
11/17/00
Microsoft
SQL Server
2000
Microsoft
Windows
2000
11/17/00
N
NetServer LXr
1,402
8500
207 US $
08/18/00
Microsoft
SQL Server
2000
Microsoft
Windows
2000
08/18/00
N
9
1,000 GB Results
Rank
Company
System
QphH Price/QphH
System
Availability
Database
Operating
Date
Cluster
System Submitted
10/30/02
Oracle 9i
Database
Enterprise
Edition
v9.2.0.2.0
HP UX 11.i
64-bit
06/24/02
N
Microsoft
Windows
2000
Advanced
Server
02/06/02
Y
1
HP 9000
Superdome
25,805
Enterprise
Server
2
Compaq
ProLiant
22,361
DL760
X900-128P
255 US $
06/20/02
IBM DB2 UDB
7.2
3
Sun
Fire[TM] 18,802
15K server
256 US $
07/17/02
Oracle 9i
Database
Enterprise
Edition
Sun Solaris
8
01/17/02
N
4
WorldMark
18,542
5250
638 US $
07/27/01
Teradata
V2R4.1
MP-RAS
3.02.00
10/09/01
Y
5
HP 9000
Superdome 13,160
Enterprise
564 US $
09/05/01
Orcacle9i.9.0.1
Enterprise Edi
HP UX 11.i
64-bit
08/06/01
N
231 US $
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Server
6
IBM
RS/6000 SP 12,866
550
649 US $
08/15/00
IBM DB2 UDB
7.1
IBM AIX
4.3.3
06/15/01
Y
7
HP 9000
Superdome
9,754
Enterprise
Server
814 US $
02/13/01
Informix
Extended
Parallel Ser
8.31FD1
HP UX 11.i
64-bit
02/13/01
N
581 US $
10/31/01
IBM DB2 UDB
EEE 7.2
Sun Solaris
8
06/11/01
N
Sun Fire
6800
8
4,735
3000 GB Results
Rank
Company
System
QphH Price/QphH
System
Availability
Database
Operating
System
Oracle 9i
Database
Enterprise
Edition
v9.2.0.2.0
HP UX 11.i
64-bit
1
HP 9000
Superdome
27,094
Enterprise
Server
240 US $
10/30/02
2
Sun Fire[TM]
15K Server
23,813
with Oracle9i
R2
237 US $
10/30/02
3
Compaq
ProLiant
21,053
DL760
X900-128P
291 US $
4
WorldMark
18,803
5250
989 US $
5
HP 9000
Superdome
17,908
Enterprise
Server
6
Sun Starfire
Enterprise
10,764 1,250 US $
10000 with
Oracle9i
569 US $
Oracle 9i R2
Enterprise Sun Solaris 9
Edition
Date
Cluster
Submitted
08/26/02
N
06/26/02
N
06/20/02
IBM DB2
UDB 7.2
Microsoft
Windows
2000
Advanced
Server
02/06/02
Y
07/27/01
Teradata
V2R4.1
MP-RAS
3.02.00
10/09/01
Y
05/15/02
Oracle 9i
Database
Enterprise
Edition
HP UX 11.i
64-bit
12/17/01
N
04/13/01
Y
06/19/01
Oracle9i
Database
Sun Solaris 8
Ent. Edition
9.0.1
100 GB Results
^ Compan
y
System
QphR Price/QphR
PowerEdge 6600/1.6 GHz Xeon
4,452 41 US $
MP
System
Availability
Database
Date
Submitted
04/04/03
Oracle 9i R2 Enterprise
Edition
10/11/02
1,000 GB Results
^ Company
System
QphR
Price/QphR
System Availability
Database
Date Submitted
WorldMark 5200
17,529
737 US $
02/15/00
NCR Teradata V2R3.0
08/23/99
WorldMark 5200
21,254
607 US $
08/31/00
NCR Teradata V2R4.0
03/06/00
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Otros benchmarks
‰
Whetstone: Benchmark sintético representativo de la programación numérica escalar (punto flotante). Está
formado por un conjunto de bucles con una alta localidad de referencia, lo que favorece a las cache pequeñas.
Utiliza muchas llamadas a librería, lo que posibilita mejorar los resultados optimizando estas librerías. El
resultado se expresa en whetstone/segundo, es decir, instrucciones del benchmark/segundo. Se basa en una
estadística recogida por Brian Wichmann del National Physical Laboratory de Inglaterra, utilizando un
compilador Algo 60 que traducía Algo a instrucciones de la máquina imaginaria Whetstone, una pequeña
ciudad a las afueras de Leicester.
‰
Dhrystone: Benchmark sintético que utiliza un juego de palabras relativas a su antecesor whetstone y es
representativo de programas generales (enteros) escritos originariamente en Fortran. Reúne operaciones
aritméticas de enteros, tratamiento de caracteres y punteros. Está constituido por un bucle de gran tamaño. El
resultado se expresa en dhrystone/segundo, es decir, número de ejecuciones del bucle por segundo. En la
actualidad está también disponible en ADA, Pascal y C.
2. Influencia en el rendimiento de las alternativas de diseño
Revisaremos en este apartado las alternativas de diseño de los repertorios de instrucciones (ISA)
estudiadas en los temas anteriores con el objeto de seleccionar aquellas que aportan mayor rendimiento al
procesador. En muchos casos las alternativas se contemplan junto con datos reales de su presencia en el código
máquina que generan los compiladores para programas reales. El resultado será la caracterización de un repertorio
(ISA) que definirá las propiedades generales de los procesadores de tipo RISC. Nosotros proyectaremos estas
propiedades sobre un procesador hipotético denominado DLX, que es un compendio de las principales
características de los actuales procesadores RISC: MIPS, Power PC, Precision Architecture, SPARC y Alpha.
2.1 Tipo de elementos de memoria en la CPU
Tres alternativas:
Tipo de máquina
Ventajas
Pila
Acumulador
• Instrucciones cortas
•
Registros
• Mayor flexibilidad para los compiladores •
• Más velocidad (sin acceso a Memoria)
Inconvenientes
Elevado tráfico con Memoria
Instrucciones más largas
El tráfico con memoria es uno de los cuellos de botella más importantes para el funcionamiento del procesador. Se
disminuye este tráfico con instrucciones que operen sobre registros, ya que el acceso es más rápido y las
referencias a los registros se codifican con menor número de bits (instrucciones más cortas).
Conclusión
‰ Se opta por el tipo de máquina con registros de propósito general (RPG)
2.2 Referencias a memoria en instrucciones ALU
Tres alternativas:
Tipo de máquina
Ventajas
Registro-Registro
• Ninguna referencia a Memoria
• Codificación fija => formato simple
• Generación de código simple
Registro-Memoria
• Menor número de instrucciones
•
Inconvenientes
Mayor número de instrucciones
por programa
•
Mayor tráfico con Memoria
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Memoria-Memoria
•
•
Muchos tipos de direccionamiento
Nnúmero mínimo de instrucciones
por programa
•
•
•
Formato más complejo
Mucho acceso a memoria
Formato complejo
Conclusión
‰ Dentro de las máquinas con registros de propósito general, las que operan en la instrucciones ALU de registro
- registro (RR) son las que optimizan el uso de registros, quedando el acceso a memoria limitado a las
instrucciones de carga y almacenamiento.
Registros
Genearales
R0
R1
ALU
R2
Almacenamiento
R3
.
Carga
Memoria
.
.
.Rn
2.3 Orden de ubicación de los datos
Dos alternativas:
Selección basada en
big-endian
motivos de compatibilidad
litle-endian
Conclusión
‰ Es indiferente desde el punto de vista del rendimiento. Serán motivos de compatibilidad con otros
procesadores los que determinen una elección
2.4 Alineamiento de datos
Dos alternativas:
acceso alineado
acceso no alineado
•
•
•
más rápido
más lento en general
mayor flexibilidad
Conclusión
‰ Datos alineados, o si el procesador permite lo no alineados, será el compilador quien genere siempre datos
alineados.
2.5 Direccionamientos
Los modos de direccionamiento pueden reducir significativamente el número de instrucciones de un
programa. Sin embargo, añaden complejidad al repertorio aumentando con ello el CPI (número medio de ciclos
por instrucción). En la gráfica siguiente aparecen los resultados de medir los modos de direccionamiento que
utilizan 3 programas del SPEC89 sobre la arquitectura VAX (una de las que más modos de direccionamiento
dispone): Tex, Spice y gcc. Como puede observarse en la gráfica, los direccionamientos inmediato y con
desplazamiento dominan con diferencia sobre los demás. No se ha incluido el direccionamiento relativo que se
utiliza casi exclusivamente en las instrucciones de bifurcación.
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1%
Indirecto memoria
1%
0%
Indexado
16%
6%
3%
Indirecto registro
6%
24%
TeX
11%
Spice
gcc
43%
17%
Inmediato
39%
32%
Desplazamiento
55%
40%
0%
Otros
0%
3%
3%
10%
20%
30%
40%
50%
60%
Frecuencia de los modos de direccionamiento
El direccionamiento registro + desplazamiento alcanza más del 75%. El tamaño de los desplazamientos no aparece
en la gráfica pero varía de 12 a 16 bits en un porcentaje que va del 75% al 99%. El tamaño del campo inmediato
varia de 8 a 16 bits en un porcentaje que va del 50% al 80%.
Conclusiones
Una máquina eficiente, que favorezca los casos frecuentes (que como hemos visto por la ley de Amdahl son los
que más aportan a la ganancia de velocidad global de la máquina) debería soportar:
‰
‰
‰
‰
Direccionamientos registro + desplazamiento y el inmediato
Tamaños de los desplazamientos de 12 a 16 bits
Tamaño del dato inmediato de 8 a 16 bits
La supresión de los modos complejos no afectan decididamente al rendimiento
2.5 Datos operando
La siguiente figura muestra el porcentaje de referencias en los benchmarks anteriores a los objetos de
datos mas usuales: byte, media palabra, palabra y doble palabra. Se desprende que los accesos a datos de longitud
palabra o doble palabra dominan sobre los demás. Si a ello añadimos la necesidad de acceder al elemento mínimo
que define la resolución del direccionamiento, así como el soporte del tipo carácter, es decir, el byte; y la
existencia en la mayoría de los procesadores de operaciones hardware en punto flotante, llegamos a las siguientes
Conclusiones
‰ enteros de 16 y 32 bits
‰ flotantes de 64 bits
‰ caracteres de 8 bits
24
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
0%
Doble Palabra
66%
0%
89%
34%
Palabra
91%
TeX
Spice
Media Palabra
0%
0%
4%
gcc
11%
BYTE
0%
5%
0%
20%
40%
60%
80%
100%
Frecuencia de la referencia
2.6 Operaciones
Se cumple en la práctica que las operaciones más simples son las que más se repiten en los programas,
concretamente las operaciones de carga, salto condicional, comparación, almacenamiento, suma, and, resta,
transferencia entre registros y saltos-retornos de subrutina se llevan el 96% de las ocurrencias, para el caso de
programas enteros ejecutándose sobre la familia x86, tal como muestra la siguiente tabla:
ordenación
1
2
3
4
5
6
7
8
9
10
instrucción x86
carga
salto condicional
comparación
almacenamiento
suma
and
resta
transferencia RR
salto a subrutina
retorno de subrutina
TOTAL
% total ejecutadas
22%
20%
16%
12%
8%
6%
5%
4%
1%
1%
96%
Conclusiones
‰ El repertorio ISA de un procesador eficiente no debera incluir muchas más operaciones que las aparecidas en
la tabla anterior.
2.8 Sentencias de salto condicional
En la siguiente figura tenemos el porcentaje de aparición de los tres tipos de sentencias de ruptura de
secuencia. Como se puede observar las bifurcaciones condicionales ocupan el primer lugar (un 75%), por lo que
resulta importante diseñar de forma eficiente el mecanismo de generación de condiciones y salto sobre el valor de
las mismas.
25
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
16%
13%
10%
Llamada/retorno
Bifurcación
12%
12%
TeX
Spice
gcc
18%
66%
Condicional
0%
10%
20%
30%
40%
50%
60%
75%
78%
70%
80%
90%
Frecuencia de un salto de este tipo
Si analizamos la distribución de los saltos condicionales observamos (figura siguiente) que más de un 70% son
saltos sobre igual o diferente, y un gran número son comparaciones con cero. Esto justifica que algunos
procesadores incorporen un registro cuyo contenido es siempre igual a cero.
25%
LT/GE 0%
GT/LE
11%
TeX
3%
25%
0%
Spice
72%
75%
EQ/NE
0%
20%
40%
60%
gcc
89%
80%
100%
Frecuencia de tipos de com paraciones en saltos
La gráfica siguiente muestra la distribución del desplazamiento (número de bits) relativa al PC:
40
punto flotante
35
30
enteros
25
20
15
10
5
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bits del desplazamiento
Conclusiones
‰ Instrucciones que integren el test sobre la condición y el correspondiente salto
‰ Registro cuyo contenido es inalterable igual a cero.
‰ Desplazamiento de 8 bits
2.9 Llamadas a procedimientos (subrutinas)
Aunque las instrucciones de llamada a procedimientos no son tan frecuentes como las de bifurcación
condicional, su consumo de tiempo en los LAN es elevado debido a la gestión de los registros de activación (RA)
26
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
que deben de realizar. Resulta, pues, conveniente optimizar la ejecución de estas instrucciones. Del análisis de los
datos se deducen los siguientes hechos:
•
•
•
Más del 98% de las llamadas utilizan menos de 6 parámetros
Más del 92% de las llamadas utilizan menos de 6 variables locales
La variación del nivel de anidamiento en la que se mueve un programa se mantiene relativamente pequeña a
lo largo de una secuencia de llamadas/retorno, como se muestra en la siguiente figura:
tiempo en unidades de llamada/retorno
retorno
t = 33
llamada
w=5
profundidad
de
anidamiento
Puede observarse que la variación del nivel de anidamiento se ha mantenido dentro de un valor w = 5 durante una
secuencia de t = 33 llamadas/retornos de procedimientos.
Conclusiones
‰ Este comportamiento de los programas en lo relativo a las llamadas a procedimientos se ha explotado en
algunos procesadores (por ejemplo, SPARC) utilizando una ventana de registros para soportar los entornos,
marcos o registros de activación (RA). Este mecanismo lo analizamos en el punto siguiente.
Registros de propósito general: ventanas para soportar llamadas a procedimientos
El procesador dispone de n registros físicos r0, r1, ...rn de los que en cada momento sólo son visibles para
el programador (ventana) m de ellos: R0, R1, ..., Rm (m < n). Cuando todavía no se ha realizado ningún salto a
subrutina, los registros visibles coinciden con los m primeros registros físicos. Cuando se ejecuta una instrucción
de salto, los registros visibles se desplazan sobre los físicos de tal manera que se da un solapamiento entre los
últimos antes del salto y los primeros después del salto. Es en los registros de solapamiento donde se realiza el
paso de parámetros a la rutina y la devolución de resultados.
27
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
registros físicos de la máquina
r0
r1
ri
rn
Ventana de registros visibles
R0
Rm
R. parámetros
R. var. locales
R. temporales
R0
salto 1
Rm
R. parámetros
R. var. locales
R. temporales
R0
R. parámetros
ventana de solapamiento 1
Rm
R. var. locales
R. temporales
salto 2
ventana de solapamiento 2
El conjunto de registros tiene una estructura de buffer circular, de tal manera que cuando se agota su capacidad se
lleva a memoria el conjunto de registros del entorno (registro de activación) que primero se introdujo (primera
llamada). El tamaño del buffer se elige de manera tal que permita soportar un nivel de anidamiento activo (en
registros) de acuerdo a los datos empíricos que muestran los programas. En nuestro caso vimos que una variación
de nivel igual a 5 se mantenía durante 33 llamadas/retorno, lo que significa que durante esas 33 llamadas todos
los registros de activación se hubiesen soportado en un sistema con 5 ventanas .
B.in
A.out
A.loc
ventana salvada
B.loc
C.in
B.out
ventana actual
A.in
restauración
salvaguardia
Ejemplo
En la siguiente figura se presenta el diseño de un sistema de registros con ventana de solapamiento
que dispone de 32 registros físicos, r0, r1, ...r31, y una ventana de 8 registros: R0, R1, ..., R7. El
solapamiento es de 2 registros.
28
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
000
001
010
011
100
JSR
RTS
+1
-1
00000
00110
01100
01010
10110
Lógica
combinacional
Sumador
dirección del
registro visible
r0
R0
r1
R1
r2
R2
r3
R3
r4
R4
r5
R5
r6
R6
R0
r7
R7
R1
r8
R2
r9
R3
r10
R4
r11
R5
r12
R6
r13
R7
r31
3. Influencia de los compiladores de lenguajes de alto nivel
Las prestaciones de los actuales computadores al ejecutar un programa dependen significativamente del
compilador que se utilice. Cuando se diseña el repertorio de instrucciones se tiene en mente en todo momento la
tecnología de diseño de compiladores. Las decisiones arquitectónicas afectan directamente a la complejidad de
diseño de un buen compilador
Un compilador consta de una serie de etapas, las cuales transforman representaciones abstractas de alto
nivel, en representaciones de más bajo nivel, hasta llegar al repertorio de instrucciones. Un compilador busca en
primer lugar la exactitud de la traducción (mantenimiento de la semántica del programa en la transformación), en
segundo lugar la velocidad del código generado, en tercer lugar el tamaño del código, en cuarto lugar la velocidad
del compilador, y en quinto lugar el soporte a la depuración. Desde el punto de vista del rendimiento que ahora
nos ocupa, la velocidad del código generado es el factor a optimizar
‰
‰
Las optimizaciones realizadas por los compiladores modernos podemos resumirlas en las siguientes:
Optimización de alto nivel: realizadas en el código fuente
• Integración de procedimientos: sustituye la llamada a un procedimiento por el cuerpo de éste (expansión
de macros).
Optimizaciones locales: afectan a fragmentos de código lineal (sin bifurcaciones)
• Eliminación de subexpresiones comunes
• Propagación de constantes
29
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Reducción del tamaño de la pila en la evaluación de expresiones reorganizando su estructura
‰
Optimizaciones globales: afectan al programa completo, son más complejas de implementar.
• Optimización de bucles
• Eliminación de subexpresiones comunes de alcance global (incluyendo saltos)
• Propagación de copias: sustituye todas las instancias de una variable asignada.
‰
Optimización del uso de registros: es una de las que reporta mayor incremento de rendimiento. La
estudiaremos con más detalle a continuación.
‰
Optimizaciones dependientes de la máquina: Aprovechan el conocimiento de las arquitecturas específicas.
• Multiplicación por una constante y sustitución por sumas y desplazamientos
• Elección del desplazamiento más corto en los saltos
Por último conviene destacar que las dos ayudas más importantes que la arquitectura de un procesador puede
prestar al diseño del compilador son:
•
•
Regularidad del repertorio, es decir, ortogonalidad de sus elementos para simplificar la generación de código
Proporcionar funciones primitivas, no soluciones codificadas en las instrucciones, pues estas resultan difícil
de utilizar cuando el caso se aparta ligeramente del que originó su diseño.
3.1 Optimización de registros
El uso optimizado de los registros de una máquina es responsabilidad del compilador cuya misión es
mantener en registros ( y no en memoria) los operandos necesarios para el mayor número posible de cálculos,
minimizando las operaciones de carga/almacenamiento de registros que requieren el acceso a memoria
El proceso de asignación óptima de registros se realiza en dos fase:
1) Diseño del grafo de interferencias entre las variables del programa:
nodos: las variables
arcos: entre variables que están activas simultáneamente en el programa
2) Coloreado del grafo
Se intenta colorear el grafo con n colores, siendo n el nº de registros disponibles en la máquina. A los nodos no
coloreados se le asignan posiciones de memoria y se utilizan instrucciones de carga/almacenamiento.
Como se sabe este es un problema NP-duro que requiere el uso de heurísticas muy elaboradas para acortar el
tiempo de proceso.
Ejemplo
Asignación de las 6 variables (V1,...V6) que aparecen en el segmento de programa de la siguiente figura, en la
que se indica de forma gráfica sus interferencias. Se disponen de 3 registros en la máquina: R1, R2 y R3.
1) Se construye el grafo de interferencias tal como se muestra en la siguiente figura.
2) Se colorea el grafo asignando a los nodos los tres registros de manera que no se asigne el mismo registro a
dos nodos conectados por un arco en el grafo.
3) Los nodos que no pueden ser asignados a registros se asignan a memoria (V7)
30
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
R1
V1
V2
V3
V4
V5
R2
V6
V1
V2
V3
V4
R3
R1
V5
R3
V6
Memoria
1. Procesadores RISC y CISC
Características comparativas
CISC(Complex Instruction Set Computers)
• Arquitectura RM y MM
• Diseñadas sin tener en cuenta la verdadera demanda
de los programas
• Objetivo: dar soporte arquitectónico a las funciones
requeridas por los LANs
• Muchas
operaciones
básicas
y
tipos
de
direccionamiento complejos
• Instrucciones largas y complejas con formatos muy
diversos ==> decodificación compleja (lenta)
• Pocas instrucciones por programa ==> elevado
número de ciclos por instrucción (CPI)
• Muchos tipos de datos ==> interfaz con memoria
compleja
• Número limitado de registros de propósito general
==> mucho almacenamiento temporal en memoria
• Baja ortogonalidad en las instrucciones ==> muchas
excepciones para el compilador
RISC( Reduced Instruction Set Computers)
• Arquitectura RR (carga/almacenamiento)
• Diseñadas a partir de las mediciones practicadas en los
programas a partir de los 80
• Objetivo: dar soporte eficiente a los casos frecuentes
•
•
•
•
•
•
Pocas operaciones básicas y tipos de direccionamiento
simples
Instrucciones de formato simple (tamaño filo) ==>
decodificación simple (rápida)
Muchas instrucciones por programa ==> reducido
número de ciclos por instrucción (CPI)
Sólo los tipos de datos básicos ==> interfaz con
memoria sencilla
Número elevado de registros ==> uso eficiente por el
compilador para almacenamiento temporal
Alto grado de ortogonalidad en las instrucciones ==>
mucha regularidad para el compilador
Segmentación
Una de la ventajas de los procesadores RISC es la facilidad que presentan sus instrucciones para ser ejecutadas de
forma segmentada, es decir, solapando dos o más fases de ejecución. La tarea de cada instrucción se divide en
etapas, de tal forma que en cada ciclo se ejecuta una etapa de una instrucción, simultaneándose la ejecución de
etapas de diferentes instrucciones.
31
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Modelo secuencial
instrucción 1
I
D
X
M
E
I
instrucción 2
D
X
M
E
instrucción 3
1
2
3
4
5
6
7
8
9
10
I
D
X
M
E
11
12
13
14
15 ciclos
Modelo segmentado lineal
Los primeros RISC tenían un modelo de ejecución segmentado lineal en el que todas las instrucciones pasan por
las mismas etapas y en cada ciclo entra una nueva instrucción a ejecutar.
instrucción 1
I
instrucción 2
D
X
M
E
I
D
X
M
E
I
D
X
M
E
I
D
X
M
E
I
D
X
M
E
7
8
9
instrucción 3
instrucción 4
instrucción 5
1
2
3
4
5
6
ciclos
Modelo infrasegmentado
En cada n ciclos se lanza una nueva instrucción (Stanford MIPS). Esto está motivado fundamentalmente porque el
tiempo de ciclo no permite acceder a algunos recursos hardware como la memoria, por lo que se necesitan dos (o
más) ciclos para acceder a la misma.
instrucción 1
I
D
instrucción 2
X
M
E
I
D
X
M
E
I
D
X
M
E
I
D
X
instrucción 3
instrucción 4
instrucción 5
1
2
3
4
5
6
7
8
9
M
E
I
D
10
11
X
M
12
13
E
14
Modelo supersegmentado
Aumentan el rendimiento disminuyendo el tiempo de ciclo. Esto lo consiguen aumentando considerablemente el
número de etapas del procesador (o dividiendo la etapa en subciclos). Con ello se consigue que el rendimiento
máximo del procesador aumente; pero tiene un inconveniente que va a afectar considerablemente al rendimiento
real: el aumento de las latencias de las instrucciones inducido por el aumento del número de conflictos entre las
instrucciones que tengan algún tipo de dependencia a la hora de la ejecución (dependencias de datos, estructurales
o de control), con la consiguiente pérdida de rendimiento.
32
ciclos
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
instrucción 1
I
instrucción 2
D
X
X
X
X
B
E
I
D
X
X
X
X
M
E
I
D
X
X
X
X
M
E
I
D
X
X
X
X
M
E
I
D
X
X
X
X
M
E
9
10
11
12
instrucción 3
instrucción 4
instrucción 5
1
2
3
4
5
6
7
8
ciclos
Modelo superescalar
Para aumentar el rendimiento el modelo superescalar lanza a ejecutar en cada ciclo n instrucciones a la
vez, siendo n el orden o grado del superescalar. Sin embargo, para que se puedan lanzar a ejecutar a la vez n
instrucciones no debe haber conflictos entre ellas. Éste es un factor que va a limitar, de forma significativa, el
rendimiento, y es una medida del paralelismo implícito que presentan las aplicaciones y que pueden extraer los
compiladores.
instrucción 1
I
D
X
M
E
instrucción 2
I
D
X
M
E
instrucción 3
I
D
X
M
E
instrucción 4
I
D
X
M
E
I
D
X
M
E
I
D
X
M
E
4
5
6
7
8
instrucción 5
instrucción 6
1
2
3
ciclos
Dependencias
Son las causantes de la disminución de rendimiento en la ejecución segmentada y superescalar. Son de tres tipos:
‰
Dependencias de datos
Producidas por la referencia a un mismo dato por más de una sentencia (instrucción). Son de tres tipos:
Dependencia de flujo (verdadera dependencia) RAW(Read After Write)
S1 Æ S2
S1
.
.
.
S2
Ejemplo:
X := ...
...:=...X...
Load r1, a
Add r2, r1, r1
33
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Antidependencia WAR (Write After Read)
S1 --/Æ S2
S1
.
.
.
S2
Ejemplo:
...:=...X...
X :=...
Mul r1, r2, r3
Add r2, r4, r5
Dependencia de salida WAW (Write After Write)
S1 –OÆ S2
S1
.
.
.
S2
Ejemplo:
X :=...
X :=...
Mul r1, r2, r3
Add r1, r4, r5
Grafo de dependencias
S1:
S2:
S3:
S4
Load
Add
Move
Store
R1, A
R2,R1
R1,R3
B,R1
/R1
/R2
/R1
/M(B)
Å
Å
Å
Å
M(A)/
<R1>+<R2>/
<R3>/
<R1>/
S1
S2
S4
S3
‰
Dependencias de control
Debido a las instrucciones de salto condicional.
Ejemplo:
zproc
‰
Mul r1, r2, r3
Jz zproc
Sub r4, r1, r1
.
.
.
Load r1, x
Dependencias de recursos(estructurales)
Producidas al tratar de usar recursos compartidos
34
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ejemplo: DLX
• Arquitectura de 32 bits
• 32 registros de uso general (GPR) de 32 bits. R0 siempre contiene 0
• Memoria direccionable por byte en modo big-endian
• Instrucciones de longitud fija de 32 bits y alineadas
• Un solo modo de direccionamiento: registro + desplazamiento (16)
• Datos 8, 16 y 32 bits (enteros)
Formatos de las instrucciones
6
tipo I
(Inmediato)
Operación
5
5
rs
rd
16
Inmediato
rd Å Memoria
Memoria Å rs
rd Å rs Operación Inmediato
Cargas
Almacenamientos
Operaciones inmediatas
6
Tipo J
(salto)
26
Operación
Destino
Saltos condicionales, incondicionales y a subrutina
Tipo R
(registro)
6
5
5
5
11
Operación
rs1
rs2
rd
Función
Operaciones aritmético-lógicas
rd Å rs1 Función rs2
Repertorio de instrucciones
Veamos algunas de las instrucciones de los diferentes grupos:
INSTRUCCIONES ARITMETICO/LOGICAS
Ejemplo
ADD (Sumar)
R1 ← R2 + R3
ADDI (Sumar inmediato)
R1 ← R2 + 3
SLLI (Desplazamiento lógico izquierda)
R1 ← R2 << 5
SLT (Activa menor que)
IF (R2 < R3) R1 ← 1 ELSE R1 ← 0
Semántica
ADD R1, R2, R3
ADDI R1, R2, #3
SLL R1, R2, #5
SLT R1, R2, R3
INSTRUCCIONES DE CONTROL DE FLUJO
Semántica
J (Salto)
PC ← nombre
JAL (Salto y enlace)
R31 ← PC + 4; PC ← nombre
JR (Salto registro)
PC ← R3
BEQZ (Bifurcación si igual cero)
IF (R4 == 0) PC ← nombre
BNEZ (Bifurcación si no igual cero)
IF (R4 != 0) PC ← nombre
Ejemplo
J nombre
JAL nombre
JR R3
BEQZ R4, nombre
BNEZ R4, nombre
Instrucción
Instrucción
INSTRUCCIONES DE CARGA/ALMACENAMIENTO
Semántica
Ejemplo
LW R1, 30 (R2)
R1 ←32 M[30 + R2]
LW R1, 1000 (R0)
R1 ←32 M[1000 + 0]
LB (Cargar byte)
R1 ←32 (M[40 + R3]0)24 ## M[40+R3] LB R1, 40 (R3)
LBU R1, 40 (R3)
LBU (Cargar byte sin signo)
R1 ←32 024 ## M[40+R3]
SW 500(R4), R3
SW (Almacenar palabra)
M[500+R4]←32 R3
Instrucción
LW (Cargar palabra)
35
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
SH (Almacenar media palabra)
SB (Almacenar byte)
M[502+R2]←16 R316..31
M[41+R3]←8 R224..31
SH 502(R2), R3
SB 41(R3), R2
Síntesis de otros modos de direccionamiento y operaciones
Instrucción aparente
Instrucción real
LW R2, <despl. de 16 bits>
Dir. Directo (16 bits)
LW R2, <despl. de 16 bits> (R0)
LW R2, <despl. de 32 bits>
Dir. Directo (32bits)
LW R1, <16 bits altos del despl.> (R0)
LW R2, <16 bits bajos del despl.> (R1)
LW R2, <despl. de 32 bits> (R4)
LW R1, <16 bits altos del despl.> (R0)
Dir. Base+Desplazamiento (32 bits)
ADDU R1, R1, R4
LW R2, <16 bits bajos del despl.> (R1)
Carga de un registro con datos inmediatos
ADDI R1, R0, #8
R1 Å 8
Transferencia entre registros
ADD R1,R0,R2
R1 Å R2
Eficiencia de los procesadores RISC
Comparación entre el VAX y el DLX utilizando 5 programas del SPEC92 (compress, eqntott, espresso, gcc, li)
Se representan las siguientes relaciones:
• relación (ratio) del número de instrucciones ejecutadas
• relación (ratio) de CPIs
• relación (ratio) de rendimiento medido en ciclos de reloj
Discusión:
el DLX ejecuta aproximadamente el doble de instrucciones que el VAX
el CPI del VAX es aproximadamente 6 veces que el del DLX
Conclusión:
el DLX tiene aproximadamente el triple de rendimiento que el VAX
4
4
ratio de rendimiento
3,5
3,5
3
2,5
2,5
2
2
ratio de instrucciones ejecutadas
1,5
1,5
1
1
ratio CPI
0,5
0,5
fi
eqntott
espresso
doduc
tomcatv
fpppp
nasa7
0
matrix
0
spice
DLX/VAX
3
SPEC 89
36
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 5: Organización de la memoria: memoria principal.
1. Características generales de las memorias.
2. Jerarquía de las unidades de memoria de un computador.
3. Memoria principal: organización.
4. Memoria entrelazada.
1. Características generales de las memorias
Las memorias se pueden clasificar atendiendo a diferentes criterios. Revisaremos en los
apartados siguientes los más significativos:
Método de acceso
• Acceso aleatorio (RAM): acceso directo y tiempo de acceso constante e independiente de
la posición.
• Acceso secuencial (SAM): tiempo de acceso dependiente de la posición.
• Acceso directo (DAM): acceso directo a un sector con tiempo de acceso dependiente de la
posición, y acceso secuencial dentro del sector.
• Asociativas CAM): acceso por contenido
Soporte físico
• Semiconductor
• Magnéticas
• Opticas
• Magneto-ópticas
Alterabilidad
• RAM: lectura y escritura
• ROM (Read 0nly Memory): Son memorias de sólo lectura. Existen diferentes variantes:
‰ ROM programadas por máscara, cuya información se escribe en el proceso de
fabricación y no se puede modificar.
‰ PROM, o ROM programable una sola vez. Utilizan una matriz de diodos cuya unión
se puede destruir aplicando sobre ella una sobretensión.
‰ EPROM (Erasable PROM) o RPROM (Reprogramable ROM), cuyo contenido puede
borrarse mediante rayos ultravioletas para volverlas a escribir.
‰ EAROM (Electrically Alterable ROM) o EEROM (Electrically Erasable ROM),
son
memorias que están entre las RAM y las ROM ya que su contenido se puede volver a
escribir por medios eléctricos. Se diferencian de las RAM en que no son volátiles.
‰ Memoria FLASH. Utilizan tecnología de borrado eléctrico al igual que las EEPROM,
pueden borrarse enteras en unos cuantos segundos, mucho más rápido que las
EPROM.
Volatilidad con la fuente de energía
• Volátiles: necesitan la fuente de energía para mantener la información.
• No volátiles: mantienen la información sin aporte de energía.
Duración de la información
• Estáticas: el contenido permanece inalterable mientras están polarizadas.
• Dinámicas: el contenido sólo dura un corto período de tiempo, por lo que es necesario
refrescarlo (reescribirlo) periódicamente.
Proceso de lectura
• Lectura destructiva: necesitan reescritura después de una lectura.
• Lectura no destructiva
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ubicación en el computador
• Interna (CPU): registros, cache(L1), cache(L2), memoria principal
• Externa (E/S): discos, cintas, etc.
Parámetros de velocidad
• Tiempo de acceso
• Tiempo de ciclo
• Ancho de banda(frecuencia de acceso)
Unidades de transferencia
• Palabras
• Bloques
2. Jerarquía de las unidades de memoria de un computador
Las distintas memorias presentes en un computador se organizan de forma jerárquica:
aumenta capacidad
nivel superior
aumenta velocidad
Registros de la CPU
Memoria cache(L1,L2)
Memoria principal
Discos magnéticos
Cintas, CD-ROM, etc.
En el nivel i+1 se ubica una copia de aquellos bloques del nivel i que tienen mayor probabilidad
de ser referenciados en el futuro inmediato
nivel i+1
nivel i
Este mecanismo de migración entre niveles es efectivo gracias al principio de localidad
referencial que manifiestan los programas:
• espacial
• temporal
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Se consigue que el mayor número de referencias generado por los programas correspondan a
informaciones ubicadas en los niveles más altos de la jerarquía.
3. Memoria principal: organización.
Una memoria principal se compone de un conjunto de celdas básicas dotadas de una
determinada organización. Cada celda soporta un bit de información. Los bits se agrupan en
unidades direccionables denominadas palabras. La longitud de palabra la determina el número
de bits que la componen y constituye la resolución de la memoria (mínima cantidad de
información direccionable). La longitud de palabra suele oscilar desde 8 bits (byte) hasta 64 bits.
Cada celda básica es un dispositivo físico con dos estados estables (o semi-estables) con
capacidad para cambiar el estado (escritura) y determinar su valor (lectura). Aunque en los
primeros computadores se utilizaron los materiales magnéticos como soporte de las celdas de
memoria principal (memorias de ferritas, de película delgada, etc.) en la actualidad sólo se
utilizan los materiales semiconductores.
Dentro de las memorias electrónicas de semiconductor podemos distinguir dos grandes
grupos: las estáticas (SRAM: Static Random Access Memory) y las dinámicas (DRAM: Dynamic
Random Access Memory). Las estáticas utilizan el principio de biestabilidad que se consigue con
dos puertas inversoras (NAND ó NOR) realimentadas, mientras que las dinámicas aprovechan la
carga o ausencia de carga de un pequeño condensador creado en un material semiconductor.
Debido a la descarga natural que sufren las celdas cargadas, las memorias dinámicas necesitan
un sistema de refresco que periódicamente - y antes que la carga eléctrica del condensador se
haga indetectable - recargue las celdas que se encuentran en estado de carga.
Desde un punto de vista conceptual y con independencia de la tecnología,
consideraremos la celda básica de memoria como un bloque con tres líneas de entrada (entrada
dato, selección y lectura/escritura) y una de salida (salida dato). La celda sólo opera (lectura ó
escritura) cuando la selección está activa.
Selección
Entrada dato
Salida dato
Lectura/Escritura
3.1 Organización interna de la memoria.
Las celdas de memoria se disponen en el interior de un chip atendiendo a dos
organizaciones principales: la organización por palabras, también denominada 2D, y la
organización por bits, también denominada 2 ½ D o 3D.
Organización 2D
Es la organización más sencilla que responde al esquema mostrado en la siguiente
figura:
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Matriz de celdas
dirección
2n
2n X m celdas
Selección
n
Control
SC
R/W
m
m
datos
entrada
datos
salida
Las celdas forman una matriz de 2n filas y m columnas, siendo 2n el número de
palabras del chip y m el número de bits de cada palabra. Cada fila es seleccionada por la
decodificación de una configuración diferente de los n bits de dirección.
Esta organización tiene el inconveniente que el selector (decodificador) de palabras crece
exponencialmente con el tamaño de la memoria. Igual le ocurre al número de entradas (fan-in)
de las puertas OR que generan la salida de datos.
Ejemplo
En la siguiente figura se muestra la organización 2D de un chip de memoria con 4 palabras de 4
bits:
De0
De1
De2
De3
R/W
A0
A1
3
2
DEC 1
0
Ds0
Ds1
Ds2
Ds3
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Organización 3D
En lugar de una única selección (decodificador) de 2n salidas en esta organización se
utilizan dos decodificadores
de 2n/2 operando en coincidencia. Las líneas de dirección se
reparten entre los dos decodificadores. Para una configuración dada de las líneas de dirección se
selecciona un único bit de la matriz. Por ello se la denomina también organización por bits.
Selección
X
2n/2
n/2
Matriz de celdas
n
dirección
2n/2
Selección
Y
2n X m celdas
n/2
Control
SC
R/W
m
m
datos
entrada
datos
salida
Ejemplo:
A2
A3
DEC
0
1
2
3
R/W
A0
A1
3
2
DEC 1
0
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
En esta organización se necesitan varias matrices de celdas básicas, tantas como bits
deba tener la palabra de memoria, actuando sobre ellas en paralelo los circuitos de
decodificación:
DE C X
u n a pa la br a
DE C
Y
3.2 Diseño de memorias
Cuando se ha de diseñar una memoria principal cuyas dimensiones (número de bits y
número de palabras) exceden a las de un chip, se tienen que disponer varios chips en una
placa de circuito impreso para alcanzar las dimensiones requeridas. Para mayor claridad
trataremos independientemente cada una de las dimensiones.
a) Ampliación del número de bits de la palabra de memoria
Se trata de formar una memoria de 2n * (m * k) bits a partir de chips de 2n * m bits
SC
SC
n
n
2n * m * k bits
2n * m bits
R/W
R/W
m
m•k
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El esquema general se muestra en la siguiente figura. Simplemente se disponen en paralelo k chips
de 2n * m bits al que llegarían las mismas líneas de dirección y control. Cada chip aportaría m líneas
de datos a la palabra de la memoria total.
SC
n
n
SC
1
n
SC
2
n
SC
k
2n x m bit s
2n x m bit s
2n x m bit s
R/W
R/W
R/W
m
R/W
m
m
k •m
Ejemplo: Diseño de una memoria de 1K x 8 bits a partir de módulos (chips) de 1K x 2 bits;
A0
A1
A9
SC
SC
SC
SC
SC
1K x 2 bit s
1K x 2 bit s
1K x 2 bit s
1K x 2 bit s
R/W
R/W
R/W
R/W
R/W
D0
.
.
.
D7
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
b) Ampliación del número de palabras de memoria
Se trata de formar una memoria de 2n * m* N bits a partir de chips de 2n * m bit, es decir,
aumentar el número de palabras manteniendo la misma longitud de palabra.
SC
SC
n
n+k
2n * m bits
2n * N * m bits
R/W
R/W
m
m
El esquema general se muestra en la siguiente figura. La nueva memoria tendrá n + k
líneas de dirección. Se disponen N=2k chips en paralelo a los que se llevan las mismas m líneas
de datos, las mismas n líneas de dirección menos significativas y la misma línea de
lectura/escritura (R/W). Las k líneas de dirección más significativas se decodifican para activar
con cada salida del decodificador el selector de chip (SC) de cada uno de los N=2k chips.
2k-1
An +k+1,...An
DEC
1
0
dir eccion es
An -1,...A0
SC
n
SC
1
n
SC
2
n
SC
N
2n x m bit s
2n x m bit s
2n x m bit s
R/W
R/W
R/W
m
R/W
bu s de da t os
n
m
m
m
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ejemplo: Diseño de una memoria de 4K x 8 bits con módulos de 1K x 8 bits;
A10
DE C
A11
SC
A0
A1
A9
SC
SC
SC
SC
SC
1K x 8 bit s
1K x 8 bit s
1K x 8 bit s
1K x 8 bit s
R/W
R/W
R/W
R/W
R/W
D0
.
.
.
D7
c) Ampliación de la longitud y el número de palabras de memoria
En este caso ampliaríamos en primer lugar el número de líneas de datos (longitud de
palabra) y con los bloques resultantes diseñaríamos una memoria con mayor número de
palabras.
SC
SC
n
n+k’
2n * m bits
2n * N * m * k bits
R/W
R/W
m
m*k
3.3 Ubicación en el espacio de direcciones.
Dado un espacio de direcciones dn-1, dn-2,...,d1, d0 y una memoria de capacidad 2m
palabras(m ≤ n)se trata de hallar la función lógica de selección (SC) que ubique a la memoria en
un segmento de direcciones consecutivas Di,...Dj, así como las señales locales de dirección de la
memoria.
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
D0
D1
D2
D3
.
.
.
Di
.
.
.
Dj
.
.
.
D2n-1
dn-1 dn-2........ d1
d0
0
0 ...
0
0
0
0 ...
0
1
0
0 ...
1
0
0
0 ...
1
1
.
.
.
--------------------Memoria
2m palabras
---------------------
1
1 ...
1
1
Debe cumplirse que Dj – Di + 1 = 2m
Bu s de dir ecciones
Dir ecciones loca les
dn -1
dn -2
.
.
.
d1
ldm -1
ldm -2
.
.
Mem or ia
2 m pa la br a s
.
ld1
ld0
d0
SC
F u n ción
de
selección
Si la memoria debe ocupar posiciones consecutivas, las líneas menos significativas del bus de
direcciones se conectarán con las líneas de direcciones locales de la memoria:
ld0
ld1
=
=
d0
d1
.
.
.
ldm-2 =
dm-2
ldm-1 =
dm-1
La función de selección será una función booleana del bus de direcciones:
SC = fb(dn-1, dn-2,...,d1, d0)
Ejemplo: Ubicar una memoria de 8 palabras en un espacio de 4 líneas de dirección
(d3,d2,d1,d0).
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ubicación 1: a partir de la dirección 5 (0101)
d0
D00
D01
D02
D03
D04
D05
D06
D07
D08
D09
D10
D11
D12
D13
D14
D15
d3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
d2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
d1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
d0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00
ld2
RAM
ld1
23 = 8
palabbras
ld0
d3
SC
01
11
10
00 0
0
0
0
01 0
1
1
1
11 1
0
0
0
10 1
1
1
1
d2
d1
d3 d2 d0 d3 d2 d1 d3 d1 d0 d3 d2
Ubicación 2: a partir de la dirección 4 (0100)
d0
D00
D01
D02
D03
D04
D05
D06
D07
D08
D09
D10
D11
D12
D13
D14
D15
d3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
d2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
d1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
d0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00
ld2
RAM
ld1
23 = 8
palabbras
ld0
d3
SC
01
11
10
00 0
0
0
0
01 1
1
1
1
11 0
0
0
0
10 1
1
1
1
d2
d1
d3
d2
d3
d2
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ubicación 3: a partir de la dirección 0 (0000)
d0
D00
D01
D02
D03
D04
D05
D06
D07
D08
D09
D10
D11
D12
D13
D14
D15
d3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
d2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
d1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
d0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00
ld2
RAM
ld1
23 = 8
palabbras
ld0
SC
d3
01
11
10
00 1
1
1
1
01 1
1
1
1
11 0
0
0
0
10 0
0
0
0
d2
d1
d3
Ubicación 4: a partir de la dirección 8 (1000)
d0
D00
D01
D02
D03
D04
D05
D06
D07
D08
D09
D10
D11
D12
D13
D14
D15
d3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
d2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
d1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
d0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00
ld2
RAM
ld1
23 = 8
palabbras
ld0
SC
d3
01
11
10
00 0
0
0
0
01 0
0
0
0
11 1
1
1
1
10 1
1
1
1
d2
d1
d3
Conclusión: la función de selección es más simple cuanto más alineado se encuentre el bloque
de memoria en el espacio de direcciones. La máxima alineación la tendremos cuando se cumpla
que:
dirección inicial mod 2n = 0
Es decir, el resto de dividir la dirección inicial por el tamaño de bloque es igual a 0.
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Caso de módulos con más de un selector
Se simplifica la lógica global de selección, pero hay que descomponer la función en un producto.
Ejemplo: ubicación 2 (anterior)
función de selección: SC = d2 • d3 + d2 • d3
que en forma de producto resulta:
SC = (d2 + d3) • (d2 + d3)
ld2
RAM
ld1
23 = 8
pa la bbr a s
da t os
ld0
SC1
SC2
d3
d2
d3
d2
Decodificación parcial y total
Cuando se generan las funciones de selección de varios bloques de memoria o puertos de E/S
que han de ubicarse en el espacio de direcciones tiene que evitarse siempre que una dirección sea
asignada a más de una posición de memoria o registro de E/S. En caso contrario el resultado de las
operaciones de lectura/escritura puede resultar incierto. Sin embargo, no es necesario que a una posición
de memoria o registro le corresponda sólo una dirección. En algunos casos, para simplificar la
decodificación, y siempre que no se vaya a utilizar totalmente el espacio disponible, se puede realizar una
decodificación parcial.
Ejemplo:
Ubicación en un espacio de direcciones de 12 líneas d11, d10,...,d1, d0 (212 = 4.086 = 4K) de un bloque
de RAM de 2K y un puerto de E/S de 4 registros.
d10
d1
RAM
da t os
d0
2 12 = 4K
pa la bbr a s
SC
d0
pu er t o E /S
22 = 4
pa la bbr a s
da t os
000
RAM
(2K)
SC
7F F
800
pu er t o E /S
(2K)
d11
FFF
La RAM la hemos decodificado completamente, en cambio el puerto de E/S presenta una decodificación
parcial, ya que hemos utilizado 2K del espacio disponible para ubicar tan sólo 4 palabras. Esto significa
que los 4 registros presentan múltiples direcciones cada uno (exactamente 512):
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
R0
R1
R2
R3
800
801
8o2
803
804
805
806
807
808
809
80A
80B
80C
80D
80D
80F
...
...
...
...
Decodificación en placa o en bus
Decodificación en placa
A0
RAM
da t os
A0
A12
2 13 = 8K
pa la bbr a s
SC
A13
A14
A15
A15
Decodificación en bus (back plane)
A0
A0
RAM
da t os
A12
2 13 = 8K
pa la bbr a s
SC
A12
A13
DE C
A14
A15
Disposición de los módulos de memoria
‰
SIMM (Single In-line Memory Module).
Un SIMM típico consta de varios chips de DRAM instalados en una pequeña placa de
circuito impreso (PCB) que se fija verticalmente a través de un conector a la placa del
sistema. Los SIMMs disponen de varios formatos y número de contactos. Una de las ventajas
de la memoria SIMM es la posibilidad de instalar gran cantidad de memoria en un área
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
reducida. Algunos SIMMs de 72 contactos contienen 20 ó más chips de DRAM; 4 de estos
SIMMs contienen, pues, 80 ó más chips de DRAM. Ocupan un área de 58 cm2 , mientras
que si los chips se instalaran horizontalmente en la placa del sistema ocuparían 135 cm2.
‰
DIMM (Dual In-line Memory Module).
Los módulos de memoria DIMM, al igual que los SIMMs, se instalan verticalmente en los
conectores de expansión. La diferencia principal estriba en que en los SIMMs los contactos
de cada fila se unen con los contactos correspondientes de la fila opuesta para formar un
solo contacto eléctrico; mientras que en los DIMMs los contactos opuestos permanecen
eléctricamente aislados para formar dos contactos independientes.
3.4 Detección y corrección de errores.
Códigos detectores de errores
Para la detección de errores simples en dispositivo de memoria se suelen utilizar los bits de
paridad. Es decir, se amplía en 1 la longitud de palabra para almacenar en las operaciones de
escritura la paridad total (par o impar) de la palabra. En las operaciones de lectura se
comprueba si se mantiene la paridad convenida. Las detecciones de fallos de la memoria se
suelen traducir en excepciones (interrupciones) del sistema.
Códigos correctores de errores (Hamming)
Permite la corrección de un error simple. El dato a transmitir de m bits de longitud se amplía
con k bits de paridad, suficientes para codificar la posición de un posible bit erróneo en el
mensaje completo de m + k bits. Es decir, deberá cumplirse que 2k – 1 ≥ m + k.
Nº de bits del
dato
8
16
32
64
128
256
Nº de bits de paridad
Nº total de bits
4
5
6
7
8
9
12
21
38
71
135
265
Incremento
porcentual
50 %
31,25 %
18,75 %
10,94 %
6,25 %
3,52 %
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Da t os de en tr a da
Da t os de sa lida
Libr e de er r ores
sim ples
F
Dir ecciones
Mem or ia
R/W
COMP
F
CORR
Ejemplo
Supongamos que la longitud de palabra de la memoria es m = 8.
Los datos de m = 8 bits
(d8, d7, d6, d5, d4, d3, d2, d1)
los ampliamos con k = 4 bits de paridad
(C8, C4, C2, C1)
para formar un mensaje de m + k = 12 bits
(m12, m11, m10, m9, m8, m7, m6, m5, m4, m3, m2, m1).
Los bits de paridad Ci ocupan las posiciones en el mensaje correspondientes a las
potencias de 2, es decir la 1, 2, 4 y 8 (de aquí el subíndice i).
Con los bits (C8, C4, C2, C1) se codifican todas las posiciones del mensaje (12), es decir:
(C8, C4, C2, C1) = 0 0 0 1 = 1 en decimal para m1, ...
(C8, C4, C2, C1) = 1 1 0 0 = 12 en decimal para m12,
de manera que cuando se produzca un error simple (complementación de un bit) en el bit mj del
mensaje, (C8, C4, C2, C1) sea igual a j en decimal.
Es decir, Ci deberá recoger la paridad de todos los mj que tengan Ci = 1 en su
codificación, incluido el propio Ci:
d8
d7
d6
d5
d4
d3
d2
d1
datos
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
C8
m8
1
0
0
0
m12
1
1
0
0
m11
1
0
1
1
m10
1
0
1
0
m9
1
0
0
1
d8
d8
⊕d7
⊕d6
⊕d5
d7
d7
⊕d6
⊕d5
m7
0
1
1
1
m6
0
1
1
0
m5
0
1
0
1
⊕d4
⊕d4
⊕d4
⊕d3
⊕d3
⊕d2
C4
m4
0
1
0
0
⊕d2
m3
0
0
1
1
⊕d1
⊕d1
C2
m2
0
0
1
0
C1
m1
0
0
0
1
paridades
mensaje
C8
C4
C2
C1
=
=
=
=
C8
C4
C2
C1
El sistema de memoria deberá generar en la escritura los bits de paridad Ci para
almacenarlos junto a los bits de datos
Supongamos que el dato escrito es: d8 d7 d6 d5 d4 d3 d2 d1 = 1001 1101
Los bits de paridad para el código de Hamming valdrán:
Función F:
C8
C4
C2
C1
=
=
=
=
d8⊕d7⊕d6⊕d5
d8⊕d4⊕d3⊕d2
d7⊕d6⊕d4⊕d3⊕d1
d7⊕d5⊕d4⊕d2⊕d1
=
=
=
=
1
1
0
0
⊕
⊕
⊕
⊕
0
1
0
1
⊕
⊕
⊕
⊕
0
1
1
1
⊕
⊕
⊕
⊕
1
0
1⊕1
0⊕1
=
=
=
=
0
1
1
1
En la lectura se generará de nuevo los bits de paridad con el bloque F’ a partir de los bits de datos
leídos de memoria. El bloque F’ responde a la misma función lógica que F. Supongamos que en la lectura
se produce un error simple en d5, es decir, escribimos un 1 y hemos leído un 0, el valor de F’ será:
Función F’:
C’8
C’4
C’2
C’1
=
=
=
=
d’8⊕d’7⊕d’6⊕d’5
d’8⊕d’4⊕d’3⊕d’2
d’7⊕d’6⊕d’4⊕d’3⊕d’1
d’7⊕d’5⊕d’4⊕d’2⊕d’1
=
=
=
=
1
1
0
0
⊕
⊕
⊕
⊕
0⊕0⊕0
1⊕1⊕0
0⊕1⊕1⊕1
0⊕1⊕0⊕1
=
=
=
=
1
1
1
0
Para detectar la existencia de un error simple y su posición (para poderlo corregir)
comparamos (Comparador COMP) los bits de paridad generados en la lectura, C’i con los
almacenados en la escritura, Ci:
Comporador COMP:
C’’8
C’’4
C’’2
C’’1
=
=
=
=
C8
C4
C2
C1
⊕
⊕
⊕
⊕
C’8
C’4
C’2
C’1
=
=
=
=
0
1
1
1
⊕
⊕
⊕
⊕
1
1
1
0
=
=
=
=
1
0
0
1
Si el resultado de la comparación es C’’8 C’’4 C’’2 C’’1 = 0 0 0 0 significa que no se ha
producido error. Si se ha producido un error, los Ci’’ codificarán su posición.
En nuestro ejemplo el resultado de la comparación vale
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
C’’8 C’’4 C’’2 C’’1 = 1 0 0 1 = 9 (decimal) Î el bit m9 del mensaje ha fallado, es decir el bit de
datos d5
Para corregir el error decodificamos su posición, es decir, los Ci’’ (decodificador DEC) con lo que
disponemos de una línea individual para cada posible posición de error.
Con cada una de estas líneas podemos controlar la inversión o no de la correspondiente línea de
datos di’ leída de memoria según que se haya producido o no error en dicha línea. Para la inversión
controlada de estas líneas utilizamos una etapa de puertas XOR.
En la siguiente figura aparece el esquema completo de la memoria tolerante a un fallo simple
y el proceso de corrección del fallo que hemos supuesto en el ejemplo
d1
d2
d3
d4
d5
d6
d7
d8
Direcciones
F
1001 1101
error
R/W
1000 1101
0111
1
1
1
0
COMP
F’
0
1
1
1
1
0
0
1
0
1
2
3
4
5
6
7
DEC 8
9
10
11
12
13
14
15
Ausencia de error
Corrector
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
d1
d2
d3
d4
d5
d6
d7
d8
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
F’ = F
C8
C4
C2
C1
=
=
=
=
D8
D7
D6
D5
D4
D3
D2
D1
F
d8 ⊕d7 ⊕d6 ⊕d5
d8 ⊕d4 ⊕d3 ⊕d2
d7 ⊕d6 ⊕d4 ⊕d3 ⊕d1
d7 ⊕d5 ⊕d4 ⊕d2 ⊕d1
=
=
=
=
=
=
=
=
Corrector
dec12 ⊕ d’8
dec11 ⊕ d’7
dec10 ⊕ d’6
dec9 ⊕ d’5
dec7 ⊕ d’4
dec6 ⊕ d’3
dec5 ⊕ d’2
dec3 ⊕ d’1
1. Memoria entrelazada.
Para aumentar el ancho de banda de una memoria principal se puede descomponer en
módulos con accesos independientes, de manera que se pueda acceder simultáneamente a una
palabra de cada uno de los módulos.
Me m o ria p rin c ip a l
R. Dir eccion es
R. Dir eccion es
R. Direccion es
Módu lo M0
Módu lo M1
Módu lo Mk
R. Da tos
R. Da tos
R. Da tos
Existen diferentes elementos de diseño en una memoria modular, siendo el orden del
entrelazado de las direcciones uno de los principales. Básicamente existen dos tipos de
entrelazado para el espacio de direcciones de una memoria: entrelazado de orden superior y
entrelazado de orden inferior.
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Entrelazado de orden superior
Mp = 2n palabras
Se divide Mp en 2m módulos de 2n-m palabras
m bits
(n – m) bits
Módulo
Dirección dentro del módulo
En tre lazado de orde n s u pe rior
Módulo M0
Módulo M1
Módulo Mk
R. Datos
R. Datos
R. Datos
D
E
C
Ejemplo: Para n = 5 y m = 2 tendríamos una distribución de direcciones de manera que las
consecutivas irán en el mismo módulo:
módulo
00
00
00
00
00
00
00
00
Dir.módulo
000
001
010
011
100
101
110
111
M0
módulo
0
1
2
3
4
5
6
7
01
01
01
01
01
01
01
01
Dir.módulo
000
001
010
011
100
101
110
111
M1
módulo
8
9
10
11
12
13
14
15
10
10
10
10
10
10
10
10
Dir.módulo
000
001
010
011
100
101
110
111
M2
módulo
16
17
18
19
20
21
22
23
11
11
11
11
11
11
11
11
Dir.módulo
000
001
010
011
100
101
110
111
M3
24
25
26
27
28
29
30
31
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Entrelazado de orden inferior
E n t re la z a d o d e o r d e n i n fe ri o r
Dir ección den t r o d el m ódu lo
Módu lo M0
Módu lo M1
Mód u lo Mk
R. Da t os
R. Da t os
R. Da t os
Módu lo
D
E
C
Ejemplo: Para n = 5 y m = 2 el entrelazado de orden inferior produciría una distribución de
direcciones de manera que las consecutivas irán módulos diferentes:
Dir.módulo
000
001
010
011
100
101
110
111
módulo
00
00
00
00
00
00
00
00
M0
0
4
8
12
16
20
24
28
Dir.módulo
000
001
010
011
100
101
110
111
módulo
01
01
01
01
01
01
01
01
M1
1
5
9
13
17
21
25
29
Dir.módulo
000
001
010
011
100
101
110
111
módulo
10
10
10
10
10
10
10
10
M2
2
6
10
14
18
22
26
30
Dir.módulo
000
001
010
011
100
101
110
111
módulo
11
11
11
11
11
11
11
11
M3
3
7
11
15
19
23
27
31
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
5.1 Memoria entrelazada con organización S
La organización S (Sencilla) utiliza entrelazado de orden inferior, accediendo
simultáneamente, con la misma dirección local, a la misma palabra de cada uno de los módulos
(n – m ) bit s
m bit s
Org a n i z a c i ó n S
Dir ección den t r o del m ódu lo
Módu lo M0
Mód u lo M1
Módu lo Mk
R. Da t os
R. Da t os
R. Da t os
Módu lo
Con t r ol
MU X
S a lid a
Módulos
M2m-1
.
.
.
acceso 1
acceso 2
acceso 3
M1
acceso 1
acceso 2
acceso 3
M0
acceso 1
acceso 2
acceso 3
Salida
m
(p1,M0) (p1,M1)...... (p1,M2 -1)
m
(p1,M0) (p1,M1)...... (p1,M2 -1)
tiempo
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
5.2 Memoria entrelazada con organización C
Org a n i z a c i ó n C
D
E
C
Con t r ola dor
De
Mem or ia
Dir ección Con t r ol
Módu lo M0
Dir ección
Con t r ol
Módu lo M1
Dir ección
Con t r ol
Módu lo Mk
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 6: Memoria Caché.
1. Principios básicos de funcionamiento de la memoria caché.
2. Elementos de diseño.
3. Factores de rendimiento de la memoria caché.
4. Ejemplos.
1. Principios básicos de funcionamiento de la memoria caché
La velocidad de la memoria se ha distanciado progresivamente de la velocidad de los procesadores. En la
figura siguiente se muestran las gráficas de la evolución experimentada por el rendimiento de las CPUs y las
memoria DRAM (soporte de la memoria principal de los computadores actuales) en los últimos años. Las curvas
muestran que el rendimiento de la CPU aumentó un 35% anual desde 1980 hasta 1987; y un 55% anual a partir de
ese año. En cambio la memoria ha mantenido un crecimiento sostenido del 7% anual desde 1980 hasta la fecha.
Esto significa que si se mantiene la tendencia, el diferencial de rendimiento no sólo se mantendrá sino que
aumentará en el futuro. Para equilibrar esta diferencia se viene utilizando una solución arquitectónica: la memoria
caché
100.000
CPU
10.000
55%
1000
Diferencia
progresiva
100
Memoria
(DRAM)
10
35%
7%
0.1
1980
1987
2000
Evolución de la mejora de rendimiento de la CPU y memoria DRAM
64 KB (DRAM)
La memoria caché es una memoria pequeña y rápida que se interpone entre la CPU y la memoria principal
para que el conjunto opere a mayor velocidad. Para ello es necesario mantener en la caché aquellas zonas de la
memoria principal con mayor probabilidad de ser referenciadas. Esto es posible gracias a la propiedad de localidad
de referencia de los programas.
Localidad de referencia
Los programas manifiestan una propiedad que se explota en el diseño del sistema de gestión de memoria de
los computadores en general y de la memoria caché en particular, la localidad de referencias: los programas tienden
a reutilizar los datos e instrucciones que utilizaron recientemente. Una regla empírica que se suele cumplir en la
mayoría de los programas revela que gastan el 90% de su tiempo de ejecución sobre sólo el 10% de su código. Una
consecuencia de la localidad de referencia es que se puede predecir con razonable precisión las instrucciones y datos
que el programa utilizará en el futuro cercano a partir del conocimiento de los accesos a memoria realizados en el
pasado reciente. La localidad de referencia se manifiesta en una doble dimensión: temporal y espacial.
Localidad temporal: las palabras de memoria accedidas recientemente tienen una alta probabilidad de
volver a ser accedidas en el futuro cercano. La localidad temporal de los programas viene motivada principalmente
por la existencia de bucles.
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Localidad espacial: las palabras próximas en el espacio de memoria a las recientemente referenciadas
tienen una alta probabilidad de ser también referenciadas en el futuro cercano. Es decir, que las palabras próximas
en memoria tienden a ser referenciadas juntas en el tiempo. La localidad espacial viene motivada fundamentalmente
por la linealidad de los programas (secuenciamiento lineal de las instrucciones) y el acceso a las estructuras de datos
regulares.
CPU
palabras
Memoria cache
(Mc)
bloques (líneas)
Memmoria principal
Mp
Para implementar el mecanismo de actualización de la caché con los datos con mayor probabilidad de ser
refernciados se divide la memoria principal en bloques de un número de bytes (4,8,16 etc.) y la caché en marcos de
bloque o líneas de igual tamaño. El bloque será, pues, la unidad de intercambio de información entre la memoria
principal y la caché, mientras que entre la caché y la CPU sigue siendo la palabra. El directorio contiene la
información de qué bloques de Mp se encuentran ubicados en Mc
Dirección
de memoria
0
1
2
n
Mp
Directorio
Mc
Bloque 0
Marco de
Bloque 0
Bloque 1
direccion
Marco de
Bloque m -1
n
Bloque 2 /K -1
2n -1
m marcos de bloque o líneas
2n palabras
K palabras/bloque
M = 2n/K bloques >> m
El funcionamiento de la memoria caché se puede resumir en el diagrama de flujo de la siguiente figura. En
él se describe el proceso de traducción de la dirección física procedente de la CPU (en el supuesto que el procesador
no disponga de memoria virtual o esté desactivado) en el dato ubicado en la posición de memoria determinada por
dicha dirección:
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mc <-- CPU(DF)
Recibe la
Dirección Física
(DF) de la CPU
no
¿ DF∈ bloque
en la cache?
(fallo)
Acceso a Mp para obtener
el bloque que contiene DF
si (acierto)
Leer el contenido de DF
y llevarlo a la CPU
Asignar un marco de la
cache al bloque de Mp
Mc <-- Mp(bloque)
CPU <-- <DF>
Cargar el bloque de
Mp en el marco
asignado de la cahe
Llevar el contenido
de la DF a la CPU
Cuando una dirección se presenta en el sistema caché pueden ocurrir dos cosas:
• Acierto de caché (hit): el contenido de la dirección se encuentre en un bloque ubicado en una línea de
la caché.
• Fallo de caché (miss): el contenido de la dirección no se encuentre en ningún bloque ubicado en alguna
línea de la caché.
Si en la ejecución de un programa se realizan Nr referencias a memoria, de las que Na son aciertos caché y Nf fallos
caché, se definen los siguientes valores:
•
Tasa de aciertos:
Ta = Na/ Nr
•
Tasa de fallos:
Tf = Nf/ Nr
Evidentemente se cumple: Ta = 1 - Tf
2. Elementos de diseño.
A la hora de diseñar un sistema de memoria caché hay que elegir entre una serie de alternativas para cada uno de los
siguientes elementos de diseño:
•
Función de correspondencia: determina las posibles líneas de la caché (marcos de bloque) en las que se
puede ubicar un determinado bloque de la memoria principal que ha sido referenciado por el programa y
hay que llevarlo a memoria caché.
•
Algoritmo de sustitución: determina el bloque que hay que desubicar de una línea de la caché cuando ésta
está llena y hay que ubicar un nuevo bloque.
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Política de escritura: determina la forma de mantener la coherencia entre memoria caché y memoria
principal cuando se realizan modificaciones (escrituras)
•
Política de búsqueda de bloques: determina la causa que desencadena la llevada de un bloque a la caché
(normalmente un fallo en la referencia)
•
Cachés independientes para datos e instrucciones: frente a cachés unificadas.
2.1 Función de correspondencia
Existen tres funciones de correspondencia para definir la posible ubicación de un bloque de memoria
principal (Mp) en la memoria caché (Mc): directa, asociativa y asociativa por conjuntos. En el primer caso un
bloque de Mp sólo puede ubicarse en una línea de la caché, aquella que coincide con el bloque cuando
superponemos Mc sobre Mp respetando fronteras de Mc, es decir, sobre espacios de Mp que son múltiplos del
tamaño de Mc. En la correspondencia asociativa un bloque puede ubicarse en cualquier línea de Mc. Finalmente, la
correspondencia asociativa por conjuntos es un compromiso entre las dos anteriores.
Mp
Mc
Mc
B0
B1
B2
B3
B4
B5
B6
B7
B0
B1
B2
B3
B4
B5
B6
B7
Directa
Asociativa
Mc
C0
C1
C2
C3
Asociativa por conjuntos
2.1.1 Correspondencia directa
En la correspondencia directa el bloque Bj de Mp se puede ubicar sólo en el marco de bloque MBi que cumple la
siguiente relación i = j mod m, donde m es el número total de líneas que tiene la caché. En la tabla siguiente se
especifica el conjunto de bloques que se pueden ubicar en una línea de Mc:
Bloques de Mp
m, 2m, ... , 2s-1m
m+1, 2m+1,..., 2s-1m+1
......
m-1, 2m-1, 3m-1,..., 2sm-1
0,
1,
Marcos de bloque de Mc
0
1
...
m-1
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Interpretación de una dirección física en correspondencia directa:
s
bloque
etiqueta
marco de bloque
s-r
palabra
r
w
2w palabras/bloque
2s bloques de Mp
2r marcos de bloque en Mc (2r = m)
2s-r veces contiene Mp a Mc
Los s - r bits de la etiqueta diferenciarán a cada uno de los bloques de Mp que pueden ubicarse en el
mismo marco de bloque de Mc. El directorio caché en correspondencia directa contendrá un registro de s - r bits por
cada marco de bloque para contener la etiqueta del bloque ubicado en ese momento en dicho marco.
El mecanismo de obtención del contenido de una dirección física en cachés con correspondencia directa
podemos resumirlo en el siguiente esquema:
Mp
s+w
etiqueta
marco
palabra
etiqueta
dato
dato
w
r
s-r
Memoria Cache
B0
MB0
dato
dato
etiqueta
s-r
dato
dato
Comparador
w
fallo
dato
MBi
s
dato
acierto
Bj
w
etiqueta
dato
dato
MBm-1
dato
B2s-1
dato
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ejemplo: para los tres tipos de correspondencia utilizaremos los siguientes datos:
•
•
•
Tamaño de bloque K = 4 bytes = 22 => w = 2
Tamaño de Mc = 64 KBytes = 216 Bytes = 214 marcos de bloque => r = 14
Tamaño de Mp = 16 MBytes = 224 Bytes = 222 bloques => s = 22
Una Mc de correspondencia directa se puede implementar sobre una RAM con longitud de palabra suficiente
para ubicar un bloque y los bits de etiqueta (directorio), tal como se muestra en la siguiente figura:
etiqueta
línea
palabra
Memoria cache (RAM)
Comparador
etiqueta
p0
p1
p2
p3
MB0
etiqueta
p04
p5
p6
p7
MB1
etiqueta
p8
p9
p10
p11
MB2
etiqueta
MBm-2
etiqueta
MBm-1
MUX
acierto
fallo
En una operación de lectura se lee la palabra completa de la RAM, es decir, la línea y la etiqueta.
Si la etiqueta leída coincide con la procedente de la dirección física, significa que la línea contiene la
palabra de Mp referenciada por dicha dirección física: se produce un acierto de caché. En este caso con los w bits de
palabra se selecciona la palabra referenciada dentro de la línea.
Si no coinciden las etiquetas, significa que Mc no contiene el bloque de Mp al que pertenece la palabra
referenciada, por lo que se produce un fallo de caché.
Parte de un posible contenido de Mc en un instante determinado para el ejemplo anterior podría ser el
siguiente:
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
etiqueta
línea
8
palabra
14
2
Mp
00
0000 13 57 92 46
0004 00 00 00 00
11 11 11 11
33 33 33 33
FFF8
FFFC
0000
0004
16MB
Mc
64KB
00
FF
16
00
13 57 92 46
24 56 78 99
22 33 44 55
33 33 33 33
16
55 55 55 55
13 67 988 8
24 24 25 26
22 33 44 55
16
MB0
MB1
MB2
MB3
.
.
.
.
.
.
.MB214-1
64KB
FFF8
FFFC 55 55 55 55
0000
0004
FF
13 12 34 56
24 56 78 99
64KB
FFF8
FFFC
Se ha dibujado Mp divididida en zonas consecutivas de tamaño 64 KB (igual que el tamaño de Mc) para facilitar la
correspondencia de los bloques de Mp y los marcos de bloque de Mc.
2.1.2 Correspondencia asociativa
En la correspondencia asociativa un bloque Bj de Mp se puede ubicar en cualquier marco de bloque de Mc.
Interpretación de una dirección física en correspondencia asociativa:
etiqueta
2s bloques de Mp
2r marcos de bloque de Mc
s
palabra
w
En este caso la etiqueta tendrá s bits para poder diferenciar a cada uno de los bloques de Mp (todos) que
pueden ubicarse en el mismo marco de bloque de Mc. El directorio caché en correspondencia asociativa contendrá,
pues, un registro de s bits por cada marco de bloque para contener la etiqueta del bloque ubicado en ese momento en
dicho marco.
El mecanismo de obtención del contenido de una dirección física en cachés con correspondencia asociativa
podemos resumirlo en el siguiente esquema:
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mp
s+w
etiqueta
Memoria Cache
palabra
B0
MB0
w
s
MBi
s
Bj
MBm-1
w
Comparador
acierto
fallo
El directorio de una Mc de correspondencia asociativa se puede implementar con una memoria asociativa con
tantas palabras como líneas tenga Mc. Las líneas se soportan sobre un array de memoria con longitud de palabra
suficiente para ubicar un bloque, tal como se muestra en la siguiente figura:
etiqueta
palabra
Dirección física
Etiquetas
Datos
MB0
MB1
Memoria
Asociativa
MBm-2
MBm-1
acierto/fallo
MUX
La memoria asociativa contiene las direcciones de todos los bloques de Mp ubicados en cada momento en
Mc. Opera realizando una comparación simultánea de su contenido con el campo de etiqueta de la dirección física.
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
2.1.3 Correspondencia asociativa por conjuntos
En la correspondencia asociativa por conjuntos las líneas de Mc se divide en v=2d conjuntos con k
líneas/conjunto o vías cada uno. Se cumple que el número total de marcos de bloque (líneas) que tiene la caché m =
v*k. Un bloque Bj de Mp se puede ubicar sólo en el conjunto Ci de Mc que cumple la siguiente relación i = j mod
v.
Interpretación de una dirección física en correspondencia asociativa por conjuntos:
s
bloque
etiqueta
s-d
conjunto
palabra
d
w
En este caso la etiqueta tendrá s – d bits para poder diferenciar a cada uno de los bloques de Mp que
pueden ubicarse en el mismo conjunto de Mc. El directorio caché en correspondencia asociativa por conjuntos
contendrá, pues, un registro de s - d bits por cada conjunto de líneas de Mc.
El esquema lógico de acceso a una caché de correspondencia asociativa por conjuntos se muestra en la siguiente
figura:
Mp
s+w
etiqueta
conjunto
Memoria Cache
palabra
B0
d
s-d
w
C0
s
Bj
w
Comparador
Cv-1
fallo
acierto
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Una Mc de correspondencia asociativa por conjuntos de v vías se puede implementar como k módulos de
correspondencia directa en paralelo cada uno con v líneas. Los conjuntos lo formarían las líneas que ocupan idéntica
posición en cada módulo:
etiqueta
conjunto
palabra
C0
C1
Comparador
MUX
C0
C1
Comparador
MUX
Si dibujamos Mp divididida en zonas consecutivas de tamaño 32 KB (con tantos bloques como conjuntos
tiene Mc) para facilitar la correspondencia de los bloques de Mp y los marcos de bloque de Mc, podremos
representar fácilmente parte de un posible contenido de Mc con correspondencia asociativa por conjuntos de dos
vías en un instante determinado para el ejemplo anterior.
k = 2 => v = m/k = 2r/2 = 214/2 = 213 => d = 13
w=2
s = 22 => s -d = 9
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
etiqueta
9
línea
palabra
13
2
Mp
000
0000 13 57 92 46
0004 00 00 00 00
11 11 11 11
33 33 33 33
Mc
32KB
7FF8
7FFC
0000
0004
13 67 98 88
24 24 25 26
22 33 44 55
001
001 13 67 98 88
1FF 24 56 78 99
000
001
001
1FF
13 57 92 46
24 24 25 26
C0
C1
C2
32KB
7FF8
7FFC 55 55 55 55
55 55 55 55
55 55 55 55
0000 13 12 34 56
0004 24 56 78 99
1FF
32KB
7FF8
7FFC 55 55 55 55
Las tres funciones de correspondencia se pueden ver en realidad como una sola, la asociativa por conjunto,
siendo las otras dos correspondencias casos extremos de ella:
conjunto/línea
etiqueta
índice
palabra
aumenta la
asociatividad
directa
asociativa
Si k = 1 ==> m = v ==> asociativa por conjuntos de 1 vía = directa
Si v = 1 ==> m = k ==> asociativa por conjuntos de m vías = asociativa
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
2.2 Algoritmos de sustitución
Como hemos visto, el espacio de ubicación de un bloque en Mc depende de la función de correspondencia. La
correspondencia directa reduce el espacio a un marco de bloque, por lo que no queda alternativa de sustitución
cuando hay que ubicar un nuevo bloque. En las correspondencias asociativa y asociativa por conjuntos hay que
decidir qué bloque sustituir. En la primera la elección se tiene que realizar sobre cualquier bloque presente en Mc,
mientras que en la segunda se reduce al conjunto único donde puede ubicarse el nuevo bloque. Las políticas de
reemplazamiento más utilizadas son cuatro:
1.
Aleatoria: se escoge un bloque al azar
2.
LRU(Least Recently Used)
• Se sustituye el bloque que hace más tiempo que no ha sido referenciado
• Algoritmo: se asocian contadores a los marcos de bloque y
Si se referencia MBi
∀ MBk : contador(MBk) ≤ contador(MBi) ==> contador(MBk) := contado(MBk) + 1
contador(MBi) = 0
Cuando se produce un fallo se sustituye el MBi : contador(MBi) = MAXIMO
•
3.
FIFO (First In First Out)
•
•
4.
Para una memoria asociativa de dos vías basta con añadir un bit de uso a cada marco de bloque.
Cuando un marco de bloque es referenciado su bit de uso se pone a 1 y el del marco del mismo
conjunto a 0. Cuando hay que sustituir se elige el marco de bloque con bit de uso igual a 0.
Se sustituye aquel bloque que ha estado más tiempo en la caché (independientemente de sus
referencias)
Se puede implementar con una cola
LFU(Least Frequently Used)
•
•
Se sustituye aquel bloque que ha experimentado menos referencias
Se puede implementar asociando un contador a cada marco de bloque
2.3 Política de escritura
Determina la forma de actualizar Mp cuando se realizan operaciones de escritura. Hay que diferenciar dos
casos: cuando la posición de memoria sobre la que se va a escribir está en Mc (acierto) y cuando no lo está (fallo).
1) Frente a aciertos en la caché: dos alternativas:
•
Escritura directa o inmediata (write through)
•
•
•
Todas las operaciones de escritura se realizan en Mc y Mp
Inconveniente: genera un tráfico importante a Mp
Solución: utilización de un buffer de escritura (alpha 21064)
Buffer
de
escritura
Mp
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Postescritura (copy back)
•
•
•
Las actualizaciones se hacen sólo en Mc
Se utiliza un bit de actualización asociado a cada marco de bloque para indicar la escritura del
marco en Mp cuando es sustituido por la política de reemplazamiento
Inconveniente: inconsistencia temporal entre Mc y Mp ==> complicación del acceso de la E/S a
memoria que debe realizarse a través de Mc.
2) Frente a fallos en la caché
•
Asignación en escritura (write allocate)
•
•
El bloque se ubica en Mc cuando ocurre el fallo de escritura y a continuación se opera como en un
acierto de escritura, es decir, con wirte through o copy back
No asignación en escritura (No write allocate)
•
El bloque se modifica en Mp sin cargarse en Mc
2.4 Política de búsqueda
Determina las condiciones que tienen que darse para buscar un bloque de Mp y llevarlo a una línea de Mc.
Existen dos alternativas principales:
1) Por demanda
• Se lleva un bloque a Mc cuando se referencia desde la CPU alguna palabra del bloque y éste no se
encuentra en Mc
2) Anticipativa (prebúsqueda)
•
Prebúsqueda siempre: la primera vez que se referencia el bloque Bi se busca también Bi+1
•
Prebúsqueda por fallo: cuando se produce un fallo al acceder al bloque Bi se buscan los bloques Bi y
Bi+1
Clasificación de los fallos caché
Los fallos de la caché se pueden clasificar en tres tipos:
•
Forzosos: producidos por el primer acceso a un bloque
•
Capacidad: producidos cuando Mc no puede contener todos los bloques del programa
•
Conflicto: (en correspondencia directa o asociativa por conjuntos) producidos por la necesidad de
ubicar un bloque en un conjunto lleno cuando Mc no está completa.
3. Factores que determinan el rendimiento de la memoria caché.
El tiempo de acceso a memoria durante la ejecución de un programa será :
Tacceso = Na * Tc + Nf * Tp
(1)
donde:
Na es el número de referencias con acierto
Nf es el número de referencias con fallo
Tc es el tiempo de acceso a una palabra de Mc
Tp es el tiempo de acceso a un bloque de Mp
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El tiempo de acceso medio durante la ejecución del programa valdrá:
Tacceso_medio = Tacceso/ Nr = Ta*Tc + Tf*Tp
donde:
Ta = Na/Nr es la tasa de aciertos
Tf = Na/Nr es la tasa de fallos
Nr es el número total de referencias a memoria
El tiempo de acceso a un bloque de Mp constituye la componente principal del tiempo total de penalización
de un fallo. En la siguiente expresión hemos considerado ambos términos equivalentes:
Tacceso_medio = Tacierto + Tf * Penalización_fallo
(2)
donde:
Tacierto = Ta*Tc, válido si frente a un fallo, el bloque se lleva a Mp al tiempo que la palabra referenciada del
bloque se lleva (en paralelo) a Mc. Si estas dos acciones se realizan de forma secuencial Tacierto = Tc. ya que
toda referencia implicaría un acceso a Mc y por tanto la expresión (1) se transformaría en:
Tacceso = Nr * Tc + Nf * Tp ==> Tacceso_medio = Tacceso/ Nr = Tc + Tf*Tp (3)
De las expresiones (2) ó (3) podemos inducir que para mejorar el rendimiento de una caché, podemos actuar sobre
tres términos, dando lugar a tres tipos de optimizaciones:
1.
2.
3.
Reducción de la tasa de fallos, Tf
Reducción de la penalización de los fallos, Penalización_fallo
Reducción del tiempo de acierto, Tacierto
3.1 Reducción de la tasa de fallos
La tasa de fallos podemos reducirla con las siguientes alternativas:
a) Aumento del tamaño del bloque
•
Al aumentar el tamaño de bloque disminuye la tasa de fallos iniciales (forzosos) porque mejora la localidad
espacial.
•
Sin embargo con el aumento del tamaño de bloque aumenta la penalización de fallos, ya que el tiempo de
lectura y transmisión serán mayores si los bloques son mayores.
b) Aumento de la asociatividad
•
Experimentalmente se comprueba que una caché asociativa por conjuntos de 8 vías es tan eficiente (tasa de
fallos) como una caché completamente asociativa.
Tf
Mc
1K
15%
10%
16
•
4K
32
64
128
tamaño de bloque
Una caché de correspondencia directa de tamaño N tiene aproximadamente la misma tasa de fallos que una
asociativa por conjuntos de 2 vías de tamaño N/2
• Al aumentar la asociatividad se incrementa el ciclo de reloj y por tanto Tacierto
c) Utilización de una caché de víctimas
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Se añade una pequeña caché completamente asociativa entre Mc y su camino hacia Mp para contener sólo los
bloques descartados (sustituidos) por un fallo (víctimas)
•
Ante un fallo se comprueba si el bloque está en la caché de víctima antes de acudir a Mp
•
Reducen los fallos de conflicto fundamentalmente en cachés pequeñas con correspondencia directa.
=
Cache de víctima
Mc
Mp
d) Cachés pseudoasociativas
Se trata de cachés de correspondencia directa que con una ligera modificación se pueden comportar como
asociativas. Para ello se permite que un bloque de Mp se pueda ubicar en dos (pseudoasociativa de 2 vías) marcos
de bloque de Mc, el que le corresponde (por la correspondencia directa) y el que resulta de conmutar el bit más
significativo de la dirección del bloque, tal como se indica en el siguiente esquema:
etiqueta
marco
palabra
Memoria cache pseudoasociativa
0 X X...........X
conjunto
pseudoasociativo
1 X X...........X
Comparador
MUX
acierto
fallo
Analicemos el rendimiento de una Mc pseudoasociativa:
Tiempo_acceso_mediopseudo = Tiempo_aciertopseudo + Tasa_fallospseudo *Penalización_fallospseudo
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tasa_fallospseudo = Tasa_fallos2vías
Penalización_fallospseudo = Penalización_fallosdirecta
Tiempo_aciertopseudo = Tiempo_aciertodirecta + Tasa_aciertos_alternativospseudo *2
Tasa_aciertos_alternativospseudo = Tasa_aciertos2vías - Tasa_aciertosdirecta =
(1 - Tasa_fallos2vías)- (1 - Tasa_fallosdirecta) = Tasa_fallosdirecta - Tasa_fallos2vias
Tiempo_acceso_mediopseudo = Tiempo_aciertodirecto + (Tasa_fallosdirecta - Tasa_fallos2vias)*2 +
Tasa_fallos2vías *Penalización_fallosdirecta
Ejemplo:
Tamaño (caché)
2K
2K
grado asociatividad
1
2
tasa de fallos
0,098
0,076
penalización fallo
50
-
Tiempo de acierto
1
-
Tiempo_acceso_mediopseudo = 1 + (0,098 - 0,076)*2 + 0,076*50 = 4,844
Tiempo_acceso_mediodirecta 1 + 0,098*50 = 5,90 > 4,844
e) Prebúsqueda de instrucciones y datos
•
La prebúsqueda de instrucciones y/o datos antes de ser demandados por la caché disminuye la tasa de
fallos.
•
Las instrucciones o datos prebuscados son llevados directamente a la caché o a un buffer externo que es
accedido a mayor velocidad que Mp
Mc
Buffer
de
Prebúsqueda
Mp
•
El Alpha AXP 21064 pre-busca dos bloques cuando ocurre un fallo, el que contiene la palabra causante del
fallo y el siguiente. El primero lo coloca en MC y el segundo en el buffer de prebúsqueda
•
Experimentalmente se ha comprobado que un buffer de prebúsqueda simple elimina el 25 % de los fallos de
una caché de datos con correspondencia directa de 4 KB
f) Prebúsqueda controlada por el compilador
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Utiliza instrucciones explícitas de prebúsqueda del tipo prefetch(dato) que el compilador utiliza para optimizar
los programas después de realizar un análisis de sus sentencias.
•
La prebúsqueda se realiza al tiempo que el procesador continúa la ejecución del programa, es decir, la
prebúsqueda se hace en paralelo con la ejecución de las instrucciones.
•
Los bucles son las construcciones más apropiadas para que el compilador genere prebúsqueda
Ejemplo
Supongamos que en una caché de 8 KB de correspondencia directa y bloques de 16 bytes se ejecuta el
siguiente programa:
for (i = 0; i < 3; i = i + 1)
for (j = 0; j < 100; j = j + 1)
a[i][j] = b[j][0] * b[j+1][0];
Cada elemento de los arrays a[i][j] y b[j][j] ocupan 8 bytes (doble precisión) y están dispuestos en
memoria en orden ascendente de sus índices, es decir:
a[0][0]
a[0][1]
a[0][2]
........
a[0][99]
a[1][0]
a[1][1]
a[1][2]
........
a[1][99]
a[2][0]
a[2][1]
a[2][2]
........
a[2][99]
b[0][0]
b[0][1]
b[0][2]
.........
b[0][99]
b[1][0]
b[1][1]
b[1][2]
.........
b[1][99]
b[2][0]
b[2][1]
b[2][2]
.........
b[2][99]
Cada 2 elementos consecutivos ocupan un bloque, por lo que a[ ][ ] se beneficiará de la localidad espacial:
los valores pares de j producirán fallos (forzosos: primera lectura) y los impares aciertos (puesto que se llevan a Mc
en los mismos bloques que los pares). Por tanto, teniendo en cuenta que tenemos 3 filas y 100 columnas, el número
de fallos será (3 * 100)/2 = 150.
El array b[ ][ ] no se beneficia de la localidad espacial ya que los accesos no se realizan en el orden en que
están almacenados sus elementos. En cambio se beneficiará dos veces de la localidad temporal ya que se accede a
los mismos elementos para cada iteración de i. Además, cada iteración de j usa los mismos valores de b[ ][ ] que la
iteración anterior. Ignorando los posibles fallos por conflicto, el número de fallos en el acceso a b serán 101, es
decir, 1 para b[0][0] y 100 para b[1][0] hasta b[100][0]. En la 1ª iteración se producirán dos fallos: b[0][0] y
b[1][0]; en la 2ª uno: b[2][0], puesto que b[1][0] ya está en Mc; en la última uno: b[100][0].
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mc
iteraciones
a[0][0]
a[0][1]
b[0][0]
b[0][1]
b[1][0]
b[1][1]
i= 0, j= 0
a[0][0] ,b[0][0],b[1][0]
b[2][0]
b[2][1]
i= 0, j= 1
a[0][1] ,b[1][0],b[2][0]
a[0][2]
a[0][3]
b[3][0]
b[3][1]
i= 0, j= 2
a[0][2] ,b[2][0],b[3][0]
a[0][98]
a[0][99]
b[99][0]
b[99][1]
i= 0, j= 98
a[0][98] ,b[98][0],b[99][0]
b[100][0]
b[100][1]
i= 0, j= 99
a[0][99] ,b[99][0],b[100][0]
1 + 100 = 101 fallos
a[1][0]
a[1][1]
i= 1, j= 0
a[2][98]
a[2][99]
i= 2, j= 98
a[1][0] ,b[0][0],b[1][0]
a[1][0] ,b[0][0],b[1][0]
3*100/2 = 150 fallos
El número total de fallos será, pues, de 251.
Utilizando prebúsqueda el compilador puede transformar el programa en el siguiente:
for (j = 0; j < 100; j = j + 1)
prefetch (b[j+6][0]);
prefetch (a[0][j+6]);
a[0][j] = b[j][0] * b[j+1][0];
for (i = 1; i < 3; i = i + 1)
for (j = 0; j < 100; j = j + 1)
prefetch (a[i][j+6]);
a[i][j] = b[j][0] * b[j+1][0];
Se ha descompuesto el bucle en dos, el primero (iteración para i = 0) prebusca a partir de b[6][0] y a[0][6]:
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Mc
prebusqueda
a[0][6]
b[6][0]
a[0][7]
b[0][7]
fallos
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[0][5]
3 fallos
a[0][99]
b[0][0]
b[0][1]
iteraciones
b[1][0]
b[1][1]
i= 0, j= 0
b[2][0]
b[2][1]
i= 0, j= 1
b[3][0]
b[3][1]
i= 0, j= 2
b[4][0]
b[4][1]
i= 0, j= 3
b[5][0]
b[5][1]
i= 0, j= 4
1 + 5 = 6 fallos
b[99][0]
i= 99 j= 99
Se ha elegido el valor 6 para el número de iteraciones que se buscan por adelantado.
En el segundo bucle sólo se prebusca a[1][6]... a[1][99], a[2][6]... a[2][99] puesto que todo el array b[i][j]
ya ha sido prebuscado en el primer bucle y se halla en Mc. E el número de fallos en estas dos iteraciones de i será
2*3 = 6. Luego en total solo se producen 15 fallos. El costo de evitar 236 fallos de cachés es ejecutar 400
instrucciones de prebúsqueda.
g) Optimizaciones del compilador
Las optimizaciones consisten en transformaciones del código fuente del programa realizadas en tiempo de
compilación con el objetivo de aumentar la localidad espacial y/o temporal del programa, y consiguientemente
reducir la tasa de fallos. Entre las transformaciones más importantes estudiaremos las siguientes:
•
Fusión de arrays
Se sustituyen varios arrays de igual tamaño por un único array de elementos estructurados. La
transformación aumenta la localidad espacial si el programa referencia localmente las componentes de
igual índice de los aarrays originales.
Ejemplo:
programa original
int val[SIZE];
int key [SIZE];
programa transformado
struct merge {
int val;
int key;
};
struct merge array_fundido[SIZE]
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
val
array_fundido
key
La transformación mejora la localidad espacial de los elementos de los dos arrays originales.
•
Fusión de bucles
programa original
for (i = 0; i < 100; i = i + 1)
for (j = 0; j < 100; j = j + 1)
a[i][j] = 2/b[i][j] *c[i][j];
programa transformado
for (i = 0; i < 100; i = i + 1)
for (j = 0; j < 100; j = j + 1)
a[i][j] = 2/b[i][j] *c[i][j];
d[i][j] = a[i][j] + c[i][j];
for (i = 0; i < 100; i = i + 1)
for (j = 0; j < 100; j = j + 1)
d[i][j] = a[i][j] + c[i][j];
La transformación mejora la localidad temporal, ya que las referencias a a[][] y c[][] en el primer bucle
del programa original se hacen separadas en el tiempo a las referencias a a[][] y c[][] del segundo bucle. En
cambio en el programa transformado estas referencias se hacen para los mismos valores de los índices en las 2
expresiones consecutivas.
•
Intercambio de bucles
programa original
for (j = 0; j < 100; j = j + 1)
for (i = 0; i < 5000; i = i + 1)
x[i][j] = 2*x[i][j];
programa transformado
for (i = 0; i < 100; i = i + 1)
for (j = 0; j < 5000; j = j + 1)
x[i][j] = 2*x[i][j];
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
bucle original
iteración
1
iteración 101
bucle intercambiado
x[0][0]
x[0][1]
iteración 1
iteración 2
x[0][2]
x[0][4999]
iteración
2
iteración 102
x[1][0]
x[1][1]
iteración 5001
iteración 5002
x[1][2]
x[1][4999]
iteración 100
x[99][0]
iteración 495001
iteración 200
x[99][1]
iteración 495002
x[99][2]
x[99][4999]
iteración 500000
iteración 500000
La transformación mejora la localidad espacial.
•
Descomposición en bloques
•
•
•
Reduce la tasa de fallos aumentando la localidad temporal
En lugar de operar sobre filas o columnas completas de un array los algoritmos de descomposición en
bloques operan sobre submatrices o bloques
El objetivo es maximizar los accesos a los datos cargados en la caché antes de ser reemplazados
Ejemplo: multiplicación de matrices
for (i = 1; i < N; i = i + 1)
for (j = 0; j < N; j = j + 1)
{ r = 0;
for (k = 0; k < N; k = k + 1){
r = r + Y[i][k] *Z[k][j];};
X[i][j] = r;
};
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
X00
X01
X02
X03
X04
X05
Y00
Y01
Y02
Y03
Y04
Y05
Z00
Z01
Z02
Z03
Z04
Z05
X10
X11
X12
X03
X14
X15
Y10
Y11
Y12
Y13
Y14
Y15
Z10
Z11
Z12
Z13
Z14
Z15
X20
X21
X22
X23
X24
X25
Y20
Y21
Y22
Y23
Y24
Y25
Z20
Z21
Z22
Z23
Z24
Z25
X30
X31
X32
X33
X34
X35
Y30
Y31
Y32
Y33
Y34
Y35
Z30
Z31
Z32
Z33
Z34
Z35
X40
X41
X42
X43
X44
X45
Y40
Y41
Y42
Y43
Y44
Y45
Z40
Z41
Z42
Z43
Z44
Z45
X50
X51
X52
X53
X 54
X55
Y50
Y51
Y52
Y53
Y 54 Y55
Z50
Z51
Z52
Z53
Z54
Z55
Programa transformado:
for (jj = 0; jj < N; jj = jj + B)
for (kk = 0; kk < N; kk = kk + B)
for (i = 0; i < N; i = i + 1)
for (j = jj; j < min(jj + B, N); j = j + 1)
{ r = 0;
for (k = kk; k < min(kk + B,N); k = k + 1){
r = r + Y[i][k] *Z[k][j];};
X[i][j] = X[i][j] +r;
};
Este programa va calculando parcialmente los valores de x[][] para que los bloques de elementos de Y[][] y Z[][]
sean utilizados totalmente cuando se llevan a la caché, aumentando su localidad temporal:
X00
X01
X02
Y00
Y01
Y02
Z00
Z01
Z02
X10
X11
X12
Y10
Y11
Y12
Z10
Z11
Z12
Z20
Z21
Z22
3.2 Reducción de la penalización de fallos
a) Prioridad a los fallos de lectura frente a los de escritura
Con una caché de escritura directa (writre throuhg) la mejora de rendimiento más importante proviene del
uso de un buffer de escritura de tamaño apropiado. Sin embargo, esto complica los accesos a memoria debido a que
el buffer puede contener el valor actualizado (escrito) de una posición que se necesita en un fallo de lectura.
Ejemplo: Supongamos que una Mc de correspondencia directa y escritura directa hace corresponder los
bloques en los que se encuentran las direcciones 512 y 1024 sobre la misma línea de Mc. Supongamos que se
ejecuta el siguiente programa:
(1)
(2)
(3)
M[512] <-- <R3>
R1 <-- M[1024]
R2 <-- M[512]
// escritura sobre M[512]
// lectura de M[1024]
// lectura de M[512]
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1
Mc
Buffer de Escritura
Mp
512
<R3>
3
512 / 1024
2
1024
Cuando se ejecuta (1) se lleva <R3> al buffer de escritura y a la línea de Mc a la que pertenece la posición
512 (supuesto acierto de escritura, es decir, el bloque al que pertenece 512 se encuentra en Mc).
Cuando se ejecuta (2) se produce un fallo de lectura y se sustituye en Mc el bloque al que pertenece 512
por el bloque al que pertenece 1024
Cuando se ejecuta (3) se vuelve a producir un fallo de lectura para llevar de nuevo el bloque al que
pertenece 512 a Mc, pero es posible que éste no esté actualizado por el efecto de (1) si aún el contenido del buffer
no se ha escrito en Mp
Este problema de inconsistencia se puede resolver de dos maneras:
1) Retrasando el servicio del fallo de lectura producido por (3) hasta que el buffer esté vacío (todo su
contenido se haya reflejado en Mp). Esta solución penaliza bastante los fallos de lectura, pues los datos empíricos
demuestran que la espera sistemática a que el buffer se vacíe para servir un fallo e lectura puede penalizar estos
fallos por un factor de 1.5. Por ello es recomendable dar prioridad a la lectura (es mucho más frecuente que la
escritura) adoptando la segunda alternativa.
2) Incorporar al proceso asociado al fallo de lectura producido por (3) la comprobación de si el buffer
contiene la posición 512, y continuar si el resultado es falso.
b) Utilización de sub-bloques dentro de un bloque
La utilización de bloques de gran tamaño no solo disminuyen la tasa de fallos sino que reduce el espacio de
memoria caché dedicado al directorio (almacenamiento de las etiquetas de los bloques residentes en una línea). Sin
embargo, bloques grandes aumentan la penalización por fallos debido al aumento de la cantidad de datos que se
deben transferir en el servicio de cada fallo. Una forma de disminuir la penalización por fallos sin modificar los
otros factores positivos consiste en dividir el bloque en sub-bloques y asociar un bit de validez a cada sub-bloque.
De esta forma, cuando se produzca un fallo, no será necesario actualizar más que el sub-bloque que contiene la
palabra referenciada. Esta alternativa hace que no sólo haya que comprobar si el bloque está en la caché
comparando etiquetas, sino que habrá que asegurar que el sub-bloque que contiene la palabra referenciada es un
sub-bloque válido, es decir, con datos actualizados.
También podemos ver esta alternativa de diseño como una forma de economizar información de directorio
asociando una sola etiqueta a un grupo de bloques, e indicando con un bit particular asociado a cada bloque (bit de
validez) su estado de actualización cuando el grupo está en Mc. En la siguiente figura se muestra un esquema de
esta alternativa de diseño:
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
bits de validez de los subloques
etiqueta
línea
palabra
etiqueta
subbloque1
subbloque2
subloque3
subloque4
Comparado
c) Utilización de un segundo nivel de caché
Como los fallos se sirven leyendo bloques de Mp, una alternativa para disminuir la penalización por fallo
consiste en disminuir el tiempo de acceso a Mp utilizando el mismo mecanismo caché, es decir, utilizando una
caché intermedia o de segundo nivel (L2) entre Mc (L1) y Mp.
CPU
Mc (L1)
Mc (L2)
Mp
Tiempo_acceso_medio = Tiempo_acierto N1 + Tasa_fallos N1 * Penalización_fallos N1
Penalización_fallosN1 = Tiempo_acierto N2 + Tasa_fallos N2 * Penalización_fallos N2
Cuando tenemos varios niveles de cachés hay que diferenciar entre la tasa de fallos local y la global:
Tasa_fallos_local = nº de fallos / nº de accesos a la caché
Tasa_fallos_global = nº de fallos / nº total de accesos realizados por la CPU
En general se cumple:
24
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tasa_fallos_local ≥ Tasa_fallos_global
Y en particular:
Tasa_fallos_localN1 = Tasa_fallos_globalN1
Tasa_fallos_localN2 > Tasa_fallos_globalN2
Ejemplo:
1000 referencias a un sistema de cahé de dos niveles
40 fallos se producen en N1
20 fallos se producen en N2
Tasa_fallos_localN1 = Tasa_fallos_globalN1 = 40/1000 = 0.04 (4%)
Tasa_fallos_localN2 = 20/40 = 0.5 (50%)
Tasa_fallos_globalN2 = 20/1000 = 0.02 (2%)
3.3 Reducción del tiempo de acierto
El tiempo de acierto podemos optimizarlo (minimizarlo) actuando sobre tres factores:
a) Cachés pequeñas y simples
•
El hardware pequeño acelera la comparación de etiquetas y por tanto el tiempo de acierto
•
También hace posible su incorporación al chip de la CPU, eliminando el conexionado externo y por tanto
el tiempo de acceso desde la CPU
b) Evitar traducción de direcciones durante la indexación de las cachés
•
Utilización de direcciones virtuales en las cachés
c) Escrituras segmentadas para rápidos aciertos de escritura
Los aciertos de lectura son más rápidos que los de escritura, entre otros motivos porque en los primeros se
puede leer el dato de Mc al tiempo que se comprueba si su etiqueta coincide con la de la dirección física. Si no
coincide se ignora el dato leído. Esto no es posible en las escrituras, pero sí podemos simultanear la escritura de un
dato con la comparación de la etiqueta del siguiente. Es decir, segmentar (pipe-line) la escritura sobre Mc. De esta
forma se aceleran los aciertos de escritura.
25
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 7: Memoria Virtual.
1. Gestión de memoria.
2. Memoria virtual.
3. Memoria virtual paginada.
4. Memoria virtual segmentada.
5. Ejemplos
1. Gestión de memoria
El sistema de memoria virtual de los actuales computadores surgió para liberar al
programador de una serie de tareas relacionadas con el uso que los programas debían
realizar con la memoria. La memoria virtual automatiza la gestión entre los dos niveles
principales de la jerarquía de memoria: memoria principal y disco. Antes de entrar en los
mecanismos específicos de la memoria virtual revisaremos una serie de funciones que
deben incorporarse en la gestión de memoria.
Solapamiento (overlay)
El tamaño de la memoria principal disponible en los computadores ha aumentado
de forma sostenida desde sus orígenes. Sin embargo, el tamaño de los programas ha
crecido más rápidamente, por lo que la necesidad de ejecutar programas que no cabían en
la memoria principal ha sido una constante en la historia de los computadores. Una forma
de superar esta limitación es el uso de la técnica de solapamiento (overlay).
En primer lugar, con la técnica de solapamiento se divide en módulos el programa
que no cabe completo en la memoria principal. Después hay que situar en los lugares
adecuados de cada módulo las instrucciones de E/S necesarias para cargar en memoria
principal aquellos módulos residentes en el disco cuyas instrucciones deban ejecutarse o
cuyos datos sean referenciados. Es decir, el propio programa se encarga de cargar
dinámicamente aquellos módulos que son referenciados.
Con este mecanismo se puede superar la limitación de la memoria principal, sin
embargo tiene el inconveniente de hacer depender el programa del tamaño de la memoria
disponible en el computador, con lo que variaciones en su configuración obligan a revisar
la división modular del programa.
Memoria principal
Disco
M1
M2
M1
M3
M4
M2
e/s
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Reubicación
En sistemas con multiprogramación se necesita que varios programas residan
simultáneamente en memoria. El tiempo de CPU se va distribuyendo entre ellos de
acuerdo a una política de prioridades determinada. La ubicación en memoria de los
programas no se conoce en tiempo de compilación, por lo que no se pueden generar
direcciones absolutas. Para conseguir una asignación dinámica de memoria en tiempo de
ejecución se utilizan registros de reubicación. La dirección efectiva se obtiene sumando a la
dirección generada por el compilador el contenido del registro de reubicación asignado al
programa.
Paginación
La paginación también surgió de la necesidad de mantener más de un programa
residente en memoria cuando la capacidad de ésta es inferior a la suma de los tamaños
de los programas. Se trata de un mecanismo automático de solapamiento múltiple que
practica el Sistema Operativo para hacer posible la multiprogramación. El espacio de
memoria principal se divide en bloques de tamaño fijo denominados páginas. Los
programas se dividen también en páginas y residen en el disco. El Sistema Operativo se
encarga de asignar páginas físicas a los programas en ejecución (multiprogramación). De
esta forma el tiempo de CPU puede distribuirse entre los programas residentes.
Protección
Un papel importante de la gestión de memoria es la protección. Si varios programas
comparten la memoria principal debe asegurarse que ninguno de ellos pueda modificar el
espacio de memoria de los demás. Como casi todos los lenguajes permiten el uso de
punteros dinámicos, los test en tiempo de compilación no son suficientes para garantizar
la protección. Esta debe mantenerla en tiempo de ejecución el sistema de gestión de
memoria (MMU)
Compartición
Esta función parece estar en contradicción con la anterior. Sin embargo, con
frecuencia los programas de un sistema multiprogramado deben poder compartir y
actualizar información, por ejemplo, un sistema de bases de datos. Además, no es
necesario tener varias copias de una rutina si se permite que todos los programas accedan
a una misma copia.
2. Memoria virtual
El sistema de memoria virtual implementa todas las funciones anteriores de forma
integrada.
En un computador con memoria virtual (MV) las direcciones de los programas
(generadas por la CPU) hacen referencia a un espacio mayor que el espacio físico realmente
disponible en la memoria principal o memoria física (MF).
Los programas operan virtualmente con un tamaño físico de memoria principal
mucho mayor que el realmente disponible. En estas máquinas hay que diferenciar, pues,
entre el espacio de direcciones virtuales generado por la CPU y el espacio de direcciones
físicas o reales existentes en memoria principal y determinado por el número de líneas del
bus de direcciones.
El espacio virtual se soporta sobre un disco con la ayuda de un mecanismo de
traducción que genera la dirección física de memoria principal a partir de la virtual. En la
siguiente figura hemos representado el mecanismo de traducción de direcciones virtuales
(DV) a direcciones físicas (DF).
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CPU
Número de Página Virtual (NPV)
Desplaz. Página (DP)
Dirección Virtual (DV)
v
Memoria virtual
Página 0
Reg. Base Tabla de Paginas
Página 1
Sumador
Página 2
Tabla de Páginas
Página 3
Página 4
control pv 0
control pv 1
pag. fí sica f-1
pag. fí sica 2
control pv 2
pag. fí sica 1
control pv v-2
pag. fí sica 0
control pv v-1
pag. en disco
ACIERTO
Dirección Física (DF)
Página 5
Número de Página Física (NPF)
2v
Desplaz. Página (DP)
w
Memoria física
páginas
FALLO
Página 0
Página 1
Página 2
pv v-1
2w
Página2
v-3
Página2
v-2
Página2 v-1
páginas
Memoria de Disco
Página f-2
Página f-1
Tanto la memoria principal como la memoria del disco se dividen en páginas de igual
tamaño. El número de páginas de la memoria virtual en general es mayor que el número de
páginas disponibles de la memoria física. Por este motivo, en cada momento sólo las copias
de un conjunto de páginas virtuales del programa residen en la memoria física. Este
conjunto recibe el nombre de conjunto de trabajo o conjunto activo, y resulta relativamente
estable a lo largo del tiempo, debido a la localidad referencial que manifiestan los
programas. Esta es la clave del buen funcionamiento de la memoria virtual, al igual que
ocurría con la memoria cache.
Los bits de una DV se consideran divididos en dos campos, el número de página
virtual (NPV) los más significativos, y el desplazamiento dentro de la página (DP), los menos
significativos. El número de bits del campo DP lo determina el tamaño de página (nº de bits
de DP = log2 tamaño de página). El número de bits del campo NPV lo determina el número de
páginas virtuales (nº de bits de NPV = log2 nº de páginas virtuales). Los bits de una DF se
consideran divididos también en dos campos, el número de página física (NPF) los más
significativos, y el desplazamiento dentro de la página (DP), los menos significativos. El
número de bits del campo DP de una DF es el mismo que el de una DV, puesto que las
páginas tienen igual tamaño en MV y MF. El número de bits del campo NPF lo determina el
número de páginas físicas de MF (nº de bits de NPF = log2 nº de páginas físicas).
Las DVs generadas por la CPU se traducen a DFs con la ayuda de una Tabla de
Páginas (TP). Esta tabla contiene tantas entradas como páginas existen en la MV, y la
posición en la tabla de una entrada correspondiente a una página virtual concreta coincide
con su NPV. Cada entrada contiene un primer campo de bits de control, de los que por el
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
momento haremos referencia tan sólo a uno, el bit de presencia (P). Si este bit está activo
(por ejemplo a 1) significa que la página virtual correspondiente a esa entrada está presente
en la MF, y en este caso el segundo campo de la entrada contiene el correspondiente NPF.
Si el bit P está inactivo (por ejemplo a 0) significa que la correspondiente página virtual no
está en la MF, sino en el disco. En este caso el segundo campo de la entrada apunta a la
dirección del disco donde se encuentra la página virtual. Como en un momento se pueden
estar ejecutando más de un programa (multiprogramación o multiusuario) existirán más de
una TP, una para cada programa (proceso) activo. Por ello, el acceso a la TP se realiza con la
ayuda de un registro base de la tabla de páginas (RBTP) asociado a cada programa.
Para traducir una DV en DF se busca en la correspondiente entrada de la TP. Si el
bit P de esta entrada vale 1, se dice que ha ocurrido un acierto de página, y se lee el
contenido del segundo campo que en los aciertos constituye el NPF en la memoria principal.
La DF completa se obtiene concatenando los bits de NPF con los de DP de la DV. Si el bit P
de la entrada de la TP vale 0, se dice que ha ocurrido un fallo de página, lo que significa que
la página virtual donde se ubica la DV que se está traduciendo, no se encuentra en MF. En
este caso el fallo de página se sirve buscado la página en el disco, ubicándola en MF y
actualizando la correspondiente entrada de la TP.
3. Memoria virtual paginada
El mecanismo de traducción de DV a DF que acabamos de describir corresponde a
un sistema de memoria virtual paginada. En él el espacio virtual (y físico) se divide en
páginas de igual tamaño. Veremos en el apartado siguiente otra alternativa en la que la MV
se divide en segmentos de longitud variable, dando lugar a la memoria virtual segmentada.
Las entradas de la TP de una MV paginada, además del NPF contiene unos bits de control,
de los que hemos mencionado el bit de presencia P.
Como se muestra en la siguiente figura, existen otros bits que controlan los derechos
de acceso a la página: lectura (R), escritura (W) y ejecución (X), este último sólo para
páginas de código. También suele existir un bit que indica si la página ha sido modificada
(datos) y necesita escribirse en disco cuando sea sustituida. En general, los demás bits de
control dependen de cada procesador.
Entrada de la tabla de páginas con correspondencia directa
P
RWX
Dirección de Página Física
P=
bit de presencia (de la página en memoria física)
RWX = derechos de acceso de lectura, escritura y ejecución
Cada programa (proceso) puede ocupar una gran cantidad de memoria virtual. Por
ejemplo, en la arquitectura VAX, cada proceso puede tener hasta 231 = 2 GBytes de
memoria virtual. Utilizando páginas de 29 = 512 bytes, eso significa que se necesitan tablas
de páginas de 222 entradas por proceso. La cantidad de memoria dedicada sólo a tablas de
páginas podría ser inaceptablemente alta.
Para solucionar este problema, la mayoría de los esquemas de memoria virtual
almacenan las tablas de páginas en la propia memoria virtual, en lugar de utilizar la
memoria física. Esto significa que la tabla de páginas también está sujeta a paginación,
igual que el resto de los programas. Cuando un programa se está ejecutando, al menos una
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
parte de su tabla de páginas, incluyendo el elemento correspondiente a la página
actualmente en ejecución, debe estar en la memoria principal.
3.1 Tablas de páginas de varios niveles
Algunos procesadores hacen uso de un esquema de dos o más niveles para organizar
las tablas de páginas. En este esquema, hay una página de directorio de nivel 1 en la que
cada elemento apunta a una tabla de páginas de nivel 2, y así sucesivamente. En la
siguiente figura se muestra una TP organizada en tres niveles: N1, N2 y N3. Típicamente, la
longitud máxima de una tabla de páginas se restringe al tamaño de una página.
Nivel 1
Dirección Virtual
Nivel 2
Nivel 3
Despla. Página
RBP
Tabla Paginas N1
+
Entrada TP
+
Tabla Paginas N2
Entrada TP
+
Tabla Paginas N3
Entrada TP
Dirección Física
Número de página física
Despla. Página
3.2 Tabla de páginas invertida HASH
Esta alternativa elimina de la TP las entradas que no apuntan a una página de la
memoria física, reduciendo las entradas a número igual al de páginas de la memoria física.
El campo NPV de la DV se hace corresponder sobre una tabla de dispersión (tabla
hash) mediante una función de dispersión sencilla. La tabla de dispersión incluye un
puntero a una TP invertida, que contiene los elementos de la TP. Existe un elemento en la
tabla de dispersión y en la tabla de páginas invertida para cada página de memoria física,
en vez de para cada página de memoria virtual.
Se necesita, pues, una zona fija de la memoria física para las
independientemente del número de programas o páginas virtuales que se admitan.
tablas,
Puesto que más de una DV puede apuntar al mismo elemento de la página de
dispersión, se utiliza una técnica de encadenamiento para solucionar este problema. La
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
técnica de dispersión da lugar a cadenas usualmente cortas, con uno o dos elementos. Esta
alternativa de TP se utiliza en el PowerPC.
Dirección Virtual
Nº Página Virtual
Desplazamiento
Tabla de Dispersión
Tabla de Páginas
Función de
Dispersión
NPV
NPF
Enlace
NPF
Dirección Física
Nº Página Física
Desplazamiento
3.3 Buffer de traducción anticipada (TLB)
En principio toda referencia a memoria virtual requiere dos accesos a la memoria
física: uno para acceder al elemento de la TP, y otro para acceder a la memoria física. Por
tanto, un esquema de memoria virtual como el que acabamos de estudiar duplicaría el
tiempo de acceso a memoria.
Para evitar este inconveniente los esquemas de memoria virtual utilizan una cache
especial para los elementos de la TP, llamada usualmente buffer de traducción anticipada
(TLB, Translation Lookaside Buffer).
El TLB funciona lo mismo que una memoria cache, y contiene aquellas entradas de
la TP a las que se han accedido recientemente. Por el principio de localidad temporal, la
mayoría de las referencias a memoria corresponderán a posiciones incluidas en páginas
recientemente utilizadas. Por ese motivo, la mayoría de las referencias involucran a
entradas de la TP presentes en el TLB. Normalmente el TLB utiliza una correspondencia
totalmente asociativa, por lo que una entrada de la TP puede ubicarse en cualquier posición
del TLB
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
RWX
NPV
DP
Buffer de traducción anticipada (TLB)
RWX
=
NPV
Memoria
Asociativa
NPF
Fallo de página
Violación de acceso
NPF
DP
Dirección Física
3.4 Interacción entre la memoria virtual y la memoria cache
La memoria virtual debe interactuar con la memoria cache (no con la cache que
implementa el TLB, sino con la cache de la memoria principal).
Para traducir una DV el sistema de memoria consulta el TLB para comprobar si la
entrada de la TP se encuentra en él. Si es así, se genera la dirección real (física),
combinando el NPF con el DP. Si no, se accede a la TP en busca del elemento
correspondiente. Una vez que se ha generado la dirección física, compuesta por una
etiqueta y un número de conjunto, se consulta la cache para ver si el bloque que contiene la
palabra referenciada se encuentra en dicho conjunto. Si es así, se envía al procesador. Si
no, se produce un fallo de cache y se busca la palabra en memoria principal.
Por tanto, la dirección virtual debe pasar primero por el TLB antes de que la
dirección física pueda acceder a la cache, lo que alarga el tiempo de acierto. Este
mecanismo se puede acelerar utilizando dos alternativas:
1. Acceder en paralelo (simultáneamente) al TLB para buscar el NPF y al directorio
de la cache para buscar el bloque.
2. Utilizar caches con direcciones virtuales
La primera alternativa requiere que la longitud del campo de desplazamiento DP de
la DV (igual al DP de la DF) sea mayor o igual que los campos de conjunto y palabra del
formato de la DF para la cache, tal como se muestra en la siguiente figura. De esta forma
será posible realizar en paralelo la búsqueda en el TLB del NPF que se corresponde con la
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
etiqueta, y en el directorio de la cache el nº de bloque (línea), que junto a la palabra dentro
del bloque, se corresponde con el DP, del que se dispone desde el instante que se genera la
DV, pues no requiere traducción.
N PV
DP
TLB
NPV
NPF
Fallo de página
N PF
DP
Memoria cache
etiqueta
línea
palabra
Comparador
etiqueta
datos
MUX
acierto
fallo
Esto significa que el tamaño de la cache viene impuesto por el tamaño de la página y
el grado de asociatividad. Por ejemplo, si tenemos un tamaño de página de 1K, el DP tendrá
10 bits. Si el número de palabras por bloque es 8 (3 bits de palabra) quedarán 7 bits para el
campo de conjunto de la dirección física de la cache. Si la asociatividad fuese 1
(correspondencia directa) con esos 7 bits podríamos distinguir tan sólo entre 128 marcos de
bloque o líneas de la cache, lo que impondría un tamaño de cache de 128 x 8 = 1024 = 1K.
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Para aumentar este tamaño tendríamos que aumentar la asociatividad. Por ejemplo,
si el grado de asociatividad es 2, el tamaño de la cache sería de 2K. Cuando aumenta el
grado de asociatividad, también aumentan las comparaciones que debemos realizar con la
etiqueta obtenida del TLB, ya que se deben comparar con ella todas las etiquetas del
conjunto de la cache (tantas como vías)
La segunda alternativa de utilizar caches direccionadas virtualmente tiene la ventaja
de que en caso de acierto en la cache, no es necesario el proceso de traducción. Sin
embargo, esta alternativa tiene dos problemas fundamentales. El primero surge en las
conmutaciones de procesos. Cuando se cambia de proceso, la misma dirección virtual de
cada proceso referencia diferentes direcciones físicas, lo que exige que se limpie la cache y
esto supone una gran fuente de fallos forzosos. El segundo se origina porque es posible que
distintos procesos con diferentes direcciones virtuales se correspondan con la misma
dirección física (aliasing). Esto puede producir dos copias del mismo dato en una cache
virtual, lo que ocasiona problemas de inconsistencia si hay escrituras.
3.5 Múltiples espacios virtuales
Una forma de acelerar la conmutación de procesos evitando tener que borrar la TP
(que puede estar en TLB o memoria invertida) es extender las entradas con un campo que
contiene el identificador de proceso (PID).
PID
RWX
N PV
DP
(TLB)
RWX
PID
=
NPV
NPF
Fallo de página
=
Violación de acceso
N PF
DP
Dirección Física
3.6 Políticas de búsqueda (fetch)
•
Prebúsqueda (análoga a la utilizada en memoria cache)
•
Búsqueda por demanda (análoga a la utilizada en memoria cache)
Políticas de sustitución (replacement)
•
Aleatoria
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Elige una página aleatoriamente, sin mirar el número de referencias o el tiempo que la
página lleva en memoria principal. En general esta política tiene unos resultados
pobres, excepto en entornos donde donde existe poca localidad como en las bases de
datos.
•
FIFO (First In First Out)
Se sustituye la página que lleva más tiempo residente en memoria. Utiliza una cola FIFO
y hace un uso pobre de la localidad temporal
•
Reloj (FINUFO: First In Not Used First Out)
Es una mejora de la FIFO en la que también se chequea si una página ha sido
referenciada, haciendo mejor uso de la localidad temporal. Para implementar esta
política se mantiene una cola como en la FIFO, pero circular, con un puntero a la última
página sustituida, y un flag asociado a cada página para anotar que ha sido
referenciada.
•
LRU (Least Recently Used)
Análoga a la utilizada en memoria cache
•
Optima (MIN)
Se trata de la mejor política posible: sustituir la página que vaya a tardar más tiempo en
ser referenciada en el futuro (Belady). Aunque esta política tiene el mínimo número
posible de fallos de página (de aquí el nombre de política MIN), no se puede llevar a la
práctica en tiempo real, y se utiliza como una referencia teórica para medir la eficiencia
de otras políticas en entornos experimentales.
4. Memoria virtual segmentada
Mientras que la paginación es transparente para el programador, y le proporciona
un espacio de direcciones mayor, la segmentación es normalmente visible para el
programador, y proporciona una forma lógica de organizar los programas y los datos, y
asociarle los privilegios y atributos de protección.
La segmentación permite que el programador vea la memoria constituida por
múltiples espacios de direcciones o segmentos. Los segmentos tienen un tamaño variable,
dinámico. Usualmente, el programador o el sistema operativo asignará programas y datos a
segmentos distintos. Puede haber segmentos de programa distintos para varios tipos de
programas, y también distintos segmentos de datos. Se pueden asignar a cada segmento
derechos de acceso y uso. Las direcciones virtuales estarán constituidas en este caso por un
número de segmento (NS) y un desplazamiento dentro del segmento (DP). El proceso de
traducción de dirección virtual a física es análogo al de la memoria virtual paginada, con la
diferencia que ahora tenemos una tabla de segmentos (TS) cuyas entradas (denominadas
también descriptores de segmento) contienen, además de los bits de control y la dirección
real del segmento, la longitud L del mismo, ya que los segmentos tienen longitud variable.
En la siguiente figura hemos representado esquemáticamente el proceso de traducción.
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tipo acceso
RWX
Dirección Virtual
Número Segmento(NS)
Desplaz. (DP)
Tabla de segmentos (TS)
Reg. Tabla Segmentos
P RWX L Dir.Real Seg
P = bit de presencia
L = Longitud del segmento
Dir. Real Seg.
Desplaz.(DP)
Dirección Física
Esta organización tiene ciertas ventajas para el programador, frente a un espacio de
direcciones no segmentado:
•
Simplifica la gestión de estructuras variables de datos. Si el programador no conoce
a priori el tamaño que puede llegar a tener una estructura de datos particular, no es
necesario que lo presuponga. A la estructura de datos se le asigna su propio
segmento, y el sistema operativo lo expandirá o lo reducirá según sea necesario.
•
Permite modificar los programas y recompilarlos independientemente, sin que sea
necesario volver a enlazar y cargar el conjunto entero de programas. De nuevo, esto
se consigue utilizando varios segmentos.
•
Permite que varios procesos compartan segmentos. Un programador puede situar un
programa correspondiente a una utilidad o una tabla de datos de interés en un
segmento, que puede ser direccionado por otros procesos.
•
Se facilita la protección. Puesto que un segmento se construye para contener un
conjunto de programas o datos bien definido, el programador o el administrador del
sistema puede asignar privilegios de acceso de forma adecuada.
4.2 Políticas de ubicación (placement) para memorias segmentadas
Se identifican los huecos de memoria principal por su tamaño(longitud) y dirección
inicial, y se reúnen en una lista. La política de ubicación determinará la ordenación previa
de la lista. Una vez que se decide el hueco donde se ubica el segmento, se actualiza la lista
de huecos con el que se acaba de crear (a no ser que el segmento mida exactamente igual
que el hueco de memoria utilizado). Si no se puede encontrar un hueco apropiado para el
segmento, interviene la política de sustitución. Las tres políticas de ubicación de segmentos
más utilizadas son las siguientes:
•
Mejor ajuste (best fit)
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La lista de huecos se mantiene ordenada en orden creciente de tamaño y se ubica el
segmento en el primer hueco con capacidad suficiente para albergarlo.
•
Peor ajuste (worst fit)
La lista de huecos se mantiene ordenada en orden decreciente de tamaño y se ubica el
segmento en el primer hueco con capacidad suficiente para albergarlo.
•
Primer ajuste (first fit)
La lista de huecos se mantiene ordenada en orden creciente de las direcciones iniciales
de los huecos, y se ubica el segmento en el primer hueco con capacidad suficiente para
albergarlo. Con esta política, cuando transcurre un cierto tiempo, se acumulan un
número elevado de huecos pequeños próximos a la cabeza de la lista, penalizando las
búsquedas. Esto se puede evitar adelantando cíclicamente, después de cada búsqueda
un hueco la posición inicial de la lista.
4.3 Memoria con segmentos paginados
Como vimos en el apartado anterior, la segmentación presenta una serie de
propiedades ventajosas para el programador, sin embargo, la paginación proporciona una
forma más eficiente de gestionar el espacio de memoria. Para combinar las ventajas de
ambas, algunos sistemas permiten una combinación de ambas, es decir, un sistema virtual
con segmentos paginados. El mecanismo de traducción de DVs a DFs no es más que la
composición del mecanismo de la memoria segmentada y el de la paginada, tal como se
muestra en la siguiente figura:
Tipo acceso
RWX
Dirección Virtual
Nº Segmento
Nº Página
DP
Tabla de segmentos
Reg. Tabla Segmentos
Tabla de Paginas del Segmento
P RWX L Dir.Real Seg
P NPF
P = bit de presencia
L = Longitud del segmento
NPF
DP
Dirección Física
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
5. Ejemplo de sistema de memoria virtual: procesador Pentium II
El Pentium II dispone de un sistema de gestión de memoria virtual con posibilidad
de segmentación y paginación. Los dos mecanismos se pueden activar o desactivar con
independencia, dando pues lugar a cuatro formas de funcionamiento del sistema de
memoria:
1) Memoria no segmentada no paginada: la dirección virtual coincide con la dirección física.
Esta alternativa resulta útil cuando el procesador se utiliza como controlador de sistemas
empotrados.
2) Memoria paginada no segmentada: la memoria constituye un espacio lineal de
direcciones paginado. La protección y la gestión de memoria se realizan a través de la
paginación.
3) Memoria segmentada no paginada: la memoria constituye un conjunto de espacios de
direcciones virtuales (lógicas). Esta alternativa presenta la ventaja frente a la paginación en
que proporciona, si es necesario, mecanismos de protección a nivel de byte. Además,
garantiza que la tabla de segmentos se encuentra ubicada en el procesador cuando el
segmento está en memoria. Por ello, la segmentación sin páginas da lugar a tiempos de
acceso predecibles.
4) Memoria segmentada paginada: se utilizan simultáneamente los dos mecanismos, la
segmentación para definir particiones lógicas de memoria en el control de acceso, y la
paginación u para gestionar la asignación de memoria dentro de las particiones.
5.1 Mecanismo de segmentación
Cuando se activa la segmentación una dirección virtual (llamada dirección lógica en la
terminología de Intel) consta de una referencia al segmento de 16 bits y un desplazamiento
de 32 bits. Dos bits de la referencia al segmento se utilizan para el mecanismo de
protección, y los 14 bits restantes para especificar al segmento en cuestión (16K
segmentos). Con una memoria segmentada, el espacio de memoria virtual total que ve el
usuario es 246 = 64 Terabytes (TBytes). El espacio de direcciones físicas utiliza direcciones
de 32 bits, con una capacidad máxima de 4 GBytes.
Existen dos formas de protección asociadas a cada segmento: el nivel de privilegio y
el atributo de acceso.
Hay cuatro niveles de privilegio, desde el más protegido (nivel 0), al menos protegido
(nivel 3). El nivel de privilegio asociado a un segmento de datos constituye su clasificación;
mientras que el nivel de privilegio asociado a un segmento de programa constituye su
acreditación (clearance). Un programa en ejecución puede acceder a un segmento de datos
sólo si su nivel de acreditación es menor (tiene mayor privilegio) o igual (igual privilegio) que
el nivel de privilegio del segmento de datos.
La forma de utilizar los niveles de privilegio depende del diseño del sistema
operativo. Lo usual es que el nivel de privilegio 1 lo utilice la mayor parte del sistema
operativo, y el nivel 0 una pequeña parte del mismo, la dedicada a la gestión de memoria,
la protección y el control del acceso. Esto deja dos niveles para las aplicaciones. En muchos
sistemas, las aplicaciones utilizan el nivel 3, dejándose sin utilizar el nivel 2. Los
aplicaciones que implementan sus propios mecanismos de seguridad, como los sistemas de
gestión de bases de datos, suelen utilizar el nivel 2. Además de regular el acceso a los
segmentos de datos, el mecanismo de privilegio limita el uso de ciertas instrucciones. Por
ejemplo, las instrucciones que utilizan los registros de gestión de memoria, sólo pueden
ejecutarse desde el nivel 0; y las instrucciones de E/S sólo pueden ejecutarse en el nivel
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
determinado por el sistema operativo, que suele ser el nivel 1. El atributo de acceso al
segmento de datos especifica si se permiten accesos de lectura/ escritura o sólo de lectura.
Para los segmentos de programa, el atributo de acceso especifica si se trata de acceso de
lectura/ejecución o de sólo lectura.
El mecanismo de traducción de dirección para la segmentación hace corresponder
una dirección virtual con una dirección lineal. Una dirección virtual consta de un
desplazamiento de 32 bits y un selector de segmento de 16 bits.
32
0
Desplazamiento
Dirección
Virtual
15
2
Número de segmento
1
0
TI RPL
Selector de segmento
El selector de segmentos consta de los siguientes campos:
•
•
•
TI: Indica si la traducción va a utilizar la tabla de segmento global o local.
Número de segmento: se utiliza como índice en la tabla de segmentos.
RPL: Indica el nivel de privilegio del acceso.
Cada elemento de la tabla de segmentos consta de 64 bits, como muestra la siguiente
figura:
32
0
Base(8bits)
G D/B Límite P DPL S
Base (16 bits)
Tipo
Base(8 bits)
Límite (16 bits)
Descriptor
de
segmento
Los campos son los siguientes:
•
•
•
•
•
•
•
•
Base ( 32 bits): dirección de comienzo del segmento dentro del espacio lineal de
direcciones
Límite ( 20 bits): tamaño del segmento
Nivel de privilegio(DPL) (2 bits)
Bit de segmento presente(P) ( 1 bit): indica si el segmento está disponible en
memoria principal
Bit S (1 bit): determina si el segmento es del sistema
Tipo (4 bits) determina el tipo de segmento e indica los atributos de acceso
Bit de granularidad (G) (1 bit): indica si el campo límite se interpreta en unidades
Bytes o 4KBytes
Bit D/B (1 bit): indica si los operandos y modos de direccionamiento son de 16 ó 32
bits (en segmentos de código)
5.2 Mecanismo de paginación
Cuando se activa la paginación los programas utilizan directamente direcciones
lineales. El mecanismo de paginación del Pentium II utiliza una tabla de páginas de dos
niveles. El primero es un directorio de páginas, que contiene hasta 1.024 elementos. Esto
divide los 4 GBytes del espacio lineal de memoria en 1.024 grupos de páginas, cada grupo
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
con 4 Mbytes de capacidad y con su propia tabla de páginas. La flexibilidad del sistema de
gestión de memoria permite utilizar un directorio de páginas para todos los procesos, un
directorio de páginas para cada proceso o una combinación de ambos. El directorio de
páginas del proceso en curso está siempre en memoria principal. Las tablas de páginas
pueden estar en memoria virtual.
La siguiente figura ilustra la combinación de los mecanismos de segmentación y
paginación en la que no aparece el TLB ni la memoria cache. El Pentium II permite
seleccionar dos tamaños de páginas de 4 KBytes ó de 4 MBytes. Cuando se utilizan páginas
de 4 MBytes, hay un sólo nivel en la tabla de páginas. El uso de páginas de 4 MBytes
reduce las necesidades de memoria. Con páginas de 4 KBytes, una memoria principal de 4
GBytes necesita del orden de 4 MBytes de memoria sólo para la tabla de páginas. Con
páginas de 4 MBytes, una única tabla, de 4 KBytes de longitud, es suficiente para la gestión
de las páginas.
Dirección lógica (virtual)
Segmento
Desplazamiento
Dirección lineal
Dir
Página
Desplaz.
Tabla de
segmentos
Directorio
de páginas
Segmentación
Paginación
Tabla de
páginas
Dirección
física
Memoria
principal
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 8: Organización de la Entrada/salida
1. Funciones implicadas en las operaciones de e/s.
2. Estructura del sistema de e/s: módulos de e/s y controladores
3. Mecanismos básicos de e/s: sincronización
4. E/S controlada por programa
5. E/S serie y paralela
1. Funciones implicadas en las operaciones de entrada/salida
Para que un computador pueda ejecutar un programa debe ser ubicado previamente en la memoria,
junto con los datos sobre los que opera, y para ello debe existir una unidad funcional de entrada de información
capaz de escribir en la memoria desde el exterior. Análogamente, para conocer los resultados de la ejecución de
los programas, los usuarios deberán poder leer el contenido de la memoria a través de otra unidad de salida de
datos. La unidad de Entrada/Salida (E/S) soporta estas funciones, realizando las comunicaciones del
computador (memoria) con el mundo exterior (periféricos). Los dispositivos periféricos que se pueden conectar
a un computador se suelen clasificar en tres grandes grupos:
a)
Dispositivos de presentación de datos. Son dispositivos con los que interactuan los usuarios, transportando
datos entre éstos y la máquina, por ejemplo, ratón, teclado, pantalla, impresora, etc.
b) Dispositivos de almacenamiento de datos. Son dispositivos que forman parte de la jerarquía de memoria
del computador. Interactúan de forma autónoma con la máquina, por ejemplo, discos magnéticos y cintas
magnéticas.
c) Dispositivos de comunicación con otros procesadores. Permiten la comunicación con procesadores
remotos a través de redes, por ejemplo, las redes de área local o global.
d) Dispositivos de adquisición de datos. Permiten la comunicación con sensores y actuadores que operan de
forma autónoma en el entorno del computador. Se utilizan en sistemas de control automático de procesos
por computador y suelen incorporar conversores de señales A/D y D/A.
25° C
Cinta
CRT
Teclado
Disco
Impresora
A/D-D/A
E/S
Memoria
CPU
Los dispositivos de transporte y presentación de datos representan una carga muy baja de trabajo para
el procesador comparados con los dispositivos de almacenamiento. La siguiente tabla muestra las velocidades
de transferencia típicas para diferentes dispositivos:
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Dispositivos
Sensores
Teclado
Línea de comunicaciones
Pantalla (CRT)
Impresora de línea
Cinta (cartridge)
Disco
Cinta
Velocidad
1 Bps – 1 KBps
10 Bps
30 Bps – 200 KBps
2 KBps
1 – 5 KBps
0.5 – 2 MBps
4.5 MBps
3-6 MBps
Aunque la velocidad de transferencia de los dispositivos de presentación de datos ha sido
tradicionalmente lenta comparada con la de los dispositivos de almacenamiento, en los últimos tiempos la
situación está cambiando. Cada vez más, los computadores se utilizan para manejar documentos multimedia
que constan de gráficos, vídeos y voz. La siguiente tabla presenta algunos parámetros de transferencia para los
dispositivos modernos de E/S multimedia:
Medio
Gráficos
Vídeo
Voz
Velocidad
1 MBps
100 MBps
64 KBps
Retardo máximo
1 - 5 segundos
20 milisegundos
50 - 300 milisegundos
‰
Los gráficos requieren una gran capacidad de procesamiento de datos, hasta el punto que se han
diseñado procesadores de propósito especial para manejar sofisticadas representaciones gráficas. El
procesamiento de las imágenes gráficas puede requerir de 5 a 10 microprocesadores de alta velocidad.
‰
El problema del vídeo es simplemente la animación de los problemas gráficos, ya que debe crearse
una nueva imagen cada 1/30 de segundo (33 milisegundos).
‰
El procesamiento de la voz es también elevado porque exige la creación o el reconocimiento de varios
fonemas en tiempo real. De hecho es el medio que más capacidad de procesamiento requiere debido a
que presenta el mayor grado de intolerancia por retrasos en el usuario.
Los dispositivos periféricos que pueden conectarse a un computador para realizar entrada y salida de
información presentan, pues, las siguientes características:
‰
‰
‰
Tienen formas de funcionamiento muy diferentes entre sí, debido a las diferentes funciones que
realizan y a los principios físicos en los que se basan.
La velocidad de transferencia de datos es también diferente entre sí y diferente de la presentada por la
CPU y la memoria.
Suelen utilizar datos con formatos y longitudes de palabra diferentes
No obstante estas diferencias, existen una serie de funciones básicas comunes a todo dispositivo de E/S:
‰
‰
‰
Identificación única del dispositivo por parte de la CPU
Capacidad de envío y recepción de datos
Sincronización de la transmisión, exigida por la diferencia de velocidad de los dispositivos de E/S con
la CPU
La identificación del dispositivo se realiza con un decodicador de direcciones. El envío y la recepción de datos
tiene lugar a través de registros de entrada y salida de datos. Los circuitos de sincronización se manipulan por
medio de registros de estado y control. El siguiente esquema representa gráficamente estas funciones:
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
líneas de control
líneas de datos
líneas de direcciones
envio/
recepción
Registros de datos
(entrada y/o salida)
Decodificador
de direcciones
Registros de
estado y control
identificación
Circuitos de
sincronización
Dispositivo periférico
Las tres funciones básicas se pueden realizar a través del bus del sistema que conecta la memoria y la CPU, o
bien se puede utilizar un bus específico para las operaciones de E/S. Estas alternativas se traducen en dos
formas de organización de los espacios de direcciones:
• Espacios de direcciones unificados
Las unidades de E/S se ubican en el espacio único de direcciones como si fuesen elementos de memoria. A
cada unidad de E/S se le asigna un conjunto de direcciones (suficiente para diferenciar todos sus registros
internos). La interacción entre CPU y unidad de E/S se realiza a través de instrucciones de referencia a
memoria. El bus del sistema es único.
bus del sistema
CPU
Memoria
Unidad
de E/S 1
Unidad
de E/S n
• Espacios de direcciones independientes (Memoria y E/S)
Las unidades de E/S se ubican en un espacio de direcciones diferente al de memoria. La interacción entre CPU
y unidad de E/S se realiza a través de instrucciones específicas de E/S. La separación de espacios de
direcciones puede soportarse con un bus único de uso compartido entre Memoria y E/S en función del estado
de una línea de control MEM/IO:
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
bus del sistema
Línea MEM/IO
CPU
Memoria
Unidad
de E/S 1
Unidad
de E/S n
Pero el desdoblamiento de espacios de direcciones puede responder a la existencia de dos buses
independientes, uno para memoria (bus del sistema) y otro para E/S:
bus de memoria
CPU
Memoria
bus de E/S
Unidad
de E/S 1
Unidad
de E/S 2
Unidad
de E/S n
Funcionalmente son equivalentes, pero desde el punto de vista de la codificación de programas
difieren en el uso de las instrucciones. En el caso de E/S asignada en memoria se utilizan instrucciones de
referencia a memoria, mientras que para E/S aislada existe un grupo particular de instrucciones para realizar
esta función. Los dos ejemplos siguientes muestran ambas alternativas:
E/S programada asignada en memoria
200
LOAD
#1
STORE
517
202
LOAD
517
BPL
202
LOAD
516
E/S programada aislada
200
START I/O
5
201
TEST I/O
5
BNR
201
IN
5
/ AC <-- #1
/ M[517] <-- <AC>
/ AC <-- M[517]
/ Bifurca si N=0
/ AC <-- M[516]
/ Bifurca si dispositivo no disponible
2. Estructura del sistema de E/S: módulos de e/s y controladores de dispositivos
Las diferencias existentes entre los dispositivos periféricos han hecho que la unidad de E/S de un
computador se organice en torno a dos tipos de elementos, unos que soportan las características comunes a
todos los dispositivos (módulos de E/S) y otros específicos para cada periférico que son los controladores de
dispositivo:
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
8259
82
59
Módulo de E/S
DISCO
Controlador de dispositivo
2.1 Módulos de E/S
Un módulo de E/S permite que el procesador gestione una amplia gama de dispositivos periféricos de
una forma similar, ocultando los detalles concretos de temporización, formatos de datos y principios físicos de
funcionamiento. El módulo de E/S se conecta con el procesador a través de un conjunto de líneas de datos,
dirección y control (un bus). Los datos que se transfieren se almacenan temporalmente en un registro de datos.
El estado del módulo se refleja en los bits de un registro de estado. El registro de control permite configurar y
programar diferentes funciones en el módulo. Estos dos registros (estado y control) pueden unificarse en uno
sólo en módulos simples. Un módulo de E/S dispone de la lógica específica para su conexión con uno o más
dispositivos periféricos. En la siguiente figura se muestra la estructura general de un módulo de E/S:
Datos
Líneas
de Datos
Lógica de
interfaz con
el dispositivo
externo
Registro de datos
Registro de estado/control
Líneas de
dirección
Líneas
de control
Estado
Control
Datos
Lógica
de E/S
Lógica de
interfaz con
el dispositivo
externo
Estado
Control
Un módulo sencillo de E/S capaz de realizar la interfaz de un computador con una impresora podría
tener la estructura mostrada en la siguiente figura. El decodificador hace que el módulo se identifique (SEL*)
para A7 = 1, A6 = 0, A5 = 1, A4 = 1, A3 = 1,A2 = 1, A1 = 0, A0 = --, es decir, que ocupe las direcciones de
memoria: 10111100 y 10111101, la primera corresponderá a los registros de estado y control (A0 = 0), y la
segunda al registro de datos (A0 = 1). Los registros de estado y control pueden tener una única dirección
asociada porque el primero sólo se lee (RD*) y el segundo sólo se escribe (WR*) desde el bus.
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
D E COD IFICAD OR
A7
IN TERF AZ D E IMP R ES OR A
S EL*
...
CLK
D ATOS
A1
A0
OE*
CP U
RD *
ES TAD O
CLK
WR*
CON TR OL
B . D ATOS
2.2 Controlador de dispositivo (periférico)
La estructura del controlador de un dispositivo tendrá que adaptarse en cada caso a las peculiaridades
específicas del periférico. Unos tendrán que actuar sobre elementos electromecánicos (impresoras de línea),
otros sobre elementos ópticos (CD-ROM), o magnéticos (discos), etc. Sin entrar en las singularidades de cada
uno, podemos decir que los controladores de dispositivos periféricos presentan una estructura general como la
representada en la siguiente figura:
Estado
(hacia el módulo de E/S)
Control
(desde el módulo de E/S)
Lógica
de
control
Datos
(desde y hacia el módulo de E/S)
Buffer
Transductor
Controlador de dispositivo
Datos
(desde y hacia el exterior)
La conexión con el módulo de E/S se realiza a través de señales de control, estado y datos. Es la parte
del controlador que omologa su comportamiento singular al esquema general de gestión de la E/S. Las señales
de control determinan la función que debe realizar el dispositivo. La lógica de control asociada al dispositivo
controla su operación en respuesta a las indicaciones del módulo de E/S. El transductor convierte las señales
eléctricas asociadas a los datos a otra forma de energía. Además, suele existir un buffer asociado al transductor
para almacenar temporalmente el dato que se transfiere entre el módulo de E/S y el dispositivo. En el tema 8
estudiaremos una serie de dispositivos periféricos particulares y sus controladores asociados.
2.3 Comunicación entre el módulo de E/S y el controlador de dispositivo periférico
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Analizaremos en este apartado el dialogo de señales que de forma general tiene lugar entre el módulo de
E/S y el controlador de dispositivo en una transmisión de datos.
• Salida
En el caso de un dispositivo de salida (o de e/s en operación de salida) las líneas básicas que intervienen
son las del bus de datos y dos de control: dato válido y dato aceptado. La primera indica al dispositivo la
validez del dato presente en el bus de datos, y es activada por el módulo de E/S cuando ha estabilizado el bus
de datos con el valor del dato a transmitir. La segunda la activa el dispositivo periférico en respuesta a la
lectura y procesamiento del dato, y como respuesta a la disponibilidad para aceptar un nuevo dato. En la
siguiente figura hemos representado en forma gráfica la evolución temporal de las señales en una operación de
salida
Salida
bus de datos
Módulo
de E/S
dato válido
Dispositivo
periférico
dato aceptado
bus de datos
dato válido
dato aceptado
La anterior secuencia de acciones que realizan el módulo de E/S y el dispositivo periférico en una operación
de salida podemos también verlas en el siguiente diagrama:
Módulo de E/S
Periférico
Dato --> bus de datos
"1" --> dato válido
"1" = capacitación
"0" = descapacitación
"Z" = alta impedancia
bus de datos --> periférico
"1" --> dato aceptado
0 --> dato válido
"Z" --> bus de datos
"0" --> dato aceptado
(listo para aceptar una
nueva operación)
•
Entrada
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
En el caso de un dispositivo de entrada (o de e/s en operación de entrada) las líneas básicas que intervienen
son las del bus de datos y dos de control: petición de dato y dato aceptado. La primera solicita al dispositivo
un dato de entrada, y es activada por el módulo de E/S. La segunda la activa el dispositivo periférico cuando
ha generado el dato y su valor es estable en el bus de datos. Con la activación de esta señal el módulo de E/S
conoce la validez del dato en el bus y puede proceder a su carga en el registro de datos. En la siguiente figura
hemos representado en forma gráfica la evolución temporal de las señales en una operación de entrada
Entrada
bus de datos
Módulo
de E/S
dato válido
Dispositivo
periférico
petición dato
petición dato
bus de datos
dato valido
La anterior secuencia de acciones que realizan el módulo de E/S y el dispositivo periférico en una operación
de entrada podemos también verlas en el siguiente diagrama:
Módulo de E/S
Periférico
"1" --> petición dato
"1" = capacitación
"0" = descapacitación
"Z" = alta impedancia
Dato --> bus de datos
"1" --> dato válido
bus de datos--> Módulo E/S
0 --> petición dato
"0" --> dato válido
(listo para aceptar una
nueva operación)
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
3. Mecanismos básicos de e/s: sincronización
Las diferencias de velocidad entre la CPU y los periféricos de E/S, y lo que es más importante, la no
previsibilidad del tiempo de respuesta de estos últimos, hace necesario un mecanismo de sincronismo que
permita coordinar adecuadamente las transferencias de datos entre ambas unidades. Existen dos mecanismos
básicos para sincronizar las operaciones de E/S con las de la CPU:
a) Sincronización por programa
b) Sincronización por interrupción
El comportamiento de cada uno de estos mecanismos se resume en los dos siguientes organigramas:
no
Orden de
lectura al
módulo de
CPU → E/S
Leer el estado
del módulo
E/S → CPU
Orden de
lectura al
módulo de
Leer el estado
del módulo
¿estado indica
orden realizada?
¿estado indica
orden realizada?
CPU → E/S
Ejecutar otra tarea
Interrupción
E/S → CPU
no
Error
si
si
Leer el dato
del módulo
de E/S
Escribir el
dato en
memoria
E/S → CPU
Leer el dato
del módulo
de E/S
CPU → Memoria
no
Escribir el
dato en
memoria
E/S → CPU
CPU → Memoria
no
¿final?
¿final?
si
E/S Programada
si
E/S por interrupción
4. E/S controlada por programa
La sincronización por programa (E/S programada) es la más sencilla de implementar en un computador,
sin embargo, presenta algunos inconvenientes:
•
•
•
Pérdida de tiempo: el computador no realiza trabajo útil en el bucle de espera
Impide la realización de tareas periódicas, como la exigida por el refresco de una pantalla
Dificultades para atender varios periféricos
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Los dos últimos inconvenientes podrían paliarse en parte limitando el tiempo de espera, como se muestra
en el siguiente organigrama:
Orden de
lectura al
módulo de
CPU → E/S
Leer el estado
del módulo
E/S → CPU
no
¿estado indica
orden realizada?
no
¿límite de tiempo?
si
Leer el dato
del módulo
de E/S
Escribir el
dato en
memoria
E/S → CPU
CPU → Memoria
Otras
operaciones
de E/S
no
¿final?
si
Ejemplos de E/S controlada por programa
Determinemos el porcentaje de tiempo de ocupación de CPU de tres dispositivos que se conectan a un
procesador mediante E/S programada: un ratón, un disco flexible y un disco duro. Supondremos que el número
de ciclos que requiere la operación completa de E/S sobre el dispositivo es de 400, y que el procesador trabaja
a 500 MHz. Se supone que se puede ejecutar la consulta del estado del dispositivo con la frecuencia necesaria
para que no se pierda ningún dato, y que los dispositivos están potencialmente siempre ocupados.
1. El ratón debe ser leído 30 veces por segundo para asegurar que no se pierde ningún movimiento
2. El disco flexible transfiere datos al procesador en unidades de 16 bits, a una velocidad de 50KB/seg. No
debe perderse ningún dato.
3. El disco duro transfiere datos en bloques de 4 palabras, y puede transferir a una velocidad de 4MB/seg. No
debe perderse ningún dato.
Ratón:
Ciclos de reloj por segundo para la lectura = 30 X 400 = 12.000 ciclos por segundo
Porcentaje de ciclos de procesador consumidos en la lectura = 12 x 103 / 500 x 103 = 0,002 %
El resultado muestra que se podría utilizar E/S programada con el ratón, sin un impacto significativo en el
rendimiento del procesador
Disco flexible
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La frecuencia a la que debe realizarse la lectura será: 50KB/seg / 2 byte/acceso por encuesta =
25 K acceso por lectura/ seg.
Ciclos por segundo para la lectura = 25K x 400
Porcentaje de ciclos de procesador consumidos en la lectura = 25 x 1000 x 400 / 500 x 106 = 2 %
Este tiempo es importante, pero se puede tolerar en un sistema de gama baja.
Disco duro
Hay que realizar lectura del dispositivo a una frecuencia que coincida con el ritmo al que llegarán los bloques
de 4 palabras, que es 250 K veces por segundo (4 MB por segundo / 16 bytes por transferencia). Por tanto:
Ciclos consumidos para lectura = 250 K x 400
Porcentaje de ciclos de procesador consumidos en la lectura = 100 x 106 / 500 x 106 = 20 %
Resultado que indica que una quinta parte del tiempo del procesador se consumirá en la lectura del dispositivo,
con lo que resulta claramente inaceptable
5. E/S serie y paralelo
La conexión entre el módulo de E/S y el dispositivo periférico se puede realizar en forma serie o
paralela. La E/S serie utiliza una única línea de transmisión, y se emplea cuando módulo de E/S y dispositivo
periférico están a una distancia media o larga y el costo del medio de transmisión resulta importante. La
transmisión tiene lugar haciendo que la línea adquiera sucesivamente a lo largo del tiempo el estado de cada
uno de los bits constitutivos del mensaje. El tiempo asignado a cada bit determina la velocidad de transmisión
en bits/segundo o baudios.
Módulo
de
E/S
Dispositivo
periférico
En cambio, la E/S paralela se utiliza para conectar módulos de E/S que se encuentran relativamente
cerca del dispositivo periférico. Utiliza un conjunto de líneas por las que se transmiten simultáneamente (en
paralelo) los bits del mensaje
Módulo
de
E/S
Dispositivo
periférico
5.1 E/S serie
Existen dos métodos para sincronizar las transmisiones en la E/S serie:
• Asíncrona, que no utiliza reloj (de ahí su nombre) y que se resincroniza periódicamente con el dispositivo
receptor al inicio de cada byte transmitido
• Síncrona, que transmite simultáneamente la señal de datos junto con el reloj de sincronización
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
E/S serie asíncrona
En este tipo de E/S no existe un reloj común entre el emisor (módulo de E/S) y el receptor
(dispositivo), aunque ambos utilizan señales locales de reloj para generar (emisor) y muestrear (receptor) la
información, señales con valores de frecuencia nominalmente iguales. El estado de reposo de la línea de
tranmisión serie es en alta. El emisor comienza la transmisión con un bit de start de valor 0 cuyo flanco
negativo detecta el receptor como inicio de una transmisión. A partir de ese momento el emisor transmite en
forma serie los bits de datos de su registro de salida (que es un registro de desplazamiento) a una frecuencia
marcada por su reloj local (reloj emisor). El receptor muestrea la línea con una frecuencia nominalmente igual a
la del emisor sobre su registro de entrada (que es otro registro de desplazamiento). Como ambos relojes son
físicamente diferente, no se evita que con el tiempo se vaya desplazando uno respecto al otro, con el risgo que
si los bits transmitidos son muchos el receptor los muestree incorrectamente. Sin embargo, como emisor y
receptor se resincronizan con el bit de start del siguiente caracter transmitido, y sólo se tranmite un caracter
cada vez, estos deslizamientos no producen error.
1
0
1
1
R. desplazamiento (E)
10110010
0 0
1 0
R. desplazamiento (R)
10110010
reloj
emisor
reloj
receptor
En la siguiente figura se muestra que el reloj local del receptor muestrea la línea de transmisión en
instantes de tiempo correctos, es decir, dentro del intervalo de tiempo correspondiente a un bit (intervalo bit)
R. desplazamiento (R)
10110010
reloj
receptor
En cambio, si el reloj local del receptor tiene una frecuencia ligeramente inferior (mayor período),
como se muestra en la siguiente figura, a partir del cuarto intervalo bit la señal será muestreada incorrectamente
en el receptor.
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
R. desplazamiento (R)
10100100
reloj
receptor
E/S serie síncrona
La E/S serie síncrona utiliza una señal de transmisión que codifica conjuntamente la señal de
información y el reloj. Por ejemplo, el código de Manchester, que se muestra en la siguiente figura, utiliza una
codificación por transiciones, de tal manera que el 0 se codifica como una transición positiva y el 1 como una
transición negativa. De esta forma en un intervalo bit existe al menos un cambio en la señal, con lo que se
puede extraer la señal del reloj.
1
0
1
1
0
0
1
0
Codificación
por nivel
Codificación
Manchester
Reloj
decodificado
Ejemplo de módulo de E/S serie: ACIA (Asynchronous Communicatios Interface Adapter)
E/S paralela
Ejemplo de módulo de E/S paralelo: VIA (Versatil Interface Adapter)
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 9: Interrupciones
1. E/S por interrupción: gestión de interrupciones
2. Tipos de sistemas de interrupciones: prioridades
3. Enmascaramiento de interrupciones.
4. Anidamiento de interrupciones
5. Ejemplos
1. E/S por interrupción: gestión de interrupciones
En la E/S programada el procesador tiene que esperar un tiempo considerable a que el módulo de E/S esté
preparado para realizar la operación. El procesador espera comprobando repetidamente el estado del módulo de E/S,
degradándose significativamente el rendimiento de la CPU. Para evitar este inconveniente se introdujo el sistema de
interrupciones en los procesadores.
Básicamente una interrupción viene determinada por la ocurrencia de una señal externa que provoca la
bifurcación a una dirección especifica de memoria, interrumpiendo momentáneamente la ejecución del programa. A
partir de esa dirección se encuentra la rutina de tratamiento que se encarga de realizar la operación de E/S
propiamente dicha, devolviendo después el control al punto interrumpido del programa.
Programa principal
I1
I2
.
.
.Ii
Ii+1
.
señal de interrupción
línea de interrupción
.
.In
Rutina de tratamiento
i1
i2
.
.
im
Podemos, pues, ver una interrupción como un salto a subrutina (rutina de tratamiento) ocasionado por una
señal externa, y no por una instrucción del programa. De esta forma se pueden eliminar los tiempos muertos de
consulta de la E/S programada
La implementación de un sistema de interrupciones implica introducir una fase de consulta de las líneas de
interrupción al final de la ejecución de cada instrucción. En un procesador sin sistema de interrupciones, se podría
conseguir un efecto similar introduciendo una instrucción de consulta y la correspondiente de salto sobre el valor de
la consulta, detrás de cada instrucción natural del programa. De esta forma se garantizaría la respuesta al dispositivo
de E/S en el momento que pasa a estado disponible, al tiempo que la CPU ejecuta instrucciones útiles del programa.
El precio a pagar sería el recargo introducido por la ejecución de las parejas de instrucciones de consulta y salto
introducidas detrás de cada instrucción útil del programa. Sería algo así como una E/S programada en la que en lugar
de preguntar en el mismo punto del programa por el estado del periférico, se replica la consulta por todo el programa,
intercalándose con la ejecución de las instrucciones útiles. Pues bien, un sistema de interrupciones podemos verlo
como la integración en hardware del supuesto software anterior, es decir, la integración de la consulta y posible salto
dentro de la ejecución de cada instrucción del repertorio.
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El mecanismo de interrupción de un procesador tiene que implementar todas las medidas que hagan que se
pueda bifurcar a la rutina de tratamiento y recuperar el estado del programa interrumpido cuando la rutina finaliza su
ejecución. En el siguiente esquema se detallan las fases que tienen lugar en la atención a una interrupción producida
por algún dispositivo periférico:
petición de interrupción
1
programa
3
9
2
programa
4
5
rutina de tratamiento
6
7
8
(1) El programa en ejecución (CPU) activa el sistema de interrupciones utilizando instrucciones que operan (ponen a
1 y a 0) sobre el bit de capacitación de las interrupciones I del registro de estado (RE):
STI
I <--1;
CLI I <-- 0
Registro de Estado (RE)
I
C
N
Z
bit de interrupción
(2) Se produce la petición de interrupción por parte de algún dispositivo periférico en un instante de tiempo
impredecible para la CPU.
CPU
PC
1
señal de interrupción
línea de interrupción (INT)
RE
(3) La CPU finaliza la ejecución de la instrucción en curso.
(4) La CPU salva automáticamente el estado en la pila, es decir, el contador de programa (PC) y el registro de estado
(RE):
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CPU
Memoria
PC
SP
PC
1
1
RE
RE
(5) La CPU obtiene la dirección de la rutina de tratamiento a partir del vector de interrupción (VI), que usualmente se
ubica en memoria.
CPU
Memoria
PC
vector de interrupción
dirección r.t.
1
RE
(6) La CPU descapacita las interrupciones (I = 0) para que durante la ejecución de la primera instrucción de la rutina
de tratamiento no se vuelva a detectar la misma interrupción y provoque un bucle infinito.
CPU
PC
0
RE
(7) La CPU ejecuta la rutina de tratamiento de la interrupción que realiza lo siguiente:
•
•
•
Salva en la pila los registros a utilizar
Realiza la operación de Entrada/Salida
Restaura desde la pila los registros utilizados
(8) Finaliza la rutina de tratamiento con la ejecución de la instrucción de retorno de interrupción (RTI), que restaura
automáticamente el estado de la CPU desde la pila y vuelve al programa interrumpido:
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CPU
Memoria
PC
PC
1
RE
1
RE
SP
(9) La CPU continúa la ejecución del programa interrumpido, quedando las interrupciones capacitadas
automáticamente al recuperarse el valor I = 1 del RE.
2. Tipos de sistemas de interrupciones: prioridades
Clasificaremos las interrupciones atendiendo a dos criterios independientes: la fuente que produce la interrupción, y el
modo de obtener la dirección de la rutina de tratamiento o vector de interrupción.
a) Atendiendo a la fuente que produce la interrupción:
‰
Interrupciones hardware
♦ Internas: producidas por la CPU
• división por cero
• desbordamiento
• instrucción ilegal
• dirección ilegal
• logaritmo de cero
• raíz cuadrada de negativos
• etc.
♦ Externas: producidas por los dispositivos de E/S
• vectorizadas
• no vectorizadas
‰
Interrupciones software: producidas por la ejecución de instrucciones de la CPU.
b) Atendiendo al modo de obtener el vector de interrupción:
‰
Interrupciones autovectorizadas: el vector de interrupción es fijo, una posición de memoria asociada a la línea de
interrupción.
‰
Interrupciones vectorizadas: el vector de interrupción o parte de él lo suministra el propio periférico cuando se le
reconoce la interrupción.
El método usual de obtener la dirección de la rutina de tratamiento de la interrupción en ambos casos es a través
de la tabla de vectores de interrupción, tabla que contiene las direcciones de las rutinas de tratamiento de cada
interrupción.
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Memoria
Tabla de vectores de Interrupción
d.r.t. interrupción
0
d.r.t. interrupción
1
d.r.t. interrupción
2
d.r.t. interrupción
3
d.r.t. interrupción
i
Autovectorizadas
vector de interrupción
Vectorizadas
d.r.t. interrupción N-1
d.r.t. interrupción N
2.1 Interrupciones autovectorizadas
Disponen de una línea única de petición interrupción a la que se pueden conectar más de un dispositivo
periférico, efectuándose en el punto de conexión la función lógica OR. El vector de interrupción para esta línea ocupa
una posición fija de la tabla de vectores de interrupción. Cuando uno o más de los dispositivo periféricos conectados a
la línea genera una señal de interrupción, la CPU debe identificar por software el dispositivo causante de la
interrupción, y en caso de ser varios, establecer el orden de prioridad entre ellos. La identificación se realiza
consultando los registros de estado locales de cada módulo de E/S.
línea única de interrupción
INT
CPU
E/S 1
INT
E/S 2
estado
control
INT
E/S n
estado
control
INT
estado
control
La OR-cableada en la línea de interrupción INT se realiza normalmente con tecnología de transistores con
colector abierto. Por ello normalmente la señal activa de interrupción es en baja.
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
+5Vcc
INT
E/S 1
INT
E/S 2
estado
INT
E/S n
estado
INT
estado
La rutina general de tratamiento asociada a la línea de interrupción comienza su ejecución identificando por
encuesta el periférico causante de la interrupción, para bifurcar después a la rutina de tratamiento específica de dicho
periférico, en donde se realiza la operación de E/S propiamente dicha:
Leer estado de E/S 1
Programa
INT
activo
Rutina de tratamiento E/S 1
Eliminar fuente
de interrupción
interrupción
Leer estado de E/S n
RTI
INT
activo
RTI
Rutina de tratamiento E/S n
Eliminar fuente
de interrupción
RTI
2.2 Interrupciones vectorizadas:
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
•
•
Disponen de dos líneas de interrupción, una de petición y otra de reconocimiento.
El vector de interrupción es generado por el dispositivo que produce la interrupción.
Utiliza un mecanismo de daisy chaining en la transmisión de la señal de reconocimiento.
línea de petición de interrupción
INT
bus de datos
línea de reconocimiento de interrupción
RINT
vector
CPU
E/S
1
INT1
E/S
estado
2
E/S
n
estado
INTn
estado
INT2
control
control
+
control
prioridad
-
El proceso de interrupción se desarrolla en los siguientes pasos:
1.
2.
3.
4.
5.
El dispositivo de E/S genera la petición de interrupción activando INT.
La CPU la reconoce activando RINT.
Los dispositivos de E/S que reciben RINT y no han interrumpido, la transmiten al siguiente elemento de la
cadena.
El dispositivo de E/S que recibe RINT y ha realizado la petición coloca el vector de interrupción n en el bus
de datos.
A partir del vector n la CPU bifurca a la rutina de tratamiento correspondiente al dispositivo.
La lógica interna del paso de la señal de reconocimiento por encadenamiento (daisy chain) para cada módulo se
representa en la siguiente figura:
INT
CPU
vector INT
INT
RE
RINT
2.3 Prioridades
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Cuando dos o más dispositivos de E/S generan una petición de interrupción, el sistema de prioridades
determina la interrupción que se atiende en primer lugar.
Interrupciones no vectorizadas: la prioridad la establece el software de encuesta con el orden de recorrido de todos los
dispositivos de E/S salida conectados a una línea. Es decir, se establece por software.
Interrupciones vectorizadas: la prioridad la determina el orden de proximidad a la CPU establecido por la línea de
retorno de interrupción Es decir, se establece por hardware.
Cuando existen más de una línea de interrupción, la prioridad viene establecida por hardware en el diseño del
procesador:
INT1
INT2
.
.
.
INTn
prioridad
CPU
En ocasiones, cada línea de interrupción tiene su propia señal de reconocimiento:
RINT3 INT3
CPU
E/S 1
RINT3
INT3
E/S 1
RINT3 INT3
E/S 1
Aunque suele ser frecuente, para minimizar el número de pines del chip, que las diferentes líneas entren
codificadas a la CPU, siendo necesario el uso de un codificador externo:
INT1
INT2
.
.
.
INTm
COD
INTn-1
INTn
m = log2 n
CPU
m
INT1
INT2
INT3
RINT (reconocimiento)
código reconocido
En estos casos suele existir una única señal de reconocimiento RINT, generándose por las líneas menos significativas
del bus de direcciones el código de la interrupción reconocida, que será la más prioritaria entre las que realizaron la
petición.
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
3. Enmascaramiento de interrupciones
El sistema de interrupciones de un procesador dispone en general de la posibilidad de ser inhibido, es decir,
impedir que las interrupciones sean atendidas por la CPU. Esta posibilidad hay que utilizarla en determinadas
ocasiones en las que por ningún concepto se puede interrumpir el programa en ejecución. Además de la inhibición
total del sistema, existe la posibilidad de enmascarar individualmente algunas de las líneas de interrupción utilizando
un registro de máscara:
CPU
RE
I
0
Unidad
de
Control
DEC
Prioridad
1
1
0
INT 0
INT 1
INT 2
INT 3
Registro de Máscara
La descapacitación de algunas interrupciones también se puede realizar a nivel local del propio módulo de
E/S, actuando sobre su registro de control.
A nivel software también se pueden inhibir las interrupciones producidas sobre una misma línea por
diferentes periféricos, en la fase de identificación de la rutina de tratamiento correspondiente.
4. Anidamiento de interrupciones
Un tema importante en un sistema de interrupciones es el de la capacidad de anidar interrupciones, es decir,
la posibilidad de interrumpir la rutina de tratamiento de una interrupción por la generación de otra interrupción. Tal
posibilidad viene determinada por el sistema de prioridades: "un dispositivo sólo puede interrumpir a otro cuando su
nivel de prioridad es mayor que el que se está atendiendo".
Programa
INT2
Rutina INT2
INT4
Rutina INT4
Rutina INT7
INT7
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Para describir con más detalle la forma en que opera la combinación de las prioridades y el anidamiento en un sistema
de interrupciones, consideremos una CPU con tres líneas de interrupción: INT0, INT1, INT2, siendo la primera la más
prioritari, y la última la menos prioritaria. Supongamos que llegan tres peticiones de interrupción en el orden temporal
del siguiente esquema:
prioridad
CPU
INT0
INT1
prioridad
INT2
tiempo
La CPU dispone de tres bits en su registro de estado para permitir la inhibición de forma independiente cada línea:
Si INTi = 0 nivel capacitado
INT0
INT1
INT2
Si INTi = 1 nivel descapacitado
Las interrupciones con menor prioridad no podrán interrumpir la rutina de tratamiento de una de mayor prioridad, por
lo que la secuencia de peticiones y servicios será la que aparece en el siguiente esquema:
d1
Programa
Rutina INT1
dir1
dir1+1
INT2
d0
Rutina INT0
INT0
INT1
dir
dir+1
d2 Rutina INT2
La evolución consiguiente de la pila y el estado de la CPU (CP y RE) será el siguiente:
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
llega INT1
llega INT2
llega INT0
fin INT0
fin INT1
atiende INT2
fin INT2
dir1+1
011
dir+1
Pila
dir+1
000
CP
d1
d1+ n
011
RE
000
011
d0
dir+1
000
dir1+1
111
dir+1
000
dir+1
011
000
d2
dir+1
001
000
6.
Ejemplos de sistemas de interrupciones
Estudiaremos en este apartado de forma general los sistemas de interrupciones de dos micrprocesadores, uno de 8
bits, el MC 6809, y otro de 16, el MC 68000. Con el primero estudiaremos la forma de multiplicar una línea de
interrupción autovectorizada en varias, también autovectorizadas, utilizando un dispositivo hardware. Con el segundo
veremos un sistema de interrupciones más complejo en el que coexisten las interrupciones autovectorizadas y
vectorizadas.
6.1 Sistema de interrupciones del microprocesador MC 6809
El MC 6809 dispone de las siguientes líneas de interrupción:
Línea
IRQ
FIRQ
NMI
RESET
Prioridad
Baja
⏐
↓
Alta
Dirección Rutina
FFF8 – FFF9
FFF6 – FFF7
FFFC – FFFD
FFFE - FFFF
Bit de máscara en RE
I
F
No enmascarable
No enmascarable
Comportamiento
Salva todos los registros
Salva CP y RE
Salva todos los registro
No salva registros
Veremos como se puede transformar la línea IRQ en 8 líneas de interrupción diferentes. Para ello se
aprovecha el que cuando se produce una interrupción por esta línea y es atendida por la CPU, ésta accede a su vector
de interrupción que se encuentra en las direcciones FFF8 y FFF9, lo que significa que en el bus de direcciones
aparecerán estas direcciones. Sólo en respuesta a una interrupción por IRQ se generan estas direcciones en el bus, por
lo que podemos identificarla por hardware y descomponerla en 8 pares diferentes, una por cada línea nueva de
interrupción.
El esquema completo de un dispositivo que realiza esta conversión lo hemos representado en la siguiente
figura. El dispositivo se selecciona cuando se activa la señal CS, por lo que esta señal deberá generarse cuando en el
bus aparezcan las direcciones FFF8 y FFF9. Cuando eso ocurra, el dispositivo transformará las 4 líneas menos
significativas del bus de direcciones (A4,A3,A2,A1) en otras 4 (Z4,Z3,Z2.Z1) de manera que en las Zi se genere uno de
los 8 pares de las nuevas direcciones, el correspondiente a la línea INTi activada de mayor prioridad.
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
INT7
INT6
INT5
INT4
Rgist r o
De
P et ición
P r ior ida d
y
Má sca r a
Vector
INT3
INT2
IRQ
INT1
INT0
R/W
CS
E
Selección
y
Con t rol
Z4
A4
Lógica
com bin a cion a l
A3
Z3
Z2
Z1
A2
A1
La tabla de transformación de direcciones sería, pués, la siguiente:
Dirección entrada
A16....A4 A3 A2 A1
FFF8 – FFF9
Línea
1
INT7
INT6
INT5
INT4
INT3
INT2
INT1
INT0
Dirección salida
A16....Z4 Z3 Z2 Z1
FFE6 – FFE7
FFE8 – FFE9
FFEA – FFEB
FFEC – FFED
FFEE – FFEF
FFF0 – FFF1
FFF2 – FFF3
FFF4 – FFF5
La disposición del controlador de interrupciones respecto a la CPU y la memoria se muestra en el siguiente esquema:
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CP U
IRQ
INT7
INT6
INT5
INT4
INT3
INT2
INT1
INT0
IRQ
Co n tro la d o r
de
In te rru p c io n e s
A4
A3
A2
A1
Z4
Z3
Z2
Z1
CS
Mem or ia
A5,...A16
A5,...A16
D0,...D7
6.2 Sistema de interrupciones del microprocesador MC 68000
En el MC 68000 las interrupciones se generalizan al concepto de excepción, que incluye las interrupciones
hardware de E/S propiamente dichas, las producidas por eventos internos en la CPU, y las producidas por software.
‰ Líneas de interrupción
Las excepciones de E/S llegan a la CPU en forma codificada a través de tres líneas externas: IPL2, IPL1,
IPL0, que codifican la ausencia de excepción (111), y 7 niveles con prioridad (000 el más prioritario y 110 el menos
prioritario).
VP A
IPL2
IPL1
IPL0
CP U 68000
FC2 = 1
FC1 = 1
FC0 = 1
A3 A2 A1
Una cuarta línea, VPA, determina si los siete niveles de las líneas IPLi codifican una excepción
autovectorizada (VPA = 0) o vectorizada (VPA = 1). En el primer caso el vector de excepción es fijo para cada nivel,
y en el segundo lo determina el periférico y lo transmite por las 8 líneas menos significativas del bus de datos cuando
le llega la señal de reconocimiento procedente de la CPU, que corresponde al valor 111 de las señales de estado FC2,
FC1, FC0. El número de la línea vectorizada reconocida lo genera la CPU a través de las líneas del bus de direcciones
A3, A2, A1. Por ello, es necesario complementar con circuitería lógica externa el sistema, tal como aparece en el
siguiente esquema:
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
VP A
COD
IPL2
IPL1
IPL0
n ivel
n ivel
n ivel
n ivel
n ivel
n ivel
n ivel
7
6
5
4
3
2
1
n ivel
n ivel
n ivel
n ivel
n ivel
n ivel
n ivel
7
6
5
4
3
2
1
7 líneas
autovectorizadas
7 líneas
vectorizadas
CP U 68000
Señ a l de
r econ ocim ien t o
globa l pa r a
excepcion es
vect or iza da s
FC2
FC1
FC0
Señ a l de
r econ ocim ien t o
in dividu a l
pa r a
ca da n ivel
A3
A2
A1
IN TA1
IN TA2
IN TA3
IN TA4
IN TA5
IN TA6
IN TA7
DE COD
Enmascaramiento
Los bits I2,I1,I0 del registro de estado codifican los niveles inhibidos por la CPU, de acuerdo a la siguiente
tabla:
I2 I1 I0
Niveles inhibidos
0 0 0
Ninguno
0 0 1
Nivel 1
0 1 0
Niveles 1 al
0 1 1
Niveles 1 al
1 0 0
Niveles 1 al
1 0 1
Niveles 1 al
1 1 0
Niveles 1 al
1 1 1
Niveles 1 al
El nivel 7 no es enmascarable
T
S
I2
2
3
4
5
6
6
I1
I0
X
N
Z
V
C
Vectores de excepción
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Los vectores de excepción son posiciones de memoria donde la CPU obtiene la dirección de la rutina de
tratamiento de la excepción. En el MC 68000 existen 255 vectores que se agrupan en la tabla de vectores de
excepción ubicada en la zona más baja de memoria (desde la dirección 0 a la 1020 en decimal). Cada vector ocupa 2
palabras (4 bytes) excepto el vector de RESET que ocupa 4 palabras, 2 para el CP y las otras 2 para el SP, y se
identifica con un número de 8 bits (en decimal del 0 al 255, excepto el 1, que corresponde a la segunda mitad del 0,
que es el de RESET). La dirección real se obtendrá multiplicando por 4 el número de vector. El número de vector lo
genera la CPU (excepciones autovectorizadas) o el periférico (excepciones vectorizadas).
Nº de vector
0
1
1
3
4
5
6
.
.
.
25
26
27
28
29
30
31
.
.
.
64
.
.
.
255
Tabla de vectores de excepción
Asignación
RESET (CP inicial)
RESET (SP inicial)
error del bus
dirección no existente
instrucción ilegal
división por cero
instrucción CHK (entero fuera de rango)
autovector nivel 1
autovector nivel 2
autovector nivel 3
autovector nivel 4
autovector nivel 5
autovector nivel 6
autovector nivel 7
192 vectores de excepción de usuario
Ejemplo de conexión de periféricos
Para finalizar veamos el esquema completo de conexión de periféricos al sistema de excepción del MC 68000.
Se han conectado tres periférico de forma encadenada (daisy chain) a la línea vectorizada de nivel 3.
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Periférico 1
Periférico 2
IPL2
nivel 7
nivel 6
nivel 5
nivel 4
nivel 3
nivel 2
nivel 1
COD
VPA
nivel 7
nivel 6
nivel 5
nivel 4
nivel 3
nivel 2
nivel 1
IPL1
IPL0
autovectorizadas
vectorizadas
CPU 68000
FC2
FC1
Periférico 3
FC0
NUMERO DE
VECTOR
A3
Periférico 4
A2
A1
CIRCUITO
LOGICO
BUS DE DIRECCIONES
INTA1
INTA2
INTA3
INTA4
INTA5
INTA6
INTA7
Periférico 5
BUS DE DATOS
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 10: E/S de alta velocidad
1. E/S por acceso directo a memoria (DMA): motivación
2. Estructura y funcionamiento de un controlador de DMA
3. Procesadores de e/s: tipos y estructura.
4. Programas de operación de los procesadores de e/s.
1. E/S por acceso directo a memoria (DMA): motivación
La E/S por interrupciones ocupa menos tiempo de CPU que la E/S controlada por
programa. Sin embargo, con cualquiera de las dos alternativas las transferencias de datos deben
pasar a través de la CPU. Esto significa que la velocidad de las transferencias está limitada por la
velocidad a la que la CPU atiende el dispositivo periférico, ya que tiene que gestionarlas ejecutando
una serie de instrucciones. En la E/S controlada por programa la CPU está dedicada
exclusivamente a la E/S, transfiriendo los datos a relativa velocidad, pero al precio de dedicarse a
ello a tiempo completo. Las interrupciones liberan en buena medida a la CPU de la gestión de las
transferencias, a costa de disminuir su velocidad, pues la rutina de servicio de las interrupciones
contiene por lo general instrucciones ajenas a la propia transferencia. Ambos procedimientos
manifiestan, pues, ciertas limitaciones que afectan a la actividad de la CPU y la velocidad de
transferencia.
Para poner de manifiesto de forma cuantitativa las limitaciones de la E/S programada y por
interrupción, consideremos los dos siguientes supuestos:
Supuesto 1: conexión de un periférico lento, una impresora láser. La CPU opera a 200 Mhz.
y su CPI vale 2. La impresora opera a 20 páginas/minuto, con 3.000 caracteres (bytes) por página.
Se trata de imprimir un bloque de 10 Kbytes ubicado en la memoria.
200 Mh z
CP I = 2
Mem or ia
CP U
10 Kby te s
Módu lo
E /S
20 pa g./m in.
1 pa g = 3000 bytes
a) E/S programada
Una instrucción tarda en ejecutarse 2 * 5 ns = 10 ns, ya que el tiempo de ciclo Tc =
1/Frecuencia = 1/200*106 seg. = 1/200*106 * 10-9 ns = 5 ns.
La impresora imprime 20 * 3.000 = 60.000 caractéres/minuto = 1.000
caracteres/segundo = 1 Kbyte/s. Luego los 10 Kbytes los imprimirá en 10 segundos.
La CPU está ocupada durante 10 segundos
b) E/S por interrupción
Para este caso habrá que conocer el número de instrucciones que se ejecutan dentro de
la rutina de tratamiento de la interrupción. Supondremos que son 10 las instrucciones (3 para
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
salvar contexto, 2 para comprobar el estado y bifurcar, 1 para la transferencia, 3 para restaurar
contexto, y 1 para retorno de interrupción, RTI). La impresora genera una interrupción cada vez
que está preparada para recibir un nuevo caracter.
Para transferir los 10 Kbytes se producirán 10.000 interrupciones, lo que significa
ejecutar 100.000 instrucciones.
Luego la CPU se ocupa durante 105 * 10 ns = 106 ns = 106 * 10-9 s. = 0,001 s. = 1
milisegundo.
La E/S por interrupción ha reducido en 10.000 veces el tiempo que la CPU está ocupada
en atender la impresora. Sin embargo, la velocidad de la operación de E/S no ha cambiado,
como era de esperar al estar dominada por la velocidad del periférico.
Supuesto 2: conexión de un periférico rápido, un disco magnético. La CPU opera igual que
en caso anterior, es decir, a 200 Mhz y su CPI vale 2. El disco opera a una velocidad de
transferencia de 10 Mbytes/s. Se trata en este caso de transmitir un bloque de 10 Mbytes de la
memoria al disco.
200 Mh z
CP I = 2
CP U
Mem or ia
Módu lo
E /S
10 Mby t e s
10 Mbyt es/s
10 Mby t e s
c) E/S programada
A la velocidad de 10 Mbytes/s el disco tarda 1 segundo en recibir los 10 Mbytes, y como
por E/S programada la CPU envia un byte cada vez que el disco está preparado para recibirlo,
la CPU está ocupada en la tranferencia durante 1 segundo.
d) E/S por interrupción
Seguimos suponiendo que la rutina de tratamiento ejecuta 10 instrucciones. Como ahora se
transmiten 107 bytes se producirán otras tantas interrupciones, lo que significa que la CPU ejecuta
en toda la operación 107 * 10 = 108 instrucciones. Por tanto el tiempo total de ocupación de la CPU
en la transferencia de E/S será 108 instrucciones * 10 ns/instrucción = 109 ns = 1 segundo.
Luego en el supuesto 2 las interrupciones no ahorran tiempo de CPU en la operación de
E/S frente a la E/S programada. La razón está en que se ha llegado al límite de velocidad que es
capáz de soportar la línea de interrupción del supuesto (1 byte cada 100 ns). Por encima de los 10
Mbytes/s la E/S por interrupción perdería datos puesto que se presentaría un nuevo byte antes de
haber finalizado la rutina de tratamiento del byte anterior. La E/S programada todavía admitiría
mayor velocidad puesto que no tendría que ejecutar las instrucciones de guarda y restauración del
contexto ni la instrucción RTI. El bucle de la E/S programada ejecutaría sólo 3 instrucciones (2
para comprobar el estado y bifurcar, 1 para la transferencia), es decir tardaría 30 ns en lugar de los
100 ns que tarda la rutina de tratamiento de la interrupción. Por tanto podría llegar hasta el límite
de 30 ns/byte, es decir, 33 Mbytes/segundo
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Por tanto, cuando se tienen que transferir grandes cantidades de datos y a una elevada
velocidad, es necesario disponer de una técnica que realice de forma más directa las transferencias
entre la memoria y el dispositivo periférico, limitando al máximo la intervención de la CPU. Esta
técnica se conoce con el nombre de acceso directo a memoria (DMA: Direct Memory Access).
Básicamente se trata de un módulo con capacidad para leer/escribir directamente en la
memoria los datos procedentes/enviados de/a los dispositivos periféricos. Para ello solicita la
correspondiente petición a la CPU. Antes de que la CPU conceda acceso a memoria al DMA, pone en
estado de alta impedancia su conexión a los buses del sistema (datos, direcciones y R/W), lo que es
equivalente a desconectarse de la memoria durante el tiempo que es gestionada por el DMA.
Cuando finaliza la operación de E/S el DMA genera una interrupción y la CPU vuelve a tomar
control de la memoria. De esta forma la velocidad de transferencia sólo estarán limitadas por el
ancho de banda de la memoria.
petición
concesión
Acceso Directo a
Memoria
(DMA)
Módulo
E/S
Control
MAR
B. DIR
MEMORIA
CPU
MDR
B. DATOS
2. Estructura y funcionamiento de un controlador de DMA
Para gestionar las transferencias de información, un controlador de DMA dispone de 3
registros: datos, dirección y contador de palabras.
El registro de dirección almacena la dirección de la siguiente palabra a transmitir,
incrementándose de forma automática después de cada transferencia. El contador de palabras
almacena el número de palabras que quedan por transmitir y también se decrementa
automáticamente después de cada transferencia. La lógica de control comprueba el contenido del
contador de palabras y finaliza la operación cuando alcanza el valor 0. Un decodificador se
encargará de identificar la dirección de memoria asignada al DMA. La CPU debe enviar, pues, la
siguiente información al DMA cuando quiera realizar una operación de E/S:
•
•
•
•
El sentido de la operación de E/S: lectura o escritura
La dirección del periférico
La posición de memoria donde comienza el bloque a leer o escribir
El número de palabras que componen el bloque
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Transmitida esta información, la CPU pasa a realizar otra tarea, delegando totalmente la
operación de E/S al DMA. El DMA transfiere directamente, palabra a palabra, el bloque de datos
entre el periférico y la memoria, sin pasar por la CPU. Cuando la transferencia finaliza el DMA envía
una señal de interrupción a la CPU.
r/w
bus de datos
bus de direcciones
CPU
Memoria
Contador de palabras
petición
concesión
interrupción
Dirección de memoria
Registro de datos
r/w
Lógica de control
DEC
DMA
Dispositivo periférico
Para poder transferir a/desde la memoria, el DMA necesita controlar el bus durante un tiempo
suficiente para completar la transferencia. Sin embargo, este tiempo no tiene que ser continuo,
puede fraccionarse en pequeños intervalos que se alternan con la CPU. Existen diferentes
alternativas en la forma de controlar el bus. Cada alternativa supone un compromiso diferente
entre velocidad de transferencia y actividad de la CPU. El empleo de una alternativa en concreto
dependerá de las prestaciones que se deseen y de las características del procesador que se utilice.
Son las siguientes:
•
Ráfagas: el DMA toma control del bus y no lo libera hasta haber transmitido un bloque de
datos completo. Con este método se consigue la mayor velocidad de transferencia pero puede
dejar sin actividad a la CPU durante períodos grandes de tiempo.
In st r u cción 1
In st r u cción 2
Ciclo DMA
•
Ciclo DMA
Robo de ciclos: el DMA toma control del bus y lo retiene durante un solo ciclo. Transmite una
palabra y libera el bus. Es la forma más usual de transferencia y en ella se dice que el DMA
roba ciclos a la CPU.
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
In st r u cción 1
In st r u cción 2
Ciclo DMA
•
Ciclo DMA
Transparente: el DMA accede al bus sólo en los ciclos en los que la CPU no lo utiliza. Y esto
ocurre en diferentes fases de ejecución de las instrucciones. De esta forma la ejecución del
programa no se ve afectado en su velocidad de ejecución.
•
In st r u cción
Bú squ eda
Decodifica ción
Ciclo DMA
Bú squ eda
E jecu ción
Alm a cen a m ien t o
Ciclo DMA
En los sistemas con memoria cache también se puede aprovechar el acceso de la CPU a la cache
para que el DMA pueda acceder simultáneamente a la memoria principal. En resumen, los pasos
que se siguen en la transferencia mediante DMA son:
1. La CPU ejecuta las instrucciones de E/S que cargan los registros de dirección y contador
de palabras del controlador de DMA. El registro de dirección debe contener la dirección
base de la zona de memoria principal que se va a utilizar en la transferencia de datos. El
registro contador de palabra almacena el número de palabras que se transfieren
desde/hacia la memoria.
2. Cuando el controlador de DMA está preparado para transmitir datos, activa la línea de
petición. La CPU espera a un punto de concesión del DMA, renuncia al control de los
buses de datos y direcciones y activa la línea de reconocimiento de DMA.
3. El DMA transfiere directamente los datos a/desde memoria principal por alguno de los
métodos que se acaban de ver. Después de transferir una palabra, el registro de
dirección y el registro contador de palabras del controlador se incrementa y decrementa
respectivamente.
4. Si el contenido del registro contador de palabra no es 0, pero el
preparado para enviar o recibir los siguientes datos, el DMA devuelve
liberando el bus del sistema y desactivando la línea de petición.
desactivando la línea de reconocimiento de DMA y continuando
normal.
periférico no está
el control a la CPU
La CPU responde
con su operación
5. Si el contenido del contador de palabras es 0, el controlador de DMA renuncia al control
del bus del sistema y envía una señal de interrupción a la CPU.
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El DMA, se puede configurar de diferentes formas:
•
Bus único (DMA independiente): todos los módulos comparten el bus del sistema. El DMA,
que actúa en sustitución de la CPU, intercambia datos entre la memoria y el periférico
utilizando un procedimiento análogo al de E/S controlada por programa, es decir, hace de
intermediario entre ambas unidades.
CPU
DMA
E/S
E/S
Memoria
Esta configuración, aunque puede ser muy económica, es claramente poco eficaz, ya que cada
transferencia de una palabra consume 2 ciclos del bus.
•
Integración de funciones DMA-E/S: reduce a 1 el número de ciclos de utilización del bus. Esto
significa que hay un camino entre el controlador de DMA y uno o más controladores de E/S que
no incluyen al bus del sistema.
CPU
DMA
DMA
Memoria
E/S
E/S
E/S
La lógica del DMA puede ser una parte de un controlador de E/S o puede ser un módulo
independiente que controla a uno o más controladores de E/S.
•
Bus de E/S conectado al DMA: El concepto anterior se puede generalizar si se utiliza un bus
de E/S para conectar los controladores de E/S al DMA. Esta alternativa reduce a una el
número de interfaces de E/S en el DMA, y proporciona una configuración fácilmente ampliable.
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
bus del sistema
CPU
DMA
Memoria
bus de E/S
E/S
E/S
E/S
3. Procesadores de E/S: tipos y estructura.
Como hemos visto en los 2 temas anteriores y en los primeros apartados de este tema, la
E/S de los computadores ha experimentado una continua evolución. Comenzó con la E/S
controlada por programa. Le siguió la introducción de las interrupciones para evitar que la CPU
malgastase su tiempo esperando la realización de las operaciones de E/S, aumentando el
rendimiento global del sistema. Posteriormente se introduce en el controlador de E/S la capacidad
para acceder directamente a memoria a través del DMA. De esta forma se pueden transferir
bloques de datos a/desde memoria sin intervención de la CPU, excepto al comienzo y al final de la
transferencia.
Pero este proceso de evolución de la E/S no termina en el DMA. En el paso siguiente se
potencia la capacidad del controlador de E/S hasta convertirlo en un procesador con un conjunto
de instrucciones especializadas en operaciones de E/S. La CPU traduce las operaciones de E/S en
órdenes dirigidas al procesador de E/S (PE/S) para que ejecute un programa de E/S residente en
memoria. El PE/S ejecuta ese programa sin la intervención de la CPU y sólo se interrumpe cuando
se ha ejecutado la secuencia completa. A los procesadores de E/S se les suele denominar también
con el nombre de canales de E/S. No obstante los dos términos se emplean de forma indistinta.
CPU
MEMORIA
bus del sistema
PE/S1
PE/S2
Periférico
CONTROL
E/S
Periférico
CONTROL
E/S
Periférico
CONTROL
E/S
Periférico
CONTROL
E/S
bus
Periférico
CONTROL
E/S
E/S1
bus
Periférico
E/S2
CONTROL
E/S
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Un PE/S representa, pues, una extensión del concepto DMA. Un PE/S tiene la capacidad de
ejecutar instrucciones de E/S, lo que le da un control completo sobre dicha operación. En los
computadores que incluyen PE/S, la CPU no ejecuta las instrucciones de E/S, éstas se almacenan
en memoria principal para ser ejecutadas por un PE/S. Así, la CPU inicia una transferencia de E/S
al dar una orden al PE/S para que ejecute un programa en memoria. El programa especifica entre
otras cosas las siguientes:
•
•
•
El periférico (o periféricos) que interviene en la operación de E/S.
Las zonas de memoria utilizadas en la transferencia
Las acciones a realizar si se producen ciertas condiciones de error durante la transferencia.
ME MOR IA
P r ogr am a
E /S
-
CP U
P rogr a m a
de ca n a l
P rocesa dor de
E /S ó can a l
P er ifér ico
Las comunicaciones entre la CPU y el procesador de E/S a lo largo de la ejecución de una
operación de E/S podemos resumirlas en el siguiente esquema:
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CPU
Solicita el
estado del P
/S
Si el estado es
válido emite la
orden de inicio
de la operación
de E/S
La CPU
continúa la
ejecución de
otro
programa
Solicita el
estado al P E/S
Comprueba que
la operación de
E/ S ha sido
correcta
Procesadaor de E/S
Envía a memoria
la palabra de
estado
Accede a Memoria
para leer
comandos del
programa de E/S
Accede a Memoria
para transferir por
DMA bloques de
datos
Interrumpe a la
CPU cuando ha
finalizado el
programa de E/S
Transfiere a
memoria el estado
de realización del
programa de E/S
3.1 Tipos de procesadores de E/S o canales
Existen tres tipos de PE/S o canales:
•
•
•
Canales multiplexores
Canales selectores
Canales multiplexores por bloques
Canal multiplexor
Un canal multiplexor se utiliza para conectar dispositivos de velocidad baja y media. Son
capaces de transferir datos a velocidades mayores que las de los dispositivos individuales
‰
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
conectados al canal. Esto les permite operar en forma multiplexada sobre varios dispositivos de
E/S.
Ca n a l
Mu lt iplexor
Con t r ola dor
E /S
Con t r ola dor
E /S
Con t r ola dor
E /S
Con t r ola dor
E /S
En la siguiente figura aparece la organización interna de un canal multiplexor. Los
parámetros correspondientes a la operación de cada dispositivo se ubican en posiciones fijas de la
memoria principal. Cuando el canal direcciona un dispositivo particular, busca previamente los
parámetros en memoria y los lleva a los registros de uno de los subcanales. Cuando el dispositivo
se desconecta, los valores actualizados se llevan de nuevo a memoria. El número de subcanales
disponibles en el sistema determina el número máximo de operaciones de E/S que pueden
mantenerse simultáneamente.
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Su bca n a l 1
Su bca n a l 2
Su bca n a l n
n º pa la br a s
n º pa la br a s
n º pa la br a s
dir ección
dir ección
dir ección
con t r ol
con t r ol
con t r ol
Bu ffer de da t os
Con t r ol
del ca n a l
Canal selector
Un canal selector controla múltiples dispositivos de alta velocidad. En cualquier instante de
tiempo está dedicado a la transferencia de datos con uno sólo de estos dispositivos. El PE/S
selecciona un dispositivo y efectúa la transferencia de datos completa.
‰
Ca n a l
Select or
Con t rola dor
E /S
Con t rola dor
E /S
Canal multiplexado por bloques
Este tipo de canal combina las características de los canales multiplexores con las de los
selectores. Permite la multiplexación de varias operaciones de E/S de alta velocidad, bloque por
bloque. Las ventajas obtenidas a través del empleo de canales multiplexados por bloques, en
comparación con las de los canales selectores, surgen de la naturaleza de la operación de
dispositivos de E/S tales como discos y cintas magnéticas. Una operación común con una unidad
de disco puede requerir la siguiente secuencia de comandos:
• Localización de pista(mover la cabeza de lectura/escritura a una pista dada).
• Búsqueda de un sector específico.
• Inicio de la lectura de los datos contenidos en el sector.
‰
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Debido al considerable retraso mecánico involucrado en las primeras dos operaciones, no es
adecuado mantener ocupado el canal durante esta secuencia, lo que sería el caso con un canal
selector. Un canal multiplexor por bloques puede enviar a la unidad de disco la orden de
localización de pista y después desconectarse para dar servicio a otros dispositivos de E/S. Cuando
se completa la operación de localización de pista, el canal se vuelve a conectar, envía la orden de
búsqueda del sector y se desconecta de nuevo. Al terminar la búsqueda de sector, el canal inicia la
transferencia del sector y permanece conectado hasta que finaliza la operación. El uso de un canal
multiplexor por bloques da como resultado una mejora importante en la productividad, en
comparación con los canales selectores.
4. Programas de operación de los procesadores de E/S.
En un DMA simple los parámetros relacionados con las transferencias de datos se cargan
en los registros correspondientes utilizando instrucciones de E/S. En máquinas grandes que
utilizan canales de E/S, esto se sustituye por el concepto de programa de canal. El canal, como se
ha dicho antes, es un pequeño procesador que tiene acceso a la memoria principal. Es capaz de
ejecutar un conjunto limitado de instrucciones, conocidas como comandos de canal. Estos
comandos especifican aquellos parámetros que el canal necesita para controlar los dispositivos de
E/S y realizar operaciones de transferencia de datos. Un programa de canal es una secuencia de
estos comandos almacenada en la memoria principal. La CPU inicia una operación de E/S con la
emisión de una orden especial al canal que hace que el canal empiece a buscar en memoria y
ejecutar los comandos que constituyen el programa de canal.
El programa de canal consta de una serie de palabras de comando de canal (CCW: channel
command words) cuyo formato simplificado aparece en la siguiente figura:
Oper a ción Dir ección del da t o F la gs
CD
Nº de pa la br a s
CC SKIP P CI
Operación Este campo corresponde al código de operación de las instrucciones máquina normales.
Especifica la operación que debe realizar la CCW. La unidad de control decodifica este campo y
envía las señales adecuadas de control al dispositivo. Existen varias operaciones, las más
importantes son las siguientes:
Lectura: el canal transfiere a memoria principal un bloque de palabras de tamaño
especificado en el campo nº de palabras, en orden ascendente de direcciones, empezando en
la dirección especificada en el campo dirección del dato.
Escritura: el canal transfiere datos de memoria principal al dispositivo. Las palabras se
transfieren en el mismo orden que en la operación de lectura.
Control: se utiliza esta orden para enviar instrucciones específicas al dispositivo de E/S,
como rebobinar una cinta magnética, etc.
Bifurcación: cumple en el programa de canal la misma función que una instrucción de salto
en un programa normal. El canal ejecuta las CCW en secuencia, salvo cuando aparece una
CCW de este tipo, que utiliza el campo dirección del dato como la dirección de la siguiente
CCW a ejecutar.
Flags Los bits de este campo indican lo siguiente:
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CC (Encadenamiento de comando): cuando este bit está a 1, indica al canal que la siguiente
CCW especifica una nueva operación de E/S que debe realizarse con el mismo dispositivo.
El canal ejecuta primero la operación de E/S especificada en la CCW que tiene a 1 el flag
CC. Después ejecuta la siguiente sobre el mismo dispositivo. Desde el punto de vista del
dispositivo, las dos operaciones resultantes de la primera y segunda CCW aparecen como
dos comandos de E/S separados.
CD (Encadenamiento de datos): una CCW con el bit CD a 1, indica al canal que la siguiente
CCW contiene una nueva dirección del dato y un nuevo nº de palabras. Éstos deben
utilizarse para transferir un segundo bloque de datos hacia o desde el dispositivo de E/S,
mediante la orden especificada por la CCW actual. Cuando el canal termina la transferencia
de datos especificada en la CCW con el bit CD a 1, no corta la conexión con el dispositivo de
E/S, continúa la transferencia utilizando la dirección y el nº de palabras de la siguiente
CCW. Con el encadenamiento de datos, los datos transferidos por la primera y segunda
CCW aparecen como un bloque para el dispositivo de E/S. Esto facilita las transferencias
entre un dispositivo y posiciones no contiguas de la memoria principal.
Para poner de manifiesto la diferencia entre encadenamiento de comandos y de datos veamos lo
que ocurre con una transferencia de dos bloques de datos de la memoria principal a una cinta
magnética. Si se utiliza encadenamiento de comandos, los dos bloques se escribirán en la cinta
separados por un separador de registros que la unidad de cinta inserta de forma automática al
final de una operación de E/S especificada por una CCW en donde CD = 0. En cambio, el
encadenamiento de datos provoca que los dos bloques se unan en un solo registro en la cinta. Una
CCW con los flags CD y CC a 0 significa el final del programa de canal.
SKIP (Salto): este bit, cuando está a 1, hace que el programa de canal salte un número de
palabras igual al especificado en el campo nº de palabras. Cuando se utiliza con la orden de
lectura, este flag hace que los datos se lean del dispositivo sin que se transfieran a la
memoria principal.
PCI (Interrupción controlada por programa): el canal produce una interrupción cuando ejecuta
una CCW con el flag PCI a 1. Si esta CCW va precedida por otra CCW con encadenamiento
de comandos, la interrupción se genera después de que hayan concluido todas las
transferencias de datos.
Ejemplo 1
En la siguiente figura se muestra un ejemplo de programa que transfiere tres bloques de
datos de la memoria principal a una cinta magnética. CCW1 lee 70 bytes de memoria, a partir de la
posición 2000, y los escribe en cinta. La operación de Escritura y la unidad de cinta a utilizar se
especifican en el campo de operación. Puesto que el bit CD está 1, CCW2 debe interpretarse como
una continuación de CCW1. Se realiza la misma operación de E/S, esto es, una Escritura en el
mismo dispositivo, pero con los datos especificados en CCW2. Obsérvese que en CCW2 no se
tienen en cuenta los bits de orden. Se transfieren a la cinta 100 bytes de memoria, a partir de la
posición 2.200, como continuación del registro iniciado con CCW1. En CCW2 el bit CC está 1, lo
que significa que sigue otra CCW (CCW3), pero que no está relacionada con la CCW2. Por lo tanto,
al finalizar CCW2, se inserta un espacio de separación de registros en la cinta. De nuevo, CCW3
especifica una Escritura en la misma cinta. El resultado es una transferencia a la cinta de 500
bytes a partir de la posición 2.500 de memoria. Puesto que los flags CD y CC valen cero, se trata
del final del programa de canal.
OPERACION
DIRECCION
FLAGS
CD CC SK PCI
Nº PALABRAS
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CCW1
CCW2
CCW3
ESCRITURA
ESCRITURA
2000
2200
2500
Memoria principal
1
0
0
0
1
0
0
0
0
0
0
0
70
100
500
Cinta magnética
CCW1
2000
70 bytes
registro
CCW2
separador
2200
registro
100 bytes
CCW3
2500
50 bytes
Ejemplo 2
En la siguiente figura aparece otro programa de canal que muestra el empleo del flag de
salto (SKIP). La primera CCW (CCW1) transfiere 80 bytes de la unidad de cinta especificada en el
campo de operación a la memoria, a partir de la posición 4.500. Puesto que CD = 1, CCW2 realiza la
misma operación. Sin embargo, como en CCW2 el flag de salto está 1, significa que el canal no
transmitirá los siguientes 30 bytes que lea de la cinta. Puesto que CD sigue 1, continúa la misma
operación de lectura con CCW3, provocando la transferencia de los siguientes 50 bytes a la
memoria, a partir de la posición 4.700. Por lo tanto, el programa transfiere dos bloques de datos a
la memoria principal desde un registro de la cinta, con un salto de 30 bytes a la mitad del registro.
OPERACION
CCW1
CCW2
CCW3
LECTURA
DIRECCION
4500
4700
FLAGS
CD CC SK PCI
1
0
0
0
1
0
1
0
0
0
0
0
Nº PALABRAS
80
30
50
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Memoria principal
4500
Cinta magnética
CCW1
80 bytes
80 bytes
registro
30 bytes
CCW2
4700
50 bytes
50 bytes
Inicio y control de los programas de canal
Hemos visto como se utilizan los programas de canal para realizar operaciones de E/S.
Estos programas residen en la memoria principal del computador y se ejecutan en el canal. Vamos
a examinar ahora la forma en que la CPU inicia y supervisa las operaciones de E/S, es decir, el
programa de canal. En el IBM S/370 existen cuatro instrucciones máquina que la CPU puede
utilizar para estos fines. Son las siguientes:
START I/O
Inicia una operación de E/S. El campo de dirección de la instrucción se
emplea para especificar el canal y el dispositivo de E/S que participa en la
operación.
HALT I/O
Finaliza la operación del canal.
TEST CHANNEL
Prueba el estado del canal.
TEST I/O
Prueba el estado del canal, el subcanal y el dispositivo de E/S.
Una operación de E/S se inicia con la instrucción START I/O. La ubicación del programa de
canal en la memoria principal viene definida en la palabra de dirección de canal (CAW: Channel A
ddress word), que siempre está almacenada en la posición 72 de la memoria principal.
Mem or ia pr in cipa l
72
CAW
P r ogr a m a de ca n a l
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La CAW debe cargarse, pues, en la posición 72 antes de la ejecución de la instrucción
START E/S. El dispositivo indica su disponibilidad para participar en la operación de E/S
devolviendo su dirección al canal. A partir de este momento el dispositivo permanece conectado al
canal hasta que finaliza la operación de E/S. Establecida la disponibilidad del dispositivo, el canal
envía una señal a la CPU. En este momento finaliza la instrucción START E/S, y la CPU deja de
ocuparse de la operación de E/S. Al finalizar la instrucción de START E/S, el canal comienza a
ejecutar el programa de canal.
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Tema 11: Dispositivos periféricos y buses de comunicación.
1. Dispositivos periféricos y controladores asociados
2. Buses de comunicación: síncronos y asíncronos
3. Arbitraje de acceso a los buses
4. Buses normalizados
1. Dispositivos periféricos y controladores asociados
Estudiaremos en este apartado los principios de funcionamiento de los principales dispositivos periféricos que se
conectan a un computador así como la estructura lógica de los correspondientes controladores.
1.1 Discos magnéticos
Los discos magnéticos se conectan al computador como dispositivos periféricos, aunque muchos forman parte de la
jerarquía de memoria del computador. Un dispositivo de discos magnéticos está constituido por una o más superficies
circulares recubiertas por un material ferromagnético sobre el que se puede grabar información alterando el sentido de la
magnetización de pequeñas áreas de su superficie. El conjunto de superficies gira por la acción de un motor. La
información se escribe y lee a través de un conjunto de cabezas (una por superficie) que se mueve radialmente de forma
solidaria por la acción de un motor paso-a-paso, tal como se muestra en la siguiente figura:
Cab eza d e
lect u r a y
escr it u r a
Su p er ficie
m agn ét ica
Mot or
pas o-a-pas o
Mot or
de gir o
1.1.1. Grabación de información sobre superficies magnéticas
Los materiales ferromagnéticos se caracterizan porque se magnetizan de forma permanente cuando se les aplica un
campo magnético externo. Normalmente el campo externo se genera eléctricamente. Esto no les ocurre a los materiales
diamagnéticos, que son repelidos por los campos magnéticos y no se magnetizan, ni a los materiales paramagnéticos, que
son atraídos por los campos magnéticos y tampoco se magnetizan. Un material ferromagnético se caracteriza por sus
curvas de magnetización e histéresis. Supongamos que el material ferromagnético está originariamente desmagnetizado
(punto a de la siguiente gráfica). Conforme se incrementa el campo magnético externo H, también se incrementa la
magnetización inducida M, hasta que se alcanza el valor de saturación (punto b). La curva entre los puntos a y b se
denomina curva de magnetización. Si ahora reducimos el campo externo, la magnetización inducida también se reduce,
pero no sigue la curva original. El material retiene una cierta magnetización permanente denominada magnetización
remanente, que persiste incluso cuando se anula el campo externo (punto c). Si reducimos aún más el campo externo
(sentido opuesto) podemos llegar a anular la magnetización remanente (Punto d), y si continúa la reducción se crea una
magnetización inducida de sentido opuesto, llegándose también en este caso a un valor de saturación (punto e). Si ahora
vamos reduciendo el campo externo hasta anularlo, el material queda con una magnetización remanente de sentido opuesto
a la anterior (punto f). Para anular esta magnetización remanente debemos aumentar el campo externo (con el sentido
1
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
original) hasta alcanzar el punto g, y si seguimos aumentando llegamos de nuevo a la saturación (punto b), con lo que se
completa el ciclo de histéresis. Los materiales ferromagnéticos tienen por tanto dos valores estables de magnetización, uno
norte, correspondiente al punto c de la gráfica y otro sur, correspondiente al punto f. Estos dos estados de magnetización
remanente que se mantienen en ausencia de campo externo son los que se utilizan para codificar la información binaria
cuando se utilizan los materiales ferromagnéticos como soporte de memoria.
M
c
d
e
b
a
g
H
f
Los procesos de lectura y escritura sobre las superficies ferromagnéticas de un disco (habitualmente de
óxido de hierro) se realizan a través de una cabeza de grabación compuesta por un núcleo de hierro en
forma de herradura y dos bobinas conductoras, una para escritura y otra para lectura. La cabeza opera muy cerca de
la superficie, de forma que casi vuela sobre ella, sobre el colchón de aire formado por su propio movimiento.
Debido a esto, están cerrados herméticamente, porque cualquier partícula de polvo puede dañarlos.
escr it u r a
lect u r a
cor r ien t e
t en sión
+
-
m ovim ien t o
Su per
m a gn
Escritura: Se hace pasar por la bobina de escritura una corriente que crea un campo magnético en el
núcleo de hierro que se cierra a través de la pequeña región de la superficie magnética que en ese momento
está bajo la cabeza, dejando una magnetización remanente del mismo sentido que el campo de la bobina.
Lectura: Se mueve la superficie magnética previamente grabada por debajo de la cabeza. Cada variación
de flujo producida por las pequeñas áreas magnetizadas inducirá una pequeña tensión en la bobina de
lectura. Amplificando e interpretando adecuadamente estas tensiones podemos reconstruir en forma de
señal eléctrica digital los valores grabados en la superficie del disco.
Los discos magnéticos actuales disponen de AUTOPARK o aparcamiento automático de las cabezas,
que posiciona las cabezas en un lugar fuera del alcance de la superficie del disco al apagar el ordenador.
Esto evita posibles daños en la superficie del disco cuando la unidad es sometida a vibraciones o golpes en
un posible traslado.
2
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1.1.2. Métodos de codificación sobre superficies magnéticas
Para grabar información en la superficie, se siguen una serie de códigos que transforman un patrón de
bits en una secuencia de celdas con diferentes estados de magnetización.
1) Retorno a cero (RZ: «return to zero»).
El 1 lógico se graba magnetizando el centro de la celda. El 0 es ausencia de magnetización
2) Retorno a saturación (RS: «return to saturation»).
El 1 se representa por un estado de magnetización en el centro de la celda. El resto de la celda y el 0 se representa con
el estado de magnetización opuesto.
3) Retorno a cero bipolar (BRZ: «bipolar return to zero»).
El 1 se representa por un estado de magnetización en el centro de la celda y el 0 por el estado de magnetización
opuesto, también en el centro de la celda. Los extremos de la celda quedan sin magnetizar.
4) Sin retorno a cero (NRZ: «non-return zero»).
El 1 se representa por un estado de magnetización en toda la celda y el 0 por el estado contrario, también en toda la
celda.
5) Sin retorno a cero inverso (NRZI: «non-return to zero invert»).
El 1 se representa por un cambio del sentido del flujo de magnetización en toda la celda respecto al estado de la celda
anterior. El 0 se representa por ausencia de cambio.
0
1
1
0
0
1
0
RZ
RS
BRZ
NRZ
NRZ1
6) Codificación en fase (PE: «phase encoding»).
El 1 se representa por un cambio y el 0 por el cambio contrario. Estos cambios se realizan en el centro de la celda. Para
poderse detectar dos ceros o dos unos seguidos, es necesario efectuar también un cambio al comienzo del segundo.
7) Modulación de frecuencia (FM: «frequency modulation»).
Es la codificación más sencilla, consiste en la grabación de un cambio de flujo para cada uno, y el
omitir el cambio de flujo para cada cero. Es decir, siempre se produce un cambio al comienzo de la celda, en
el centro se producirá un nuevo cambio de magnetización si y sólo si se graba un 1. Este procedimiento se
puede realizar con una electrónica de control relativamente simple, pero tiene el inconveniente de que
cada bit de datos consume dos cambios de flujo, limitando mucho la capacidad del disco
8) Coeficiente de pulso (PR: «pulse ratio»).
3
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La celda tiene un primer intervalo de longitud RI en un estado de magnetización, y el segundo intervalo, de longitud
R2, en el estado contrario. El 1 se representa por un pulso tal que Rl/R2 < 1, y el 0 por un pulso tal que R1/R2 > 1.
9) FM modificada (MFM: «modifed FM»).
Similar a FM excepto que el cambio de estado al inicio de la celda se efectúa sólo si el bit precedente y actual son
ambos 0.
10) Modulación de frecuencia modificada-modificada (MIFM: «modified-modified FM).
Igual que FM pero sólo se efectúa el cambio de estado al comienzo de la celda si la celda anterior no contiene ningún
cambio (ni al principio ni en el centro), y la celda actual no es un 1 .
0
1
1
0
0
1
0
PE
FM
PR
MFM
2
M FM
1.1.3. Formato de grabación
Los datos en un disco magnético se organizan en un conjunto de anillos concéntricos sobre el plato denominados
pistas. Las pistas adyacentes están separadas por bandas vacías. Esto minimiza los errores debidos a falta de alineamiento
de la cabeza o a interferencias del campo magnético. Para simplificar la electrónica, se suele almacenar el mismo número
de bits en cada pista. Esto significa que la densidad en bits es mayor en las pistas más internas.
Los datos se transfieren en bloques y se almacenan en regiones del tamaño de un bloque, conocidas como
sectores. Normalmente hay entre 10 y 100 sectores por pista, y estos pueden ser de longitud fija o variable. Los sectores
adyacentes se separan con regiones vacías. El disco se graba con un formato que contiene algunos datos extra, usados sólo
por el controlador del disco y no accesibles al usuario. En la siguiente figura se puede ver la disposición de los datos:
4
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
sect or es
pist a s
Sepa r a ción
in t er bloqu es
Ba n da de
sepa r a ción
de pist a s
En la siguiente figura se muestra un ejemplo del formato de grabación de un disco. En este caso, cada pista
contiene 30 sectores de longitud fija, de 600 bytes cada uno. Cada sector contiene 512 bytes de datos, junto con la
información de control utilizada por el controlador del disco. El campo ID es un identificador único, o dirección, usado
para localizar un sector particular. El byte SINCRO es un patrón de bits especial que delimita el comienzo del campo. El
número de pista identifica cada pista. El número de cabeza identifica una cabeza, si el disco tiene varias superficies. El ID y
los campos de datos contienen, cada uno, un código de detección de errores de redundancia cíclica (CRC) que
estudiaremos en el apartado siguiente.
pist a
...................
Ga p (17 byt es)
Sect or i
ID
.................................
Ga p (41 yt es)
30 sect or es
Da t os (41 byt es)
Ga p (20 byt es)
iden t ifica dor
Sin cr o
Byt es
Nº pist a
1
2
Byt es
Nº ca beza
1
Nº sect or
CRC (er r or es)
1
2
Sin cr o
Da t os
1
512
CRC (er r or es)
2
Existen procedimientos para aumentar la capacidad del disco colocando más sectores sobre las
pistas exteriores que son más largas, manteniendo constante la velocidad de rotación. El sistema ZBR
(Zone Bit Recording) es un ejemplo que requiere el uso de controladores más complejos..
5
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Un parámetro a tener en cuenta en el funcionamiento de un disco es el tiempo medio entre fallos,
MTBF (Mean Time Between Failures), que se mide en horas (15000, 20000, 30000..). Cuanto mayor sea
este parámetro mayor será la fiabilidad del disco.
1.1.4. Comprobación de Redundancia Cíclica (CRC)
Los códigos de comprobación de redundancia cíclica (CRC) se utilizan fundamentalmente en dispositivos de
tratamiento serie de la información. El emisor genera a partir de un mensaje de k-bits que se quiere transmitir una
secuencia de n-bits, denominada secuencia de comprobación (FCS: frame check sequence), que concatena con el anterior
para formar el mensaje realmente transmitido, con n+k bits. El FCS se elige de manera que el mensaje transmitido sea
divisible por algún número predeterminado. El receptor dividirá el mensaje recibido por ese número, y si el resto de la
división es cero significa que no ha habido errores en la transmisión.
Aritmética
La aritmética que se utiliza en las operaciones CRC es módulo 2, de acuerdo con las reglas de la teoría de campos
algebraicos. Es decir, no existen acarreos para la suma ni préstamos para la resta. Tanto la suma como la resta resultan pues
idénticas a una O-exclusiva:
Suma
1111101
+ 0101001
---------1010100
Resta
1101101
- 0101001
---------1000100
Multiplicación
1111101
x
11
---------1111101
1111101
---------10000111
División
1111101
11 Å Cociente
---------10000111 Å Dividendo
1111101
------1111101
1111101
------0 Å Resto
Divisor
Codificación
M = mensaje de k bits original que se desea transmitir
F = n bits de la secuencia de comprobación (FCS)
T = mensaje de (k + n) bits que se transmite, con n < k
P = patrón de n + 1 bits: divisor elegido
Es evidente que multiplicar M por 2n equivale a desplazar hacia la izquierda n bits, introduciendo ceros por la derecha. Por
tanto la operación de concatenación de M con F para dar T podemos expresarla de la siguiente forma:
T = 2n M + F
El objetivo es escoger F de tal manera que T sea divisible por P. Como:
2n M
R
------ = Q + -P
P
Siendo Q el cociente y R el resto. Por tanto haremos:
F= R
T = 2n M - R = 2n M + R
Ya que la suma y resta coinciden en aritmética módulo 2.
6
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Ejemplo
Emisor
Mensaje original a transmitir
Patrón
FCS
M = 1010001101 (10 bits)
P = 110101 (6 bits)
R = resto de la división de 2nM entre P
2nM = 25M = 101000110 00000
1101010110 Å Q
--------------P Æ110101
101000110100000 Å 2nM
110101
-----111011
110101
-----111010
110101
-----111110
110101
-----101100
110101
-----110010
110101
-----01110 Å R
El resto se suma a 2nM para formar T
T = 2nM + R = 101000110 01110
Que es el mensaje o trama que se transmite
Receptor
Si no hay errores el receptor recibe el mensaje transmitido por el emisor y calcula el resto de la división
por P:
1101010110 Å Q
--------------P Æ110101
101000110101110 Å 2nM
110101
-----111011
110101
-----111010
110101
-----111110
110101
-----101111
110101
-----110101
110101
-----0 Å R
Como el resto es cero se sabe que no ha habido errores.
7
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Representación de los errores
Si se produce un error en la transmisión de un bit del mensaje significa que si en origen valía 0 en
destino vale 1, y viceversa. Por tanto la representación de cualquier error (simple o múltiple) podemos
hacerla con una cadena de bits E de longitud igual al mensaje transmitido, con valor 1 en aquellas
posiciones de bit en las que se haya producido un error. El mensaje recibido Tr tendrá pues la siguiente
expresión en términos del mensaje transmitido T y el error producido E :
Tr = T ⊕ E
Si T = 11000111 y se ha producido un error en el tercer bit por la derecha, es decir, E = 00000100,
entonces Tr = (11000111) ⊕ ( 00000100 ) = 11000011
Evidentemente el receptor fallará en la detección de un error si y solo si Tr es divisible por P, lo
que equivale a decir que E sea divisible por P.
Interpretación polinómica de de los códigos CRC
Los patrones de bits podemos representarlos como polinomios de una variable anónima X con
coeficientes 0 ó 1. Los coeficientes corresponderán con los bits de la configuración binaria del patrón.
Así, si M = 110011, M(X) = X5 + X4 + X + 1. Las operaciones aritméticas siguen realizándose en
módulo 2. El polinomio correspondiente al mensaje que se transmite en código CRC vendrá dado por:
T(X) = XnM(X) + R(X) donde R(X) es el resto de la división de XnM(X) entre P(X),
es decir:
XnM(X) / P(X) = Q(X) + R(X) / P(X)
Errores
Al recibir el mensaje Tr(X) el receptor lo divide por P(X).
Error simple: si ha habido un error en un solo bit, E(X) = Xi donde i determina la posición del error. Si
P(X) contiene el factor X+1, E(X) nunca será divisible por P(X), por lo que detectarán los errores
simples.
Errores dobles: en este caso E(X) = Xi +Xj, donde i > j. Esto también se puede escribir como E(X) = Xj
(Xi-j + 1). Si suponemos que P(X) no es divisible entre X, una condición suficiente para detectar todos
los errores dobles es que P(X) no sea divisor exacto de (Xk + 1) para ningún k hasta el valor máximo de
i – j, es decir, hasta la longitud máxima del mensaje. Se conocen polinomios sencillos de bajo grado que
dan protección a mensajes largos. Por ejemplo, X15 + X14 + 1 no dividirá exactamente a (Xk + 1) para
ningún valor de k < 32.768.
Errores en ráfaga: un error en ráfaga comienza y finaliza en 1, y entre ambos 1’s hay 0’s y 1’s. Para un
error en ráfaga de longitud k, el polinomio tendrá la forma: Xi(Xk-1 + …+), donde i determina la
distancia a la que se encuentra la ráfaga desde el extremo derecho del mensaje recibido. Si P(X)
contiene un término X0, no tendrá a Xi como factor, por lo que, si el grado de (Xk-1 + …+) es menor que
el grado de P(X), el residuo nunca puede ser cero. Si la longitud de la ráfaga es r+1, el residuo de la
división entre P(X) será cero si y solo si la ráfaga es idéntica a P(X). Por la definición de ráfaga, el
primero y último bits deben ser 1, así que el que sean iguales o no depende de los r – 1 bits
intermedios. Si se consideran igualmente probables todas las combinaciones, la probabilidad de que se
acepte como válido el mensaje recibido de de 1/2r-1
8
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Polinomios generadores estándar
CRC-12
=
X12 + X11 + X3 + X2 + X1 + X0
CRC-16
=
X16 + X15 +
CRC-CCITT
=
X16 + X12 + X5
CRC-22
=
X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0
X2
+ X0
+ X0
Implementación hardware
La generación y detección CRC se implementa con un circuito divisor compuesto por puertas Oexclusiva y un registro de desplazamiento. El registro contiene tantos bits como el FCS, es decir, n, y n1 puertas O-exclusiva. Cada puerta O-exclusiva se ubica a la entrada de un biestable correspondiente
a un monomio de coeficiente 1, salvo Xn.
Para el divisor del ejemplo, 110101, cuyo polinomio asociado es
X5 + X4 +
X2
+ X0
El divisor tendrá la siguiente forma:
⊕
C4
X5
C3
X4
⊕
C2
X3
C0
C1
X2
X1
⊕
Bits de entrada
X0
Sobre este circuito podemos seguir el proceso de generación CRC del ejemplo anterior, para el
mensaje
M = 1010001101:
Inicial
Paso 1
Paso 2
Paso 3
Paso 4
Paso 5
Paso 6
Paso 7
Paso 8
Paso 9
Paso 10
Paso 11
Paso 12
Paso 13
Paso 14
Paso 15
C4
C3
C2
C1
C0
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
0
0
0
0
0
1
0
1
1
1
1
1
1
0
1
0
1
0
0
0
1
0
1
1
1
1
1
1
0
1
0
1
0
0
0
1
0
1
0
0
1
0
1
1
1
1
0
1
1
0
1
0
1
0
0
1
0
1
1
1
1
0
1
1
0
C4 ⊕ C3
0
0
0
0
1
1
0
1
0
1
0
1
1
0
0
1
C4 ⊕ C1
0
0
1
0
1
1
1
1
1
1
0
1
0
1
1
1
C4 ⊕ entrada
1
0
1
0
0
1
0
1
1
1
1
0
1
1
0
0
entrada
1
0
1
0
0
0
1
1
0
1
0
0
0
0
0
0
mensaje
a enviar
cinco ceros
añadidos
9
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1.1.5. Parámetros de rendimiento de un disco magnético
Tiempo de búsqueda (Ts): tiempo que tarda la cabeza en posicionarse en la pista. Se compone de dos partes, el
tiempo de comienzo s o tiempo necesario para que la cabeza adquiera una cierta velocidad radial, y el tiempo necesario
para atravesar las pistas que preceden a la que se accede, que no es una función lineal del número de pistas atravesadas.
Sin embargo podemos aproximar Ts con la siguiente expresión:
Ts = m * n + s
donde:
n = número de pistas atravesadas
m = constante que depende del disco
En un disco barato de PC m puede tener un valor de 0,3 ms y s de 20 ms; mientras que en un disco más caro m puede tener
un valor de 0,1 ms y s de 3 ms
Retardo rotacional (Tr): tiempo que tarda el sector en alcanzar la cabeza. Si r es la velocidad angular del disco
en revoluciones/segundo (rps), la expresión del valor medio de Tr será la siguiente:
Tr = 1/2r
En discos duros que giran a 3.600 rpm, una revolución tardará 16,7 ms, y el valor medio del retardo rotacional será 8,3 ms.
En cambio los disquetes que giran entre 100 y 600 rpm tienen un retardo rotacional medio que va de 100 a 200 ms.
Tiempo de acceso (Ta): es la suma del tiempo de búsqueda y el retardo rotacional
Ta = Ts + Tr = m * n + s + 1/2r
Tiempo de transferencia (Tt): tiempo que tardan en transferirse los datos a ó desde el disco una vez accedido el
inicio de los mismos. Dependerá de la velocidad de rotación del disco:
Tt = b/rN
donde:
b = número de bytes a transferir
N = número de bytes de una pista
r = velocidad de rotación en rps
Tiempo de operación (To): es la suma de las componentes anteriores, es decir:
To = m * n + s + 1/2r + b/rN
En un computador que funciona bajo control de un SO, para realizar una operación de E/S, a estos tiempos habrá
que añadir el tiempo de espera por un canal, si el disco no dispone del suyo propio, y el tiempo de espera en la cola hasta
que el dispositivo esté disponible.
Comparación de tiempos en acceso secuencial y aleatorio
Ts = 20 m s
Velc. Tr a n sfe. = 1 MB/s
Sector = 512 B
P ist a = 32 sect or es
Ar ch ivo de 128KB = 256 sector es
1 Acceso secuencial
8 pistas adyacentes (256 sectores / 32 sectores/pista = 8 pistas)
10
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Acceso a la primera pista = Ts + Tr + Tt(1 pista)
Ts = 20 ms
Bytes / pista = 512*32 = 16.384
Tiempo / pista = 16.384 / 1000.000 = 0,016384 s.
Tr = 0,016384 / 2 = 0,008192 = 8,192 ms
Tt(1 pista) = 0,016384 s. = 16,384 ms
Acceso a la primera pista = Ts + Tr + Tt(1 pista) = 45 ms.
Acceso a las restantes 7 pistas = 7 * (Tr + Tt(1 pista) ) = 7*(8,192 + 16,384 = 7 * 25 = 220 ms.
2 Acceso aleatorio
Acceso a un sector = Ts + Tr + Tt(1 sector) = 20 + 8,3 + 512/1000000 = 28,8 ms.
Acceso a 256 sectores = 256 * 28,8 = 7.372 ms
Existen una serie de técnicas que permiten aminorar los accesos a disco así como acelerar las
transferencias de datos entre el sistema y el dispositivo. Una de las más conocidas es la utilización de
memorias intermedias, buffers o cachés.
Buffer de Pista: Es una memoria incluida en el controlador del disco, que almacena el contenido de una
pista completa. Así cuando se hace una petición de lectura de una pista, esta se puede leer de una sola vez,
enviando la información a la CPU.
Cachés de Disco: Pueden estar dentro del propio disco duro, en tarjetas especiales o bien a través de
programas utilizando la memoria central. La gestión de esta memoria es completamente transparente y
consiste en almacenar en ella los datos más pedidos por la CPU y retirar de ella aquellos no solicitados en
un determinado tiempo.
1.1.6. Dispositivo floppy
El dispositivo floppy disk fue introducido por IBM en 1967. La primera versión tenía un tamaño de 8
pulgadas y se redujo a 5.50 pulgadas en la segunda con 360 KB, que se utilizó en el primer IBM PC en
1981. Posteriormente apareció la versión de 3.25 pulgadas con 1.44 MB. El floppy utiliza una fina capa de
material plástico recubierta de óxido de hierro (material ferromagnético)
Estructura de bloques del dispositivo
Como puede verse en el esquema de la siguiente figura, un dispositivo floppy dispone de los
siguientes elementos:
•
Mecanismo de cabeza: una sola cabeza para lectura y escritura, y otra para borrado inmediatamente antes de la
escritura. La cabeza es accionada por un motor paso-a-paso que le permite posicionarla radialmente en una
cualquiera de las pistas del floppy. También dispone de un mecanismo de elevación de la cabeza que se utiliza
para evitar el rozamiento con la superficie cuando se mueve radialmente.
•
Motor de giro: hace girar el diskette a una velocidad de 300 ó 369 revoluciones por minuto.
•
Detector de la pista cero: que el dispositivo utiliza como referencia para desplazar la cabeza a la pista adecuada.
•
Detector de inicio de pista: fotodetector que genera una señal cada vez que se inicia una nueva revolución de
giro.
11
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Pu lso
Dir e cción pu lso
E le va ción ca be za
Con tr ol
G ir o m otor
Re loj
Da tos le ctur a
Da tos e scr itu r a
Le ctu r a
Y
E scr itu r a
Motor
de Giro
Cabeza l/e
Motor
P aso-a-paso
Listo
Pr otección e scr i.
Detector
de pista 0
E sta do
In dice
fotocélula
Pista 0
Tod
os los elementos del dispositivo son accionados y supervisados desde la circuitería de Control,
Lectura/Escritura y Estado a través del controlador del dispositivo.
Formato de datos
marca
pista
sector
longitud
sector
CRC
sector
ID
marca
inicio
pista
marca
Campo de Datos
128 bytes de datos
CRC
índice
12
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Estructura y funcionamiento del controlador de dispositivo
La estructura del controlador del floppy disk se representa en la siguiente figura:
Regist r o de Or den es
Bu ffer
de
Da t os
Regist r o de E st a do
Regist ro de Sector
Cir cu itos
de
Ada pt a ción
y
Con t r ol
Regist ro de P ist a
CP U
Regist r o de Da tos
Lógica
de
Selección
y
Con t r ol
D IS CO
Regist ro de Despla za m ien to
R. de Com pen sa ción y Sa lida
Consta de los siguientes elementos:
Registro de pista contiene el número de pista sobre el que se encuentra en cada momento la cabeza.
Registro de estado codifica la información de estado del dispositivo: disponible,….
Registro de Ordenes almacena la orden recibida por la unidad de E/S. Entre otras dispone de las siguientes:
‰
‰
‰
‰
Búsqueda de pista
Búsqueda de sector
Lectura de sector
Escritura de sector
Analicemos las acciones que tienen lugar en el dispositivo durante la ejecución de la primera de estas órdenes.
Búsqueda de pista
El registro de pista se inicializa a 0 cuando se enciende el motor de giro y se activa el detector de pista 0. Una vez
que el módulo de E/S ha puesto la orden de Búsqueda de pista sobre el Registro de Ordenes, carga en el Registro de Datos
el número de la pista a buscar y comienza la operación. Se comparan los registros de Datos y Pista. Si sus contenidos
coinciden, la cabeza se encuentra en la pista buscada, y la operación finaliza con una interrupción después de desactivar la
señal de Elevación de cabeza y transcurrir un retardo de tiempo para el asentamiento de la cabeza. En caso contrario se
envía un pulso al motor paso-a-paso de la cabeza con la dirección adecuada (dependiendo del resultado menor o mayor de
la comparación) a fin de desplazarla a la pista contigua. Después se actualiza el Registro de Pista y se vuelve a comparar.
13
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
R.Da t os Å n º de pist a
<R.Da tos> : <R.P ist a >
>
Pu lso Å Π
Dirección pu lso Å 1
R.P ist a Å <R.P ist a> + 1
=
E levación cabeza Å 0
Ret a r do( a sen t a m ien to de la ca beza )
In t err u pción
<
P u lso Å Π
Dir ección pu lso Å 0
R.P ist a Å <R.P ist a> - 1
1.2 Discos ópticos
Se trata de dispositivos para el almacenamiento de información cuya lectura se realiza por medios ópticos. Existen
diferentes tipos, siendo los más importantes el CD-ROM (Compact Disc ROM) y el WORM(Write Once, Read Many
times).
1.2.1. CD-ROM
La información se almacena en forma de hoyos (pits) y salientes (bumps), grabados mecánicamente sobre un
substrato de aluminio brillante, y son leídos por medio de un láser que se refleja con diferente dirección en los hoyos que
en los salientes.
0,5 micras
1,6 micras
Etiqueta
Capa protectora
Capa aluminio
Base de
policarbonato transparente
El proceso de escritura (grabación) sigue los siguientes pasos:
•
•
•
•
•
La información se codifica usando un código de canal con el que cada byte (ASCII) queda representado por 14 bits y
se graba en una cinta magnética
La cinta es leída por un grabador de moldes para controlar un modulador óptico de un láser de potencia.
El láser se enfoca sobre la superficie fotosensible que recubre el disco molde (que es de cristal).
Mediante un proceso análogo al utilizado en la fabricación de CIs se revela el disco.
Las zonas de la superficie fotosensible que han sido expuestas a la luz se convierten en hoyos, resultando un relieve
exactamente igual al que tendrán los CD-ROM.
14
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
•
•
Del molde original se obtienen varios discos denominados matrices, que son copias en negativo de los discos
definitivos.
Con las matrices se obtiene la capa de aluminio de CD-ROM.
Finalmente se aísla del exterior, emparedándola entre la capa protectora superior y la base inferior de plástico
Con los CD-ROM se consiguen una densidad de grabación de 16.000 pistas/pulgada (t/i) muy superior a la de los discos
magnéticos (los disquetes 96 t/i.
El proceso de lectura sigue los siguientes pasos:
•
•
•
•
•
Se utiliza un haz de luz generado por un diodo láser de arseniuro de galio, que una lente enfoca sobre la superficie de
la base de plástico, convirtiéndose en un punto de 1 micra.
El enfoque no se realiza sobre la superficie externa de la base de plástico, sino sobre el aluminio, por lo que las
partículas de polvo o rayados del exterior del disco apenas afectan a su lectura.
La lectura se efectúa con un fotodetector que mide la cantidad de luz reflejada (genera una corriente proporcional a la
radiación recibida).
Cuando la luz incide sobre los bordes de los hoyos se desvía, de forma que apenas vuelve nada hacia el objetivo,
obteniéndose así un "1".
Cuando el haz incide sobre la superficie plana de hoyos y salientes se refleja casi sin desviación, captándose en el
detector prácticamente la totalidad del haz, obteniéndose así un "0".
10000010010000000000001000000010000001
Base de
laser de lectura
(lee 1)
laser de lectura
(lee 0)
Codificación de la información
A nivel lógico la información se organiza en bloques (sectores) de 2.352 bytes, con el formato que aparece en la siguiente
figura:
bytes
00
FF
12
4
Sincronismo
ID
FF
2.048
288
Datos
FF
00
ECC
Minuto
Segund.
Sector
Modo
A nivel físico
Los 1's se representan por el cambio de hoyo a saliente y los 0's por las superficies de los hoyos y salientes. Cada
0,3 micras de hoyo o saliente a lo largo de la pista corresponde a un 0. La longitud mínima físicamente posible para hoyos
y salientes es de 0,6 micras, lo que exige que 2 1's deben estar separados como mínimo por 2 0's. Por eso cada byte de
datos se codifica con 14 bits de canal, según la siguiente tabla:
15
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Codificación EFM
(Eight to Fourteen Modulation)
Byte
0000 0000
0000 0001
0000 0010
0000 0011
Código de canal
01 0010 0010 0000
10 0001 0000 0000
10 0100 0010 0000
10 0010 0010 0000
0000 0100
0000 0101
0000 0110
0000 0111
.........
01 0001 0000 0000
00 0001 0001 0000
00 0100 0010 0000
00 1001 0000 0000
.................
los 2.352 bytes de cada sector se estructuran en tramas. Cada trama contiene 24 bytes de sector.
588 bits
byte de sector 1
byte de sector i
byte de sector 24
bits
1 byte de sector
bits
sincronización
datos
sep
14
3
24
sep
control
8 ECC
3
17
136
Un sector queda representado por 98 tramas
Bits de canal de un sector = 588 bits/trama * 98 tramas/sector = 57.624 bits
Luego los
2.048 bytes = 16.388 bits de datos de usuario
ocupan
2.352 bytes = 18.816 bits de datos lógicos
y
57.624 bits físicos de canal.
1.2.2. DVD (Digital Versatil Discs)
Constan de varias capas de información sobre una misma cara del disco separadas por materiales
que permiten el acceso selectivo a cada capa por medio de láseres con diferentes propiedades de reflexión.
Base de
Base de
1.2.3. WORM (Write Once, Read Many times)
16
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Son unidades de discos ópticos similares a los lectores de CD-ROM, pero que contienen un láser de potencia, de
forma que en la propia unidad se puede efectuar la grabación del disco.
1.3 Discos magnetoópticos o WMRA (Write Many, Read Always)
Proceso de escritura:
•
•
Los discos vírgenes son previamente magnetizados, es decir, escritos todo a 0's, magnetización norte, o todo a 1's,
magnetización sur.
En la fase de escritura se realizan dos acciones:
1.
Toda la superficie del disco se somete a un campo magnético uniforme, de sentido contrario al de magnetización
inicial, y de intensidad no suficiente para alterar el estado de magnetización inicial de cada celda.
2.
Simultáneamente se hace incidir un láser de unos 40 mW de potencia sobre las celdas en las que hay que escribir
un valor distinto al inicial. De esta forma la celda se calienta cerca de su punto de Curie, con lo que cambia el
sentido de magnetización inicial de la celda.
magnetización inicial
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
láser de escritura
↑
↑
↑
↑
↑
↓
↑
↑
↑
↑
↑
↑
campo magnético externo
Proceso de lectura:
•
El proceso de lectura se funda en el efecto Kerr, que consiste en que el plano de polarización de un haz de luz gira en
un sentido u otro, según el estado de magnetización de la superficie en la que se refleja. La lectura se realiza con un
láser de unos 10 mW de potencia, que incide secuencialmente sobre las celdas del disco que se van a leer, captándose
la luz reflejada en un fotodetector después de haber pasado por un analizador óptico.
17
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
fotodetector
láser de lectura
↑
↑
↑
↑
↑
↓
↑
↑
↑
↑
↑
↑
fotodetector
láser de lectura
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
Proceso de regrabación
• Para volver a escribir sobre un disco previamente escrito se procede en primer lugar al borrado de todas las celdas
que contengan un sentido de magnetización distinto al inicial. Para ello se aplica un campo magnético externo de
sentido igual al inicial y con la suficiente intensidad para invertir el sentido de magnetización de cualquier celda
que no coincida con el del campo externo.
La capacidad de este tipo de discos va de 0.5 a 1 GB y una velocidad de transferencia de unos 150 KB/s con tiempo de
acceso de 300 ms.
1.4 Monitores de tubo de rayos catódicos (CRT)
Existen dos tipos de monitores basados en tubos de rayos catódicos, los caligráficos y los de barrido o raster. Los
primeros generan la imagen haciendo que un haz de electrones trace sobre la superficie fosforescente de la pantalla la
forma de la figura que se quiere visualizar. Los de barrido componen la imagen sobre un conjunto de líneas paralelas
horizontales, inhibiendo o no el haz en el momento que pasa por los diferentes puntos de la pantalla.
1.4.1. Principios de funcionamiento
En la siguiente figura se han representado los componentes principales de un monitor monocromo (blanco y
negro) de tubo de rayos catódicos (CRT) que utiliza la técnica de barrido. El componente básico es el tubo de rayos
catódicos que incluye un cañón que produce un haz de electrones. Cuando los electrones pasan a través del campo
magnético producido por la bobina de deflexión montada en el cuello del tubo, sufren una desviación en función del valor
del campo magnético. Cuando los electrones alcanzan la superficie interna del tubo, cubierta de una capa de material
fosforescente, se ilumina el punto de incidencia.
La pantalla mantiene la imagen refrescándola periódicamente a una frecuencia suficiente para la persistencia de la
retina. La técnica de barrido utilizada por la mayoría de los monitores es análoga a la utilizada por los aparatos de
televisión. Las señales que actúan sobre la bobina de deflexión son generadas por dos osciladores, uno actuando sobre la
componente horizontal y el otro sobre la vertical. Los osciladores son sincronizados por señales externas, HSYNC para la
sincronización horizontal, y VSYNC para la vertical, después se amplifican antes de entrar en la bobina. La señal de VIDEO
controla la intensidad del haz de electrones, y por tanto la iluminación de los puntos de la imagen sobre la pantalla.
18
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Cañón de electrones
HSYNC
OSCILADOR
HORIZONTAL
AMPLIFICADOR
HORIZONTAL
H
VIDEO
AMPLIFICADOR
DE VIDEO
CRT
VSYNC
OSCILADOR
VERTICAL
AMPLIFICADOR
VERTICAL
V
Bobina de deflexión
Capa de fósforo
Los monitores de color tienen una organización similar pero utilizan un cañón de electrones para cada uno de los tres
colores básicos. Cada punto de la pantalla, píxel, está compuesto por tres pequeñas áreas que se iluminan de rojo, verde y
azul cuando incide el correspondiente haz de electrones. La relación entre las tres intensidades de electrones produce la
correspondiente intensidad de los tres colores básicos para formar el color real de la imagen.
rojo
verde
azul
En la siguiente figura hemos representado la forma en que se realiza el barrido de una pantalla monocromo. El haz
de electrones comienza en la esquina superior izquierda y se mueve horizontalmente de izquierda a derecha. Cuando
completa la primera línea horizontal vuelve al flanco izquierdo para realizar el barrido de la segunda línea, al tiempo que el
haz sufre una pequeña deflexión vertical, en sentido descendente. de esta forma se genera un conjunto de líneas
horizontales paralelas hasta alcanzar la esquina inferior derecha. En este punto se dice que se ha completado un barrido
vertical o un marco. Después el haz de electrones vuelve a la esquina superior izquierda para repetir el proceso y así
refrescar la pantalla. El refresco se hace necesario para que la imagen aparezca persistente en la retina del usuario.
19
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1
2
3
4
5
6
7
Para producir el barrido descrito los osciladores horizontal y vertical deberán generar unas señales en forma de
diente de sierra, tal como las que se presentan en la figura siguiente:
H
1
2
3
4
5
6
7
tiempo
V
tiempo
VIDEO
tiempo
La señal de VIDEO controla la intensidad de iluminación del punto de barrido en cada instante, haciendo que se
dibuje la imagen sobre la pantalla, la letra A mayúscula en la figura. En este caso la intensidad la hemos considerado
binaria, presencia o ausencia de luz (blanco o negro). En realidad será un valor entero para graduar la escala de grises.
Si el refresco de la pantalla se realiza a razón de 60 marcos/segundo, corresponde a un intervalo de tiempo de
16.67 ms, de los cuales sólo 15,42 ms se consumen estrictamente en el barrido vertical, los restantes 1,25 ms se emplean en
el retorno vertical.
V
ms
15,42
barrido vertical
16,67
retorno vertical
Lo mismo le ocurre al barrido horizontal. Unos valores típicos para el barrido y el retorno son los que se muestran
en la siguiente figura:
20
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
H
µs
53,5
barrido horizontal
10
retorno horizontal
Con los valores anteriores, el número total de líneas de un marco será: 1.542 µs / 63,5 ≈ 242 líneas.
Sincronismo
Las señales de barrido horizontal y vertical tienen evidentemente que sincronizarse entre sí y con la señal de
VIDEO, que por simplicidad seguiremos considerando que es binaria. La sincronización del barrido horizontal y los pulsos
de video se muestra en la siguiente figura:
borrado horizontal
pulsos de vídeo
HSYNC
pulso de sincronismo horizontal
H
Algo equivalente ocurre para el sincronismo vertical:
intervalo de boorrado vertical
pulsos de VIDEO y HSYNC
hor
VSYNC
V
21
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1.4.2. Generación de caracteres
Para entender el funcionamiento de la lógica de temporización y control de la pantalla en el proceso
de visualización, consideraremos en primer lugar el caso aislado de generación de un carácter, la Z, que
constituye el primer carácter de una línea almacenada entre las direcciones dir_ini y dir_fin en la RAM de
refresco.
La codificación en mapa de bits de todos los caracteres visualizables se halla en una memoria
ROM, denominada Generador de Caracteres. En dir_ini se encuentra en realidad la codificación ASCII de
la Z, que se utilizará como puntero (dirección) al inicio de la zona de la ROM donde comienza la
codificación en mapa de bits de la Z.
HSYNC
VSYNC
LOGICA DE TEMPORIZACION Y CONTROL
dir_refresco
dir_línea
Reloj desplaz.
VIDEO
Registro de desplazamiento
(ROM)
(RAM)
carga
GENERADOR
DE
CARACTERES
MEMORIA
DE
REFRESCO
dir_ini
Z (en ASCII)
dir_fin
Código ASCII
utilizado como
puntero
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
0
0
1
0
1
1
0
0
1
0
0
1
1
0
1
0
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
línea 0
línea 1
línea 2
línea 3
línea 4
línea 5
línea 6
Para visualizar la Z tendremos que ir extrayendo de la ROM el valor binario de sus pixels, línea a
línea, llevando cada línea al Registro de Desplazamiento que controla la señal de VIDEO, es decir, la
presencia (1) o ausencia (0) de luz en la pantalla.
Hemos supuesto que la resolución de cada carácter, incluyendo los puntos de separación es de 8 x 7
= 56 pixels.
El proceso completo de refresco de la línea contenida entre las direcciones dir_ini y dir_fin de la
memoria de refresco lo hemos representado en el siguiente diagrama:
22
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
dir_refresco Å dir_ini
dir_ línea
Å0
REGISTRO DESPLAZAMIENTO Å ROM[RAM[dir_refresco] + dir_línea]
Despla. Derecha REGISTRO DESPLAZAMIENTO 8 posiciones
dir_línea Å dir_línea + 1
no
dir_línea > 6
si
no
dir_refresco Å dir_refresco + 1
dir._refresco
>
dir_fin
si
1.4.2. Controlador
La estructura del controlador completo de la pantalla de tubo de rayos catódicos la componen un conjunto de
contadores que actúan sobre la RAM de refresco, la ROM de generación de caracteres, el Registro de Desplazamiento que
controla la señal de VIDEO y la Lógica de Temporización.
Supondremos que la resolución de la pantalla es de 16 filas con 32 caracteres cada una, y cada carácter está
definido por una matriz de 7 x 10 puntos, tal como se muestra en la siguiente figura:
caracter 1
caracter 32
caracter 1
caracter 2
caracter 3
línea 1
ESTA ES UNA LINEA...
fila 1
32 X 16
línea 10
fila 16
columna 1
columna 7
El controlador actúa en sicronización con un Reloj que genera un pulso por cada píxel a visualizar. El Reloj actúa
sobre el Registro de Desplazamiento para marcar los instantes en que tiene que renovarse el punto de la línea en fase de
visualización.. También actúa de forma directa sobre el Contador de Puntos de cada línea de un carácter. En realidad este
contador opera como divisor de la frecuencia del Reloj para cargar el Registro de Desplazamiento con las sucesivas líneas
de todos los caracteres que se visualizan en la misma fila de la pantalla.
La salida del Contador de Puntos actúa sobre el Contador de Caracteres, que a su vez actúa sobre el Contador de
Línea de Puntos, que finalmente actúa sobre el Contado de Fila de Caracteres. Este funcionamiento en cascada de los 4
23
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
contadores va dividiendo la frecuencia del Reloj en los valores adecuados al recorrido de cada contador, que se
corresponden con la resolución de la pantalla:
Contador de Puntos Æ Puntos de cada fila de cada carácter (7)
Contador de Caracteres Æ Número de caracteres de una fila de la pantalla (32)
Contador de Línea de Puntos Æ Número de líneas de puntos de cada carácter (10)
Contador de Fila de Caracteres Æ Número de filas de caracteres de la pantalla (16)
caracter 1
HSYNC
Lógica de temporización
HSYNC, VSYNC, VIDEO
VSYNC
caracter 32
fila 1
ESTA ES UNA LINEA...
32 X 16
Contador de
fila de
caracteres
(÷16)
4
(RAM)
fila 16
VIDEO
5
7
Contador de
línea
de puntos
(÷10)
4
Contador de
caracteres
(÷32)
7
Retardo
Contador de
puntos
(÷7)
(ROM)
carga
Registro de desplazamiento
desplazamiento
Reloj
1.5 Pantallas de cristal líquido
El cristal líquido de tipo twisted nematic, inventado por Schald y Helfrich y mostrado por Fergason en 1971, representa la
primera aplicación con éxito de los cristales líquidos. Se basa en la regulación del paso de luz polarizada mediante cristal
líquido sometido a una tensión eléctrica.
Cuando la luz no polarizada pasa a través de un filtro polarizador, sólo se transmite un plano de polarización. Si se utilizan
dos filtros polarizadores juntos, la transmisión de la luz dependerá de su orientación relativa. Por ejemplo, cuando los
polarizadores se disponen de forma que sus planos de polarización son perpendiculares entre sí, la luz se bloquea. Pero
cuando el segundo filtro, llamado analizador, es paralelo al primero, la luz que pasa por el primer filtro pasa también a
través del segundo.
24
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
luz no polarizada
polarizador
luz polarizada
analizador
luz bloqueada
luz no polarizada
polarizador
luz polarizada
analizador
Luz polarizada
Una celda de cristal líquido twisted nematic está compuesta por:
•
•
•
•
Dos superficies de vidrio transparente cubiertas de un material conductor también transparente (oxido de
estaño) que actúa como electrodo
Un regulador de precisión del gap entre las dos superficies de la celda.
Dos polarizadores cruzados: el polarizador y el analizador
Material de cristal liquido nematic
Las superficies de los electrodos transparentes en contacto con el cristal líquido se recubren de una fina capa de polímero
que ha sido frotado en una dirección. Las moléculas de cristal líquido tienden a orientarse con sus ejes longitudinales
paralelos a esta dirección. Las superficies de vidrio se disponen de manera que las moléculas adyacentes al electrodo
superior se orienten formando un ángulo recto con el inferior. Cada polarizador está orientado con su plano de polarización
paralelo a la dirección de frotación del electrodo adyacente (de esta forma el polarizador y el analizador están cruzados).
En ausencia de un campo eléctrico el eje director del cristal líquido sufre un giro suave de 90º dentro de la celda. La luz no
polarizada entra al primer filtro polarizador y sale polarizada en el mismo plano que la orientación local de las moléculas
de cristal líquido. La disposición girada (twisted) de las moléculas de cristal líquido dentro de la celda actúan como guía
de las ondas luminosas y rotan el plano de polarización en un cuarto de giro (90º) de manera que la luz que alcanza el
segundo polarizador (analizador) puede atravesarlo. En este estado la celda de cristal líquido es transparente. Cuando se
aplica un voltaje a los electrodos, las moléculas de cristal líquido tienden a alinearse con el campo eléctrico resultante E, y
de esta forma se pierden su propiedad de guía de las ondas luminosas, bloqueándose el paso de la luz polarizada. Cuando
se desconecta el campo eléctrico, las moléculas tienden a adoptar de nuevo el estado girado (twisteado) y la celda se
convierte de nuevo en transparente.
25
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
luz no polarizada
polarizador
luz no polarizada
polarizador
luz polarizada
analizador
luz polarizada
luz polarizada
analizador
luz polarizada
1.5 Impresoras
1.5.1 Impresora de martillo
La impresora de martillos se ha utilizado mucho en aplicaciones que operan en ambientes
industriales, ya que su sencillez la hace muy robusta. Consta de un cilindro con el mismo carácter
repetido a lo largo de toda una generatriz, y tantas generatrices como caracteres imprimibles. También
dispone de una batería de martillos que se accionan eléctricamente, tantos como veces se repite el carácter
en una generatriz. Entre los martillos y el cilindro se desliza una cinta entintada y el papel. Cada
generatriz lleva asociada un pequeño imán en su extremo que genera un pulso cada vez que pasa debajo de
una pequeña bobina. También existe un imán asociado a todo el cilindro que genera un pulso al inicio de
una revolución. Con la información de los dos trenes de pulsos, el Control conoce en todo momento el
carácter que se halla debajo de la batería de martillos. Sólo tiene que accionar los martillos
correspondientes a las posiciones de la línea de escritura donde deba aparecer el carácter bajo los
martillos. En general la escritura de una línea requerirá una vuelta completa del cilindro.
26
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Control
martillos
bobina
imanes
cinta entintada
A A A A A A A A
B B B B B B BB
C C C C C C C C
papel
inicio de revolución
Amp
fila de caracteres
1.5.2 Impresora de chorro de tinta
La impresora de chorro de tinta utiliza un principio de funcionamiento análogo a las pantallas
caligráficas de rayos catódicos. Controla la desviación eléctrica que experimenta un chorro de tinta
ionizada para dibujar sobre el papel la forma deseada. En este caso la información de la forma a dibujar se
traduce en una diferente ionización del chorro de tinta para que se desvíe de la forma adecuada cuando
pasa por unos electrodos a potencial fijo en su camino hacia el papel. La ionización de la tinta se produce
en un electrodo de carga que se controla con la señal del carácter a imprimir.
La impresora dispone de un dispositivo para recoger la tinta no utilizada y devolverla al circuito de
alimentación de la cabeza que emite el chorro.
Las impresoras de inyección de tinta pueden producir texto e imágenes de alta calidad en blanco y
negro o color.
deflexión
vertical
electrodo
de carga
0 - 200 V
papel
3 kV
Control
bomba
Tinta
señal
forma
carácter
tinta no
utilizada
Filtro
27
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1.5.3 Impresora láser
El principio de funcionamiento de la impresora láser se asemeja al de la pantalla de barrido de
rayos catódicos. La imagen eléctrica a imprimir la forma un rayo láser sobre un cilindro recubierto de un
material fotoconductor giratorio cuya superficie se corresponde con la de la página impresa. El láser opera
generatriz tras generatriz. Cada generatriz del cilindro se corresponde con una línea de puntos de la
página. La imagen eléctrica se transforma en imagen real por la aplicación de un polvo de carbón
denominado toner. El cilindro impregnado de toner se transfiere a la página de papel con la ayuda del
calor y la presión.
Rayo Laser
Espejo
octogonal
rotatorio
Modulador
Emisor de
Laser
Rodillo de
arrastre
Toner
Cilindro
giratorio
Ratón
fotodetector
Contador
Y
Contador
X
fotodetector
28
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
2. Buses de comunicación
Un bus es un medio compartido de comunicación constituido por un conjunto de líneas (conductores) que conecta
las diferentes unidades de un computador. La principal función de un bus será, pues, servir de soporte para la realización
de transferencias de información entre dichas unidades. La unidad que inicia y controla la transferencia se conoce como
master del bus para dicha transferencia, y la unidad sobre la que se realiza la transferencia se conoce como slave. Los
papeles de master y slave son dinámicos, de manera que una misma unidad puede realizar ambas funciones en
transferencias diferentes. Por ejemplo, una unidad de DMA hace de slave en la inicialización que realiza el master, la CPU,
para una operación de E/S. Sin embargo, cuando comienza la operación, la unidad de DMA juega el papel de master frente
a la memoria, que en esta ocasión hace de slave.
Para garantizar el acceso ordenado al bus, existe un sistema de arbitraje, centralizado o distribuido, que establece
las prioridades cuando dos o más unidades pretenden acceder al mismo tiempo al bus, es decir, garantiza que en cada
momento sólo exista un master.
Para establecer el tiempo de duración de las transferencias y que sea conocido tanto por el master como por el
slave, un bus debe disponer de los medios necesarios para la sincronización master-slave.
2.1 Estructura de un bus
Las líneas de un bus podemos clasificarlas en grupos, atendiendo al papel que cumplen en las transferencias:
1. Líneas de información básica: las utiliza el master para definir los dos elementos principales de una
transferencia, el slave y los datos. Se dividen , pues, en dos grupos:
•
Líneas de Direcciones: determinan la unidad que hace de slave en la transferencia
•
Líneas de Datos: transportan los datos de la transferencia.
Existen buses con líneas independientes para cada uno de los anteriores tipos de información. En cambio en
otros se utilizan las mismas líneas multiplexadas en el tiempo.
2.
Líneas de control: transmiten las órdenes que determinan la operación de transferencia a realizar por las líneas
de datos y direcciones, y marcan el ordenamiento temporal de las señales que circulan por el bus. Las
primeras son las líneas de control propiamente dichas, de las que las más importantes son:
•
•
•
•
Escritura en memoria
Lectura de memoria
Operación de salida
Operación de entrada
Las segundas son las líneas de sincronismo, entre las que cabe citar las siguientes:
•
•
•
3.
Reconocimiento de transferencia
Reloj
Reset
Líneas de arbitraje: establecen la prioridad entre diferentes peticiones de acceso al bus. Por ejemplo:
•
•
•
Petición del bus
Cesión del bus
Ocupación del bus
29
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
CPU
Memoria
E/S
direcciones, datos
control
arbitraje
Las líneas de un bus podemos también clasificarlas en función de su direccionalidad:
‰
Líneas unidireccionales
• Emisor simple
control tri-state
•
Emisor múltiple
colector abierto
‰
Líneas bidireccionales
30
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
control tri-state
Desde el punto de vista físico un bus es un conjunto de conductores eléctricos paralelos dispuestos sobre una
tarjeta de circuito impreso. Los dispositivos del sistema se conectan a través de conectores (slots) dispuestas a intervalos
regulares a lo largo del bus.
T a rje ta
C o n e c to r
B us
La disposición anterior corresponde generalmente a los buses del sistema. Los denominados buses de
entrada/salida conectan las unidades a través de cables.
Los principales parámetros que caracterizan un bus son:
•
•
•
•
Ancho de banda: velocidad de transferencia medida en Mb/s
Anchura del bus: número de líneas que lo componen
Ancho de datos: número de líneas de datos
Capacidad de conexión: número de unidades conectadas al bus
2.2 Protocolos de transferencia
2.2.1 Síncronos
En los buses síncronos existe un reloj que gobierna todas las actividades del bus, las cuales tienen lugar en un número
entero de ciclos de reloj. La transferencia propiamente dicha coincide con uno de los flancos del reloj (el de bajada en el
ejemplo de la figura).
31
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
ciclo-1
ciclo-2
ciclo-3
Reloj
tiempo de establecimiento
Dirección
tiempo de mantenimiento
Datos
R/W
Escritura
Lectura
Escritura
En este caso hemos supuesto que el tiempo de acceso al slave es menor de un ciclo, es decir, en cada ciclo tiene lugar
una operación con memoria. Los buses síncronos son rápidos pero no tienen capacidad para conectar unidades con
velocidad de transferencia baja. o no conocida a priori.
2.2.2 Asíncronos
Los buses asíncronos utiliza un protocolo tipo handshaking para comunicarse el master con el slave.
En el siguiente diagrama se presenta el diálogo de señales que tiene lugar durante una transacción de lectura de
memoria por parte de la CPU utilizando un protocolo asíncrono (handshaking) sobre un bus que multiplexa las direcciones
y los datos sobre las mismas líneas (datos/dirección).
1) La CPU activa la señal de lectura al tiempo que coloca la dirección de la posición a leer en las líneas
datos/dirección.
2) La Memoria detecta la activación de lectura, lee la dirección que hay en datos/dirección y activa la señal de
reconocimiento para indicar que ha detectado la orden de lectura.
3) la CPU detecta la activación de reconocimiento y en respuesta desactiva la señal de lectura y libera las líneas
de datos/dirección.
4) La memoria detecta que se ha desactivado la señal de lectura y desactiva la señal de reconocimiento para dar
por terminado el reconocimiento de la orden de lectura.
5) Cuando la memoria ha accedido al dato y lo tiene preparado lo pone en datos/dirección y activa la señal de
dato disponible.
6) La CPU detecta que dato disponible está activa y procede a leer los datos del bus y activar la línea de
reconocimiento para indicar que ya dispone del dato.
7) La memoria detecta la señal de reconocimiento, desactiva dato disponible y libera las líneas de
datos/dirección.
8) Finalmente, la CPU al detectar que se desactiva dato disponible, desactiva, a su vez, la señal de
reconocimiento, indicando que la transmisión ha finalizado.
A partir de este momento se puede iniciar una nueva transacción.
32
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
lectura
datos/direccion
es
dato
dirección
reconocimiento
dato disponible
Tiempo de acceso a memoria
Un bus asíncrono trabaja igual que un par de máquinas de estados finitos que se comunican de tal forma que uno
de los autómatas no avanza hasta que sabe que el otro autómata ha alcanzado un determinado estado, es decir, los dos
autómatas están coordinados.
Los buses asíncronos se escalan mejor con los cambios de tecnología y pueden admitir una mayor variedad de
velocidades de respuesta en los dispositivos.
CPU
Memoria
dirección --> datos/dirección
Activar petición lectura
reconocimiento = 0
reconocimiento = 1
Liberar datos/dirección
Desactivar lectura
dato disponible = 1
dato disponible = 0
Memoria <-- datos/dirección
Activar reconocimiento
dato disponible = 0
dato disponible = 1
Desactivar reconocimiento
lectura = 0
lectura = 1
dirección <-- datos/dirección
Activar reconocimiento
lectura = 1
lectura = 0
Desactivar reconocimiento
Memoria --> datos/dirección
Activar dato disponible
reconocimiento = 0
reconocimiento = 1
Liberar datos/dirección
Desactivar dato disponible
2.2.3 Semisíncronos
En los protocolos semisíncronos existe, como en los síncronos, un reloj que gobierna las transferencias en el bus. Sin
embargo, en este caso existe, además, una señal de espera (wait) que es activada por el slave cuando la transferencia va a
durar más de un ciclo de reloj. De esta forma, los dispositivos rápidos operarán como en bus síncrono, mientras que los
lentos alargarán la operación el número de ciclos que les sea necesario.
33
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Reloj
Dirección
Datos
Espera
Escritura
asíncrona
Escritura
síncrona
Lectura
síncrona
Lectura
asíncrona
2.2.4 Ciclo partido
En los buses de ciclo partido la operación de lectura se divide en dos transacciones no continuas de acceso al bus. La
primera transacción es la de petición de lectura que realiza el master sobre el slave. Una vez realizada la petición el master
abandona el bus. Cuando el slave dispone del dato leído, inicia un ciclo de bus actuando como master para enviar el dato al
antiguo master, que ahora actúa como slave.
Dirección Slave
Dirección Master
Dirección
Master SYNC
Slave SYNC
Datos
dirección
Master Æ Slave
dato
Slave Æ Master
3. Protocolos de arbitraje
La demanda para utilizar el bus en un computador puede provenir de diferentes unidades, no sólo de la CPU. Por
ejemplo, si el computador tiene E/S por DMA, éste demandará el uso del bus cuando tenga el control de la operación
con la memoria. Los procesadores de E/S necesitan acceder al bus no sólo para realizar las transferencias de datos por
DMA, sino también para leer su programa de canal. Por supuesto, si el sistema es multiprocesador (más de una CPU
con memoria compartida) los candidatos al uso del bus aumentan.
Para garantizar que en todo momento sólo una unidad acceda al bus, se utilizan los protocolos de arbitraje. Los
protocolos de arbitraje organizan el uso compartido del bus, estableciendo prioridades cuando más de una unidad
solicita su utilización y garantizando, sobretodo, que el acceso al bus es realizado por un solo master.
Existen dos grupos de protocolos de arbitraje, los centralizados y los distribuidos. En los primeros existe una
unidad de arbitraje, el árbitro del bus, encargado de gestionar de forma centralizada el uso del bus. El árbitro puede ser
una unidad físicamente independiente o estar integrado en otra unidad, por ejemplo, la CPU. Por el contrario, en los
protocolos distribuidos no existe ninguna unidad especial para la gestión del bus. Esta se realiza de forma distribuida
entre las unidades de acceso.
Examinaremos en los siguientes apartados diferentes protocolos de arbitraje, tanto centralizados como
distribuidos.
3.1 Protocolo de encadenamiento (daisy chaining) de dos señales
Es el protocolo centralizado más sencillo ya que utiliza sólo dos señales encadenadas, una de petición del bus y
otra de concesión.
34
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El master que quiere acceder al bus activa la señal de petición (out) y los demás masters la propagan hasta el
árbitro. El árbitro activa la señal de concesión que es propagada por los masters que no solicitaron el acceso al bus. El
master que recibe la señal de concesión y tiene una petición pendiente toma el control del bus. Si un master recibe una
señal de petición mientras está accediendo al bus, bloquea su propagación al árbitro hasta que finalice la utilización del
bus.
La prioridad viene determinada por la proximidad al árbitro.
concesión
petición
in
out
in
out
M1
M2
out in
out in
in
out
Mn
out in
ARBITRO
BUS
3.2 Protocolo de encadenamiento (daisy chaining) de tres señales
Utiliza una línea más que el protocolo anterior, la línea de ocupación. Además, la línea de petición
no es encadenada sino compartida por todos los masters a través de una entrada al árbitro con capacidad
de O-cableada.
Cuando un master toma el control del bus activa la línea de ocupación. El árbitro sólo activa la
línea de concesión cuando recibe una petición y la línea de ocupación está desactivada. Como en el caso
anterior, si un master recibe la concesión y no ha solicitado el bus, transmite la señal al siguiente master.
Un master toma el control del bus si tiene una petición local pendiente, la línea de ocupación está
desactivada y recibe el flanco de subida de la señal de concesión.
concesión
M1
M2
Mn
petición
ARBITRO
ocupación
BUS
3.3 Protocolo de encadenamiento (daisy chaining) de cuatro señales
Este protocolo permite simultanear el uso del bus por un master con el proceso de arbitraje para la selección del
master siguiente. De esta forma, cuando el primer master abandona el bus, no se pierde tiempo en el arbitraje para el
siguiente porque ya se ha hecho, pasando directamente el master seleccionado a realizar su transacción, al tiempo que se
35
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
realiza la selección del siguiente master. Para ello se añade una cuarta línea al esquema anterior, la línea de
reconocimiento.
concesión
M1
M2
Mn
petición
ARBITRO
ocupación
reconocimiento
BUS
La línea de reconocimiento la activa un master que solicitó el bus (activó petición) y recibió la concesión pero la
línea de ocupación estaba activa (bus ocupado). Cuando el árbitro recibe la activación de reconocimiento inhibe su
actuación, es decir, deja de atender la señal de petición y generar la de concesión. El master queda en espera para ocupar el
bus tan pronto lo abandone su actual usuario, que lo hará desactivando la señal de ocupación. Cuando esto ocurre, el
master ocupa el bus y desactiva la señal de reconocimiento, con lo que el arbitro recupera su actuación, procediendo a un
nuevo arbitraje entre los master solicitantes, simultáneamente con la operación de transacción en el bus. En la siguiente
figura hemos representado el diálogo de señales correspondiente a una ocupación del bus por el master M1, seguido por el
arbitraje a favor de M2 mientras M1 realiza su transacción, y terminando con la ocupación del bus por M2 cuando M1
finaliza:
M1
petición
M2
M1
M2
concesión
M1
M2
ocupación
M2
reconocimiento
3.4 Protocolo con concesión por encuesta (polling)
Este protocolo sustituye la línea encadenada de concesión del bus por un conjunto de líneas que
permiten acceder de forma selectiva a la dirección asignada cada master sobre estas líneas.
log2n
M1
M2
Mn
concesión
ARBITRO
petición
ocupación
BUS
36
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
3.5 Protocolo con señales independientes
También denominado en estrella, utiliza una línea de concesión específica para cada línea de petición
independiente. Esta alternativa tienen la ventaja que el árbitro puede aplicar distintos algoritmos de decisión en caso de
peticiones simultaneas (FIFO, prioridad fija, prioridad variable). Además, los retardos de propagación de las señales son
pequeños en comparación con las anteriores alternativas.
Tiene la desventaja del número elevado de líneas de arbitraje (una por posible master). El número de master
queda limitado al número de líneas existentes.
M1
M2
Mn
concesión-1
petición-1
ARBITRO
concesión-2
petición-2
concesión-n
petición-n
BUS
3.6 Protocolo distribuido
En estos protocolos la responsabilidad del arbitraje no reside una unidad independiente sino que se
distribuye por los diferentes masters conectados al bus.
M1
R1
M2
G1
Arbitro 1
R2
P1
M3
G2
G1
Arbitro 2
R3
P2
Mn
G3
G2
Arbitro 3
Rn
P3
Gn
Rn
Arbitro n
Pn
Bucle de prioridad
ocupación
‰
Arbitro-i concede el bus al master Mi activando Gi si:
•
•
•
Mi ha activado su línea de petición de bus Ri,
La línea de ocupación está desactivada.
La línea de entrada de prioridad Pi-1 está activada
‰ Si el master Mi no ha activado su línea de petición de bus Ri, el Arbitro-i activa la línea de salida de prioridad Pi.
4 Jerarquía de un bus
Los ordenadores antiguos utilizaban una topología de bus único, denominado bus del sistema o backplane, para
conectar procesador, memoria y los módulos de E/S, tal como la que se muestra en la siguiente figura:
37
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Procesador
Bus del sistema (único)
Red
Memoria
Vídeo
Sin embargo, cuando el número de dispositivos conectados a un bus aumenta disminuye su rendimiento. Esto es
debido a dos motivos fundamentales. El primero el aumento del retardo de propagación de las señales debido al aumento
de longitud de los conductores que dan soporte al bus. Esto afecta especialmente a la propagación encadenada de la señal
de concesión del bus. El segundo el incremento de demanda de acceso que se produce al aumentar el número de
dispositivos conectados. Este exceso de dispositivos puede crear un cuello de botella que haga que el rendimiento del
sistema se degrade por la espera inútil que se origina cuando tienen que realizar transferencias.
Por otra parte, las diferencias en la velocidad de operación de los dispositivos conectados también repercute
negativamente en el rendimiento de un bus. En efecto, los dispositivos lentos pueden ocasionar retrasos importantes a los
rápidos. Por ejemplo, supongamos que un procesador que opera a 200 MHz (Tc = 5 ns, 100 MIPS) y con un CPI = 2. se
conecta a un único bus compartido por la cache, la memoria y los dispositivos de E/S, entre ellos un disco con 10 ms de
tiempo de acceso y 15 MB/seg de velocidad de transferencia. Durante la transferencia de disco a memoria de un archivo de
512 KB se emplearán 10 ms + 512 KB/ 15.000 KB/s = 44,1 ms. En este tiempo la CPU podría haber ejecutado 0,0441 *
100 * 106 = 4,41 millones de instrucciones.
Para evitar la caída de rendimiento, el sistema de buses se jerarquiza, apareciendo dos buses más: el bus local, y el
bus de E/S.
Procesador
bus local
Cache
Memoria
bus del sistema
Adaptador
de bus
Bus de E/S o bus de expansión
Vídeo
Red
Impresora
Monitor
El bus local es de longitud pequeña, de alta velocidad, y adaptado a la arquitectura particular del sistema para
maximizar el ancho de banda entre el procesador y la caché, por eso suele ser un bus propietario. Este bus aísla el tráfico
procesador-caché del resto de transferencias del sistema.
El bus de E/S o de expansión reduce el tráfico en el bus del sistema, de manera que el procesador puede acceder a
memoria en un fallo de caché mientras realiza una operación de entrada/salida.
38
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Los buses de expansión son buses estándar o abiertos (ISA, EISA, PCI, etc.) es decir, independientes del
computador y con unas características bien definidas en el correspondiente documento de normalización. La existencia de
estos buses permite diseñar una amplia gama de controladores de periféricos compatibles.
Para conectar los buses del sistema y de expansión se requiere un Adaptador de Bus, dispositivo que permite
adaptar las distintas propiedades de ambos buses: velocidad, carácter síncrono o asíncrono, multiplexación, etc.
El proceso de jerarquización se puede complicar más con otras topologías que den cabida a dispositivos de distinta
velocidad. De esta forma se equilibra mejor el tráfico de información en sistemas que operan con muchos dispositivos
conectados. En la figura siguiente se muestra una topología jerárquica en la que se contempla un bus de alta velocidad del
que cuelgan dos buses, uno de expansión para dispositivos rápidos y otro de E/S para dispositivos lentos.
bus local
Procesador
Cache
Memoria
bus del sistema
Adaptador
de bus
Bus de alta velocidad
Vídeo
Adaptador
de bus
Red
Monitor
Adaptador
de bus
Bus de E/S
Bus de expansión
Red
Red
Red
5. Buses normalizados
Las especificaciones de un bus estándar están perfectamente definidas en un documento de
estandarización respaldado por alguna sociedad de prestigio en el área (IEEE, etc.). En las especificaciones
se distinguen varios niveles:
•
Nivel mecánico, en el que se recoge la forma y tamaño de los conectores, el número de contactos
por conector y el número de dispositivos que soporta el bus.
39
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
Nivel eléctrico, en el que se especifican los valores de tensión de las diferentes señales,
polarización, etc.
•
Nivel lógico, especifica la función de cada señal del bus: direcciones, datos, control, etc.
•
Nivel de temporización o sincronismo, que especifica el protocolo de transferencia empleado
•
Nivel de arbitraje, especifica el protocolo de arbitraje que utiliza el bus.
5.1 Bus PCI (Peripheral Component Interconnect)
El bus PCI es un bus de ancho de banda elevado e independiente del procesador. El estándar actual permite el uso de
hasta 64 líneas de datos a 66 MHz, para una velocidad de transferencia de 528 MBytes/s, o 4,224 Gbps. El PCI está
diseñado para permitir una cierta variedad de configuraciones basadas en microprocesadores, incluyendo sistemas con uno
o varios procesadores. Utiliza temporízación síncrona y un esquema de arbitraje centralizado.
5.1.1 Estructura
El bus PCI puede configurarse como un bus de 32 o 64 bits. La siguiente tabla define las líneas más importantes
obligatorias en el PCI:
CLK (reloj)
Señal de reloj que es muestreada en el flanco de subida.
RST# (reset)
Hace que todos los registros y señales específicas del PCI pasen al estado inicial.
Señales de direcciones y datos
AD[31:0]
Incluye 32 líneas para datos y direcciones multiplexadas en el tiempo.
C/BE[3:0]#
Se utilizan para interpretar y validar las líneas de datos y direcciones.
Señales de control de interfaz
FRAME#
Activada por el master para indicar el comienzo y la duración de una transferencia. Las activa al
comienzo y la desactiva al final de la fase de datos.
IRDY#
Señal de master preparado (Initiator Ready). La proporciona el master actual del bus (el iniciador de
la transacción). Durante una lectura, indica que el master está preparado para aceptar datos; durante
una escritura indica que el dato válido está en AD.
TRDY#
Señal de slave preparado (Target Ready). La activa el slave al principio de la transferencia, y la
desactiva cuando no puede completar la transferencia en un solo ciclo de reloj
DEVSEL#
Señal de slave (dispositivo) seleccionado (Device Select). Activada por el slave cuando ha reconocido
su dirección.
Señales de arbitraje
REO#
Indica al árbitro que el dispositivo correspondiente solicita utilizar el bus. Es una línea punto-a-punto
específica para cada dispositivo.
GNT#
Indica al dispositivo que el árbitro le ha cedido el acceso al bus. Es una línea punto-a-punto específica
para cada dispositivo.
5.1.2 Ordenes
40
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
La actividad del bus consiste en transferencias entre dos elementos, denominándose maestro al que inicia la
transacción. Cuando un maestro del bus adquiere el control del mismo, determina el tipo de transferencia que se producirá
a continuación. Los tipos, entre otros son los siguientes:
•
•
•
•
•
Reconocimiento de interrupción
Lectura de E/S
Escritura en E/S
Lectura de memoria
Escritura en memoria
5.1.3 Transferencia de datos
Toda transferencia de datos en el bus PCI es una transacción única, que consta de una fase de direccionamiento y una
o más fases de datos. La siguiente figura muestra la temporización de una operación de lectura. Todos los eventos se
sincronizan en las transiciones de bajada del reloj, cosa que sucede a la mitad de cada ciclo de reloj.
1
2
3
4
5
6
7
8
CLK
a
FRAME
h
d
AD
direccion
dato-1
b
C/BE
dato-2
dato-3
e
lectura
byte activo
byte activo
c
byte activo
g
IRDY
i
f
TRDY
DEVSEL
fase de
dirección
fase de
datos
fase de
datos
fase de
datos
Los dispositivos interpretan las señales del bus en los flancos de subida, al comienzo del ciclo. A continuación, se
describen los eventos significativos señalados en el diagrama:
a)
Una vez que el master ha obtenido el control del bus, inicia la transacción:
•
activando FRAME, que permanece activa hasta la última fase de datos
•
situando la dirección de inicio en el bus de direcciones
•
situando la orden de lectura en las líneas C/BE.
b)
El slave reconoce su dirección en las líneas AD al comienzo del ciclo de reloj 2.
c)
El master deja libre las líneas AD del bus y cambia la información de las líneas C/BE para indicar qué líneas AD
se utilizan para transportar datos (de 1 a 4 bytes). También activa IRDY para indicar que está preparado para
recibir el primer dato (*).
41
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
d)
El slave activa DEVSEL para indicar que ha reconocido su dirección. Después sitúa el dato solicitado en las líneas
AD y activa TRDY para indicar que hay un dato válido en el bus.
e)
El master lee el dato al comienzo del ciclo de reloj 4 y cambia las líneas C/BE según se necesite para la próxima
lectura.
f)
En este ejemplo el slave necesita algún tiempo para preparar el segundo bloque de datos para la transmisión. Por
tanto desactiva TRDY para señalar al master que no proporcionará un nuevo dato en el próximo ciclo. En
consecuencia el master no lee las líneas de datos al comienzo del quinto ciclo de reloj y no cambia la señal C/BE
durante ese ciclo. El bloque de datos es leído al comienzo del ciclo de reloj 6.
g)
Durante el ciclo 6 el slave sitúa el tercer dato en el bus. No obstante, en este ejemplo, el master todavía no está
preparado para leer el dato. Para indicarlo, desactiva IRDY. Esto hará que el slave mantenga el tercer dato en el
bus durante un ciclo de reloj extra.
h)
El master sabe que el tercer dato es el último, y por eso desactiva FRAME para indicárselo al slave. Además
activa IRDY para indicar que está listo para completar esa transferencia.
i)
El master desactiva IRDY, haciendo que el bus vuelva a estar libre, y el slave desactiva TRDY y DEVSEL.
(*) Nota: En todas las líneas que pueden ser activadas por más de un dispositivo se necesita un ciclo de cambio (indicado
por las dos flechas circulares) para que pueda ser utilizado por el dispositivo de lectura.
5.1.4 Arbitraje
El bus PCI utiliza un esquema de arbitraje centralizado síncrono, en el que cada maestro tiene una señal propia de
petición (REQ) y cesión (GNT) del bus. Estas líneas se conectan a un árbitro central. La especificación PCI no indica un
algoritmo particular de arbitraje. El árbitro puede utilizar un procedimiento de primero en llegar primero en servirse, un
procedimiento de cesión cíclica (round-robin), o cualquier clase de esquema de prioridad. El maestro del PCI establece,
para cada transferencia que desee hacer, si tras la fase de dirección sigue una o más fases de datos consecutivas.
La siguiente figura es un ejemplo en el que se arbitra a cuál de los dispositivos A y B se cede el bus. Se produce la
siguiente secuencia:
42
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
1
2
3
4
5
6
7
CLK
REQ#-A
a
b
REQ#-B
GNT#-A
c
e
GNT#-B
d
f
g
FRAME
IRDY#
TRDY#
AD
Dirección
Dato
Dirección
acceso A
Dato
acceso B
a)
En algún momento anterior al comienzo del ciclo de reloj 1, A ha activado su señal REQ. El árbitro muestrea esa
señal al comienzo del ciclo de reloj 1.
b)
Durante el ciclo de reloj 1, B solicita el uso del bus activando su señal REQ.
c)
Al mismo tiempo, el árbitro activa GNT-A para ceder el acceso al bus a A.
d)
El maestro del bus A muestrea GNT-A al comienzo del cielo de reloj 2 y conoce que se le ha cedido el acceso al
bus. Además, encuentra IRDY y TRDY desactivados, indicando que el bus está libre. En consecuencia, activa
FRAME y coloca la información de dirección en el bus de direcciones, y la orden correspondiente en las líneas
C/BE. Además mantiene activa REQ-A, puesto que tiene que realizar otra transferencia después de la actual.
e)
El árbitro del bus muestrea todas las líneas GNT al comienzo del ciclo 3, y toma la decisión de ceder el bus a B
para la siguiente transacción. Entonces activa GNT-B y desactiva GNT-A. B no podrá utilizar el bus hasta que éste
no vuelva a estar libre.
f)
A desactiva FRAME para indicar que la última transferencia de datos está en marcha. Pone los datos en el bus de
datos y se lo indica al dispositivo destino con IRDY. El dispositivo lee el dato al comienzo del siguiente ciclo de
reloj.
g)
Al comienzo del ciclo 5, B encuentra IRDY y FRAME desactivados y, por consiguiente, puede tomar el control del
bus activando FRAME. Además, desactiva su línea REQ, puesto que sólo deseaba realizar una transferencia.
Hay que resaltar que el arbitraje se produce al mismo tiempo que el maestro actual del bus está realizando su
transferencia de datos. Por consiguiente, no se pierden ciclos de bus en realizar el arbitraje. Esto se conoce como arbitraje
oculto o solapado (hidden arbitration).
5.2 Bus USB (Universal Serial Bus)
43
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El bus USB (Universal Serial Bus) es un bus normalizado para la conexión de periféricos, desarrollado por
empresas de informática y telecomunicaciones (7 compañías: Compaq, DEC, IBM, Intel, Microsoft, NEC y Northern
Telecom). Permite conectar de forma sencilla dispositivos periféricos al computador, sin necesidad de reiniciarlo ni de
configurar el sistema. Se pueden conectar hasta 127 dispositivos, con una longitud máxima de cable de 5 metros para cada
uno, con lo que una conexión en cadena permitiría que el último dispositivo estuviese a 635 metros del ordenador.
Trabaja en dos modos, a baja velocidad, 1,5 Mbps, para dispositivos lentos como teclados y ratones, y a alta
velocidad, 12 Mbps, para dispositivos rápidos, como CD-ROM , módems, etc. Utiliza un cable de cuatro hilos, dos para
datos y dos para alimentación. El bus USB está organizado en una estructura de árbol descendente, con unos elementos
especiales, llamados hubs que encaminan las señales desde un dispositivo al host o viceversa. En la raíz está el host, que es
el interfaz entre el bus USB y el bus del ordenador. De él cuelgan los dispositivos USB y los hubs, que también son
dispositivos USB. A un hub se puede conectar uno o más dispositivos, que a su vez pueden ser otros hubs.
Teclado
Ratón
Monitor
Teclado
Mic
Host(CPU)
Scaner
Teléfono
Hub
Cuando se conecta un dispositivo, se detecta la diferencia de tensión en la red USB y procede a determinar las
características del dispositivo (vendedor, funcionalidad, ancho de banda requerido, etc.). El host le asigna una dirección
única ID para diferenciarlo del resto de los dispositivos de la red USB. Después el SO carga los drivers del dispositivo,
solicitándolos al usuario si es necesario. Cuando se desconecta el dispositivo, el host lo detecta y descarga los drivers. El
host USB tiene, entre otras, las siguientes funciones:
‰
‰
‰
‰
‰
‰
‰
Detectar la conexión de nuevos dispositivos al sistema .
Detectar la desconexión de dispositivos previamente conectados,
Enumerar y configurar los dispositivos conectados al sistema.
Administrar y controlar el flujo de datos entre el host y los dispositivos USB.
Administrar y controlar las transferencias síncronas y asíncronas de información.
Recoger y resumir estadísticas de actividad y estado de los elementos del sistema.
Proporcionar energía eléctrica a algunos dispositivos del computador (teclado, ratón, etc.).
Un puerto serie es capaz de transmitir hasta 112,5 KB/s y un puerto paralelo entre 600KB/s y 15MB/s, sin embargo la
velocidad de transferencia de un puerto USB está entre 1,5MB/s y 12MB/s. El FIREWIRE (IEEE 1394), maneja
transferencias entre 100MB/s y 400MB/s, que permite conectar hasta 63 dispositivos y un cable de 4.5 metros por
dispositivo, permitiendo al igual que el USB la conexión en operación.
Uno de los problemas del puerto USB es que suministra solamente 500 miliamperios de corriente para los dispositivos
conectados, que aunque es suficiente para la mayoría de los dispositivos que se conectan a este puerto, resulta pequeña
cuando conectamos varios dispositivos sin fuente de alimentación propia.
Otra de las funciones importantes de los hubs es la de aislar a los puertos de baja velocidad de las transferencias de alta
velocidad, proceso sin el cual todos los dispositivos de baja velocidad conectados al bus entrarían en colapso.
La protección de los dispositivos lentos de los rápidos ha sido siempre un problema importante en el diseño redes
mixtas, como es USB. El hub está compuesto por dos unidades principales: el Controlador y el Repetidor.
El Repetidor tiene la función de analizar, corregir y retransmitir la información que llega al hub hacia los puertos del
mismo. Contiene una memoria de varios registros para sus funciones.
44
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
El Controlador es una pequeña CPU de supervisión de las múltiples funciones realiza un hub.
Todos los dispositivos conectados acceden al canal o medio para transmitir sus datos siguiendo un protocolo
administración del host análogo al de token ring, que consecutivamente va dando la posibilidad de transmisión a cada
periférico.
5.2.1 Arquitectura
En la siguiente figura aparece un diagrama de bloques de un microcontrolador USB:
DPO
D MO
Tra n s c e iv e r
S IE
(Ser ia l Bu s
In t er fa ce E n gin e)
F IU
(F u n ct ion
In t er fa ce U n it )
CP U
Bu s
Da t os
Bu s
Tr a n sm it
Receive
F IF Os
‰
Transceiver El cable USB dispone de solo cuatro hilos: Vbus, D+, D- y GND. La información y los datos van por los
hilos D+ y D-, con dos velocidades: 12Mbps o 1.5Mbps. El Transceiver, incorporado dentro del chip controlador,
constituye la interfaz de un dispositivo externo con el resto del sistema.
‰
SIE (Serial Interface Engine) Tiene la función de serializar y paralelizar las transmisiones, además maneja los
protocolos de comunicación, las secuencias de paquetes, el control CRC y la codificación NRZI.
‰
FIU (Function Interface Unit) Administra los datos que son transmitidos y recibidos por el cable USB. Se basa y
apoya en el contenido y estado de las memorias FIFOs. Controla los estados de las transacciones, los buffer FIFO, y
solicita atención para diversas acciones a través de interrupciones.
‰
FIFOs Los controladores típicos disponen de un total de 8 buffer tipo FIFO, cuatro destinadas a la transmisión y
cuatro a la recepción de datos. Tanto para la transmisión como para la recepción, los buffer soportan cuatro tareas o
funciones, numeradas de 0 a 3.
5.2.2 Protocolo
Toda transferencia de datos o transacción que emplee el bus, involucra al menos tres paquetes de datos. Cada
transacción se da cuando el host decide qué dispositivo hará uso del bus. Para ello envía un paquete al dispositivo
específico. Cada dispositivo tiene un número de identificación, asignado por el Controlador de host cuando arranca el
computador o cuando un se conecta un dispositivo nuevo al sistema. De esta forma, cada periférico puede determinar si es
el receptor de un paquete de datos. Técnicamente un paquete de datos se denomina Token Packet.
45
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Este protocolo tiene un sistema muy eficiente de recuperación de errores, empleando uno de los modelos más
seguros como es el CRC (Código de Redundancia Cíclica). Y puede estar implementado al nivel de software y/o hardware
de manera configurable.
5.2.3 Modos de transmisión
‰
Asíncrona
‰
Síncrona
‰ Bulk
La transmisión Bulk, es una comunicación no periódica, utilizada por transferencias que requieren todo el ancho
de banda disponible o en su defecto son retrasadas hasta que el ancho de banda completo esté disponible. Aparecen en el
movimientos de imágenes o vídeo, donde se requiere una gran capacidad de transferencia en poco tiempo.
USB permite dos tipos más de transferencias de datos:
‰ Control
Es un tipo de comunicación exclusivamente entre el host y el dispositivo que permite configurar este último. Sus
paquetes de datos son de 8, 16, 32 o 64 bytes, dependiendo de la velocidad del dispositivo que se pretende controlar.
‰ Interrupción
Este tipo de comunicación está disponible para aquellos dispositivos que demandan mover muy poca información
y con poca frecuencia. Su paquete de datos tiene las mismas dimensiones que el de las transmisiones de control.
5.3 Bus SCSI (Small Computer System Iterface)
El bus SCSI se utiliza en ordenadores personales y en muchas estaciones de trabajo. Se trata de una interfaz
paralela, con 8, 16 o 32 líneas de datos. Cada dispositivo SCSI tiene dos conectores, uno de entrada y otro de salida,
conectándose en cadena (daisy chain). Todos los dispositivos funcionan independientemente, y pueden intercambiar datos
entre ellos, igual que con el computador. Por ejemplo, un disco duro puede guardar su contenido en una cinta sin que tenga
que intervenir el procesador. Los datos se transfieren mediante paquetes, que componen un mensaje.
‰
Versiones
La especificación original SCSI, la SCSI-1, se desarrolló en los años 80. SCSI-1 utiliza 8 líneas de datos y opera a una
frecuencia de reloj de 5 MHz, o a una velocidad de datos de 5 MBytes/s. SCSI-1 permite conectar al computador hasta
siete dispositivos. En 1991 se introdujo SCSI-2. Los cambios más notables fueron la expansión opcional a 16 o 32 líneas
de datos y el aumento de la frecuencia de reloj a 10 MHz. Como resultado se tiene una velocidad de datos máxima de 20 o
40 Mbytes/s.
‰
Fases
Todos los intercambios en el bus SCSI se producen entre un dispositivo iniciador y un dispositivo seleccionado.
Normalmente, el computador es el iniciador y un controlador periférico el dispositivo seleccionado, pero algunos
dispositivos pueden asumir los dos papeles. En cualquier caso, toda la actividad del bus se produce en una secuencia de
fases:
• Bus Libre: ningún dispositivo está utilizando el bus, está disponible.
• Arbitraje: determina el dispositivo que toma control del bus, de manera que pueda iniciar o reanudar una operación
de E/S.
• Selección: de un dispositivo para realizar una operación, por ejemplo, una orden de lectura o escritura.
• Reselección: permite que el dispositivo seleccionado se vuelva a conectar al iniciador para reanudar una operación
iniciada previamente, pero suspendida por el dispositivo.
46
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
• Orden: el dispositivo solicita una orden de información al iniciador.
• Datos: el dispositivo solicita la transferencia de un dato hacia el iniciador (entrada de datos, Data In) o viceversa
(salida de datos, Data Out).
• Estado: el dispositivo solicita la información de estado desde al iniciador.
• Mensaje: el dispositivo solicita la transferencia de uno o más mensajes desde el iniciador (entrada de mensaje,
Message In) o viceversa (salida de mensaje, Message Out).
La siguiente figura ilustra el orden en que se producen las fases del bus SCSI:
Condición de
encendido o
inicio
Fase de
bus libre
Fase de
arbitraje
Fase de
selección o
reselección
Fase de
orden, datos,
estado y mensaje
Después de conectarse el sistema, o después de un reinicio, el bus pasa a la fase de bus libre. A ésta le sigue la
fase de arbitraje, que da lugar a que un dispositivo tome el control. Si el arbitraje falla, el bus vuelve a la fase de bus libre.
Cuando el arbitraje termina con éxito, el bus pasa a una fase de selección o reselección, en la que se designa un iniciador y
un dispositivo seleccionado para realizar la transferencia. Después de determinados los dos dispositivos, se producirá una o
más fases de transferencia de información entre ambos (fases de orden, datos, estado y mensaje). La fase final de
transferencia de información es normalmente la fase de entrada de mensaje, en la que un mensaje de desconexión o de
orden completa se transfiere al iniciador, seguida de una fase de bus libre. Una característica importante del bus SCSI es la
capacidad de reselección. Si una orden enviada necesita algún tiempo para completarse, el dispositivo seleccionado puede
liberar el bus y volverse a conectar al iniciador más tarde. Por ejemplo, el computador puede enviar una orden a un
dispositivo de disco para que dé formato al disco, y el dispositivo realiza la operación sin necesidad de acceder al bus.
Líneas de señal
BSY: Bus ocupado, activada por el iniciador o dispositivo seleccionado
SEL: Selección de un dispositivo por el iniciador o del iniciador por un dispositivo
C/D: Indicación por el dispositivo si el bus de datos lleva información de control (orden, estado o
mensaje) o datos
I/O: Control por el dispositivo de la dirección del movimiento de datos en el bus de datos.
REQ: Petición por el dispositivo de una transferencia de información o datos.
ACK: Reconocimiento por el iniciador de la señal de REQ del dispositivo.
DB(7-0): Bus de datos
Operación (temporización)
Para aclarar el papel de cada señal en las distintas fases (estados) del bus, analizaremos una
operación de lectura que transfiere datos desde un dispositivo periférico al iniciador (computador). Esta
sigue las siguientes fases:
47
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
Arbitraje
Selección
Orden
Transferencia de datos
Estado
Mensaje
El arbitraje se realiza con la señal BSY y las 8 señales de datos, la 7 asignada al computador, y las
otras 7 asignadas a otros tantos dispositivos (7 es el número máximo de dispositivos que se pueden
conectar al SCSI-1). El dispositivo que quiere acceder al bus activa BSY y su señal de datos asociada.
Entre las señales de datos existe una prioridad, siendo la 7 la más prioritaria y la 0 la menos prioritaria.
Cada dispositivo conoce si puede acceder al bus leyendo las líneas de datos. Si no hay otra activa con
mayor prioridad accederá al bus. En nuestro caso es la CPU quien accede (máxima prioridad) para realizar
la lectura.
El dispositivo que ha ganado el arbitraje se convierte en el iniciador y comienza la fase de selección
del dispositivo con el que quiere realizar la transacción. Para eso activa la señal SEL y las dos líneas de
datos: la suya propia y la del dispositivo con el que quiere conectar. El dispositivo reconoce su
identificación activando la señal BSY que ha desactivado previamente el iniciador después de su uso en el
arbitraje.
Después se pasa a la fase de orden en la que el iniciador transmite al dispositivo en forma
asíncrona el conjunto de bytes que componen la orden a ejecutar (lectura en nuestro caso). El sincronismo
se realiza con la ayuda de las señales conocidas REQ (controlada por el dispositivo y leída por el iniciador)
y ACK (controlada por el iniciador y leída por el dispositivo).
Una vez que el dispositivo conoce que es una orden de lectura se pasa a la fase de transmisión de
datos que de nuevo se realiza byte a byte de forma asíncrona con la ayuda de REQ y ACK..
Finalizada la transmisión el dispositivo pasa el bus a la fase de estado en la que transmite un byte
en el que se codifica que la transmisión se ha realizado con éxito.
Finalmente el dispositivo hace pasar al bus a la fase de mensaje en la que se transmite un byte con
el mensaje de orden completa.
El diagrama de tiempos para la orden de lectura con las principales señales implicadas sería el
siguiente:
BSY
SEL
C/D
I/O
REQ
ACK
DB(7-0)
byte orden
Arbitraje
Selección
byte orden
Orden
gyte datos
byte datos
Datos (entrada)
byte estado
Estado
orden completa
Mensaje
Mensajes
• Orden completa
• Desconexión
48
Estructura de Computadores, Facultad de Informática, UCM, Curso 04-05
•
•
•
Error detectado en el iniciador
Abortar
Transferencia síncrona de datos
49
Descargar