martes, 27 de octubre de 2009

Resolución de riesgos de Segmentación: MIPS

Antes de comenzar con las explicaciones detalladas de las técnicas de resolución, debería explicar brevemente en que consiste la Segmentación. Básicamente es una técnica que permite solapar la ejecución de instrucciones, dividiendolas en etapas. En las arquitecturas MIPS clásicas son:
  1. Búsqueda de la instrucción en memoria. IF
  2. Lectura de registros mientras se decodifica la instrucción. ID
  3. Ejecución de la operación o cálculo de una dirección. EX
  4. Acceso a un operando en memoria. MEM
  5. Escritura del resultado en memoria. WB
Estas etapas son ejecutadas por separado realizando la ejecución de las instrucciones del siguiente modo:

Pero la segmentación trae consigo problemas:
  1. Riesgos estructurales (Instrucciones que utilizan los mismos recursos a la vez)
  2. Riesgos de datos (Necesidad de datos que aun se están calculando)
  3. Riesgos de control (Problemas al controlar los saltos en un código)
Existen técnicas para resolver estos riesgos. A continuación voy a explicar las que se utilizan en los procesadores tipo MIPS clásicos:

ESTRUCTURALES. En este caso se ha decidido duplicar los recursos. Por ejemplo, en cierto código la etapa de IF de una operación se ejecuta al mismo tiempo que la MEM de otra (como en la imagen anterior). Esto crea un conflicto ya que ambas etapas acceden a memoria. En MIPS se ha separado la memoria de datos y de instrucciones, de esta manera se evitan todos estos conflictos.

DE DATOS. Supongamos en este caso que tenemos una instrucción add seguida de una instrucción sub:
add $s0, $t0, $t1
sub $t2, $s0, $t3
En este caso la segunda instrucción se verá obligada a esperar antes de la etapa EX hasta que la primera escriba en memoria. La arquitectura MIPS lo soluciona con cortocircuitos o anticipación. Esta técnica consiste en unir la ALU (Unidad Aritmético Lógica, en español) perteneciente a la ejecución de la etapa EX de la primera instrucción, con la entrada de datos de la etapa EX de la segunda instrucción, evitando así el acceso a memoria.

DE CONTROL. Cuando la instrucción a ejecutar se trata de un salto, no se sabe si la siguiente instrucción será la que se debe ejecutar. Esto trae muchos problemas de espera ya que en los códigos es muy común instrucciones de tipo if o while. Existen soluciones como bloquear la ejecución, predecir el salto o retardar la decisión. Esta última es la utilizada en los procesadores MIPS.
Su funcionamiento es sencillo, mientras se decide si el salto se debe tomar o no, el procesador pone como siguiente instrucción a ejecutar una que no dependa de la decisión del salto. Todo el proceso de que instrucción colocar es "invisible" para el programador, el procesador se encarga de ello de manera automática.

Como detalle bibliográfico, todas estas técnicas vienen especialmente bien explicadas en el libro Estructura y diseño de computadores de D.A. Patterson y J.L. Hennessy, Volumen 2. Me ha sido especialmente útil y los ejemplos sobre la segmentación comparada al proceso del lavado de ropa es muy fácil de ver.

4 comentarios:

  1. Muy bien explicado. Una pena que sea lo sencillo... :( A ver si soy capaz de entender los riesgos de la segmentación y como solucionarlos. Gracias!

    ResponderEliminar
  2. Gracias, se nota que tenemos examen, 4 años despues de este post

    ResponderEliminar
  3. Igual... mañana examen. Gracias por la info!

    ResponderEliminar