Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A esta lista hay que añadir una de las más interesantes y, potencialmente, de las
más importantes innovaciones: la arquitectura de computador de repertorio reducido de
instrucciones (reduced instruction set computer RISC).
Operaciones
Operandos
Estos estudios demostraron que la mayoría de las referencias se hacen a variables
escalares simples. Además, más del 80% de los datos escalares eran variables locales,
asimismo, las referencias a matrices/estructuras requieren una referencia previa a su
índice o puntero que nuevamente suele ser un dato escalar local. de este modo, hay un
predominio de referencias a operandos escalares, y estos están muy localizados.
Llamadas a procedimientos
El mismo grupo de Berkeley también estudió los patrones seguidos por las
llamadas y retornos de procedimientos de programas en HLL. encontraron que es poco
común tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida
por la correspondiente secuencia de retornos. Vieron, más bien que un programa
permanece confinado en una ventana bastante estrecha de profundidad de invocación
a procedimientos. Tales resultados refuerzan la conclusión de que las referencias a
operandos están muy localizadas.
Consecuencias
Ventanas de registros
El uso de un conjunto amplio de registros debería reducir la necesidad de acceder a
memoria.
Ya que la mayoría de las referencias se hacen a datos escalares locales, la
solución evidente sería almacenar éstos en registros, reservando tal vez, registros para
variables globales. El problema que surge es que la definición de “local” varía con cada
llamada y retorno de procedimiento, operaciones que suceden con frecuencia.
La verdadera solución se basa en otros dos resultados. En primer lugar, un
procedimiento típico emplea sólo unos pocos parámetros de llamada y variables locales,
en segundo lugar, la profundidad de activación de procedimientos fluctúa dentro de un
rango relativamente pequeño.
Para explotar estas propiedades, se usan múltiples conjuntos pequeños de
registros, cada uno asignado a un procedimiento distinto. Una llamada a un
procedimiento hace que el procesador conmute automáticamente a una ventana de
registros distinta de tamaño fijo, en lugar de salvaguardar los registros en memoria.
Las ventanas de procedimientos adyacentes están parcialmente solapadas para permitir
el paso de parámetros.
Los i486 son muy similares a sus predecesores, los Intel 80386. Las diferencias
principales son que los i486 tienen un conjunto de instrucciones optimizado, una unidad
de punto flotante y un caché unificado integrados en el propio circuito integrado del
microprocesador y una unidad de interfaz de bus mejorada.
Este tipo de diseño es la base de los procesadores de Intel y de AMD, sin importar la
gama o la estructura interna. Cualquiera de los procesadores producidos por ambas
compañías se basa en la arquitectura CISC.
Qué es RISC
Características de RISC
• Permiten crear procesadores con «espacio» libre para añadir otros circuitos o
reducir sencillamente el encapsulado
Vamos a ver las diferencias entre las arquitecturas de procesadores CISC y RISC en una
sencilla tabla para que se pueda ver de manera más clara
RISC CISC
Es una arquitectura con conjunto de Es una arquitectura de conjunto de
instrucciones reducido instrucciones complejas
Tiene una sencilla decodificación de las Tiene una compleja decodificación de las
instrucciones instrucciones
Se puede utilizar con aplicaciones de Se puede utilizar con aplicaciones de alta gama
gama baja como domótica, sistema de como telecomunicaciones, procesamiento de
seguridad, etc. imágenes, procesamiento de video, etc.
El programa escrito para esta Los programas escritos para esta arquitectura
arquitectura necesita ocupar más tienden a ocupar menos espacio en la
espacio en la memoria memoria
¿Por qué CISC?
Los programas más pequeños tienen dos ventajas. En primer lugar, como el
programa ocupa menos memoria, hay un ahorro de este recurso. como la memoria hoy
día es tan barata la ventaja potencial ya no es primordial, tiene mayor importancia el
hecho de que programas más pequeños mejoren las prestaciones, lo que ocurre por
dos motivos. El primero es que el que haya menos instrucciones significa que hay que
captar menos bytes de instrucciones. El segundo es que, en un entorno paginado los
programas más pequeños ocupan menos páginas, reduciendo las faltas de páginas.
Una segunda característica es que la mayoría de la operación deben ser del tipo
registro a registro, con la excepción de sencillas operaciones load y store, para acceder
a memoria. esta forma simplifica el repertorio de instrucciones y, por tanto, la unidad
de control. Por ejemplo, un repertorio de instrucciones RISC puede incluir solo una o
dos instrucciones add, (por ejemplo, suma entera y suma con acarreo). Otra ventaja es
que tal arquitectura fomenta la optimización del uso de registros, ya que los operandos
accedidos frecuentemente, permanecen en el almacenamiento de alta velocidad.
Este énfasis en las operaciones registro a registro es único de los diseños RISC.
Otras máquinas contemporáneas tienen tales instrucciones, pero incluyen también
operaciones memoria a memoria y operaciones mixtas registro/memoria.
Un tercer punto tiene que ver con el uso de segmentación de las instrucciones.
Los investigadores de RISC creen que la técnica de segmentación de las instrucciones
se puede aplicar mucho más eficazmente a un repertorio reducido de instrucciones.
Un último punto, algo menos importante es que los programas RISC deberían
ser más sensibles a las interrupciones, ya que estas se comprueban entre operaciones
bastante elementales. Las arquitecturas con instrucciones complejas, o bien restringen
las interrupciones a los límites de instrucción o bien tienen que definir puntos
interrumpibles específicos e implementar mecanismos para reanudar la ejecución de
una instrucción.
La segunda área con una ventaja potencial es más evidente y tiene que ver con la
implementación VLSI. Cuando se usa VLSI, el diseño y la implementación del
procesador son esencialmente distintos. Los procesadores tradicionales, tales como el
IBM s/390 y el VAX, constan de una o más tarjetas de circuitos impresos, que contiene
chips SSI y MSI estandarizados. Con la llegada de LSI y VLSI es posible meter un
procesador complejo en un único chip. Con un procesador de un único chip hay dos
motivaciones para seguir una estrategia RISC. En primer lugar, está la cuestión de las
prestaciones. Los retardos dentro del chip son mucho menores que los retardos entre
chips, de modo que tienen sentido dedicar el escaso espacio del chip a aquellas
actividades que ocurren frecuentemente. Hemos visto que las instrucciones sencillas y
el acceso a datos escalares locales, son, las actividades más frecuentes. Los chips RISC
de berkeley se diseñaron con esta consideración en mente. Mientras que un
microprocesador de un único chip típico dedica aproximadamente la mitad de su área a
la memoria de control de microcódigo, el RISC 1 dedica solo el 6% de su área a la
unidad de control.
Un segundo asunto relacionado con VLSI es el tiempo de diseño e
implementación. Un procesador VLSI es difícil de desarrollar. En lugar de confiar en los
componentes SSI y MSI disponibles, el diseñador debe realizar el diseño, trazado y
modelado del circuito en el nivel de dispositivos. Con una arquitectura de repertorio
reducido de instrucciones, este proceso es mucho más fácil. Si además las prestaciones
del chip RISC son equivalentes a los microprocesadores CISC comparables, las ventajas
de la aproximación RISC se hacen evidentes.
I: captación de instrucción.
I: captación de instrucción.
La segmentación discutida hasta aquí funciona mejor si las tres fases son
aproximadamente de la misma duración. Como la fase E usualmente implica una
operación de la ALU, puede ser más larga. En ese caso, podemos dividirla en dos
subfases:
E1: lectura del banco de registros.
E2: operación de la alu y escritura en el registro.
Optimización de la segmentación
Dada la naturaleza sencilla y regular de las instrucciones RISC, los esquemas de
segmentación se pueden emplear eficientemente. Hay poca variación en la duración de
la ejecución de instrucciones, y el cauce puede adaptarse para reflejar este hecho. Sin
embargo, hemos visto que las dependencias de datos y bifurcaciones reducen la
velocidad de ejecución global.
Un tipo de táctica similar llamada carga retardada, se puede usar con las instrucciones
load. En las instrucciones load, el procesador bloquea el registro destino de la carga.
Después el procesador continúa la ejecución del flujo de instrucciones hasta que
alcanza una instrucción que necesite ese registro, deteniéndose hasta que la carga
finalice. Si el compilador puede reorganizar las instrucciones de manera que se pueda
hacer un trabajo útil mientras la carga está en el cauce, la eficiencia aumentara.
Como nota final, hay que señalar que el diseño del cauce de instrucciones no
debe ser llevado a cabo independientemente de otras técnicas de optimización
aplicadas al sistema. Por ejemplo, muestra que la planificación de instrucciones para el
cauce y la asignación dinámica de registros tienen que considerarse conjuntamente
para lograr la mayor eficiencia.
Repertorio de instrucciones
Todas las operaciones con datos son del tipo registro a registro; las únicas referencias
a memoria son operaciones puras de carga/almacenamiento.
El R4000 no utiliza códigos de condición. Si una instrucción genera una
condición, los indicadores correspondientes se almacenan en un registro de uso
general. Esto elimina la necesidad de una lógica especial para tratar con códigos de
condición, ya que estos afectan al mecanismo de segmentación y a la reordenación de
instrucciones por el compilador. En lugar de eso, se emplea el mecanismo ya
implementado, que se ocupa de las dependencias de valores de registros. Además, las
condiciones asignadas en el banco de registros son propensas a las mismas
optimizaciones del compilador, en cuanto a asignación y reutilización, que cualquier
otro valor almacenado en un registro.
MIPS utiliza una longitud de instrucción fija de 32 bits. Está única longitud de
instrucción simplifica la captación y decodificación de instrucciones, y también
simplifica la interacción entre la captación de instrucciones y la unidad de gestión de
memoria virtual (o sea que las instrucciones no atraviesan los límites de una palabra o
una página). Los tres formatos de instrucción comparten un formato común para los
códigos de operación y las referencias a registros, lo que simplifica la decodificación de
instrucciones. La acción de instrucciones más complejas se puede sintetizar en tiempo
de compilación,
Solo se implementa en hardware el modo de direccionamiento a memoria que
se usa con más frecuencia. Todas las referencias a memoria consisten en un
desplazamiento de 16 bits y un registro de 32 bits. Por ejemplo, la instrucción load
word.
Cualquiera de los 32 registros de uso general puede utilizarse como registro
base.
Cauce de instrucciones
Gracias a su escritura de instrucciones simplificada (RISC), el MIPS puede lograr una
segmentación muy eficiente.
El MIPS R4000 es un ejemplo de una arquitectura RISC supersegmentada, pero
eso lo vamos a retomar en la unidad 5.
Es claro que este proceso supone una cierta penalización. Deben ejecutarse
instrucciones extra para determinar el origen de la interrupción, sin embargo, es la
mejor opción en la cual el procesador puede emplearse de manera mucho más
eficiente.
Interrupciones múltiples
Hasta ahora únicamente se ha discutido la existencia de una sola interrupción. Pero,
debemos saber que se puede producir más de una interrupción, por ejemplo: un
programa puede estar recibiendo datos a través de una línea de comunicación e
imprimiendo resultados. La impresora generará interrupciones cada vez que complete
una operación de escritura. El controlador de la línea de comunicación generará una
interrupción cada vez que llegue una unidad de datos. La unidad de datos puede ser un
carácter o un bloque, según el protocolo de comunicación. En cualquier caso, es posible
que se produzca una interrupción de comunicaciones mientras se está procesando la
interrupción de la impresora.
Se pueden seguir dos alternativas para tratar las interrupciones múltiples:
1.Desactivar las interrupciones mientras se está procesando una interrupción.
Una interrupción inhabilitada simplemente significa que el procesador puede y debe
ignorar la señal de petición de interrupción. Si se produce una interrupción en ese
momento, generalmente se mantiene pendiente, y será examinada por el procesador
una vez éste haya activado las interrupciones. Así, cuando un programa de usuario se
está ejecutando y se produce una interrupción, las interrupciones de inhabilitan
inmediatamente. Después de que la rutina de gestión de interrupción termine, las
interrupciones se habilitan antes de que el programa de usuario prosiga, y el
procesador compruebe si se han producido interrupciones adicionales. Con esta opción,
las interrupciones se manejan en un orden secuencial estricto.
El problema con la opción 1 es que no tiene en cuenta la prioridad relativa, ni
las solicitudes con un tiempo estricto. Por ejemplo: cuando llega una entrada desde la
línea de comunicaciones, ésta debe tramitarse rápidamente, para dejar espacio a los
datos siguientes. Si los primeros datos no se han procesado antes de que lleguen los
siguientes se pueden perder.
Gestión de interrupciones
Igual que las transferencias de ejecución que usan la instrucción CALL, una
transferencia a una rutina de gestión de interrupción usa la pila del sistema para
almacenar es estado del procesador. Cuando una interrupción tiene lugar y es
reconocida por el procesador, tiene lugar la siguiente secuencia de eventos:
1. Si la transferencia supone un cambio del nivel de privilegio, los contenidos
actuales del registro de segmento de pila y del registro puntero de pila ampliado (ESP)
se introducen en la pila.
2. El valor actual del registro EFLAGS se introduce en la pila.
3. Los indicadores de interrupciones (IF) y de trampa (TF) se ponen a cero. Ello
inhabilita las interrupciones INTR y la interceptación o modo paso a paso.
4. Los contenidos actuales del puntero de segmento de código (CS) y del
puntero de instrucción (IP o EIP) se introducen en la pila.
5. Si la interrupción viene acompañada por un código de error, éste se introduce
en la pila.
6. Los contenidos del vector de interrupción se captan y se cargan en los
registros CS e IP o EIP. La ejecución continúa por la rutina de servicio de interrupción.