ESTRUCTURA DEL SISTEMA MULTIPROCESADOR

[ DIAGRAMA SISTEMA MULTIPROCESADOR ]


Componentes del sistema
El Sistema Multiprocesador estaría compuesto básicamente por los siguientes elementos:
- Procesador 0
- Procesador 1
- Memoria de datos
- Unidad de Multiprocesamiento (UMP)

Estos elementos estarían conectados por una serie de buses y las respectivas puertas lógicas, multiplexores, etc. que permitan el correcto funcionamiento.
Un esquema básico del sistema sería el siguiente:


 

De esta forma, se explica la forma en la que los elementos del sistema están conectados. Como podemos comprobar, existe información que fluye entre los procesadores y la memoria de datos, a la vez que existe una información entre la Unidad de Multiprocesamiento y la Memoria de datos. Esta información será la encargada de indicaar que procesador debe ser el que trabaje en un determinado instante con la Memoria de datos, es decir, el procesador que "hace suya" esta memoria.

Además de estos elementos, el sistema contiene un reloj que es el que establece el orden del sistema. Este reloj llega a los procesadores, a la Memoria de datos y a la Unidad de Multiprocesamiento y establece los ciclos de reloj que deben seguir los elementos.

¿Cómo funciona el Sistema?
A continuación vamos a describir la forma de actuar que tiene este sistema:

Los procesadores contienen una memoria de instrucciones individual cada uno. En esta memoria se almacena el código de cada una de las instrucciones en binario.

Cuando llega señal de reloj a un procesador, comienza a ejecutarse la instrucción actual, mediante la unidad de control interna del procesador, se analiza la instrucción y se determina de qué tipo es: aritmético-lógica, de acceso a memoria o de salto.
Una vez establecido el tipo de la instrucción, la unidad de control genera una serie de señales para controlar los elementos internos del procesador, como multiplexores, puertas lógicas, etc.

Si la instrucción es aritmético-lógica o de salto, no existe ninguna interacción con la memoria de datos, por tanto no es necesario que actue la Unidad de Multiprocesamiento.
En cambio, si estamos tratando con una instrucción de carga o almacenamiento, deberemos gestionar el acceso a la Memoria de datos para ambos procesadores para evitar tener errores en la utilización de esa memoria.

Llegados a este punto, vemos que pueden presentarse cuatro posibles casos en la ejecución de las instrucciones:

Caso 1:
Ninguno de los procesadores utiliza la memoria de datos, luego no es necesaria la gestión de ésta.

Caso 2:
El procesador 0 no utiliza la memoria de datos, pero el procesador 1 sí la utiliza. En este caso, no existe problema, ya que el procesador 0 puede estar ejecutando su instrucción (aritmético-lógica o de salto) sin influir en la utilización de la memoria por parte del procesador 1 (que estará ejecutando una operación de acceso a memoria).

Caso 3:
El procesador 0 utiliza la memoria de datos y el procesador 1 no la utiliza. Para este caso, tampoco existe problema, ya que el procesador 0 utilizará la memoria y no habrá ningún problema con el procesador 1 ya que este no utiliza la memoria.

Caso 4:
Ambos procesadores utilizan la memoria. Este es el punto en el que se hace clave la Unidad de Multiprocesamiento ya que será necesario evitar que ambos procesadores utilicen simultáneamente la memoria.
Ya que tenemos un bus de datos común, deberemos gestionar que primero escriba un procesador y en el ciclo siguiente el otro.
Mientras escribe un procesador, debemos tener en cuenta que el otro no efectúa trabajo útil. Deben haber terminado de ejecutarse las instru
cciones de acceso a memoria en ambos procesadores para que se siga con el resto de las instrucciones de ambos programas.

Para dejar más claro este proceso, se muestra la siguiente tabla que indica qué debe realizar la Unidad de Multiprocesamiento en referencia al tipo de instrucción que va a ejecutar cada procesador:

Por tanto, será para la última combinación de esta tabla para la que sea necesario utilizar la Unidad de Multiproceso.

Debe señalarse, que para este caso en vez de emplear un ciclo de reloj para la ejecución, debe emplearse 2 ciclos. Durante el primer ciclo trabajará un procesador mientras que el otro estará ocioso y en el segundo ciclo trabajará el otro procesador y el anterior no efectuará ningún tipo de trabajo.

Se establece como primer procesador para realizar trabajo el procesador0 y como segundo el procesador 1, es decir, primero trabajará el procesador 0 y después el procesador 1.

En la siguiente tabla se muestra la forma de trabajar de este sistema en el Caso 4, es decir, en el caso de que los dos procesadores deseen utilizar la Memoria de datos

 

¿En qué momento debe realizarse el cambio de activo a inactivo o viceversa?
Debemos tener en cuenta que en el momento que se cambie de un procesador a otro, es decir, cuando deje de trabajar el procesador 0 y comienze a actuar el procesador 1, será cuando haya terminado de utilizar la memoria de datos el procesador 0.
Este momento podemos calcularlo debido a que la señal select que indica que la memoria de datos debe estar activa, puede ser utilizada mediante una puerta AND con el reloj del sistema.
De esta forma, cuando haya un pulso de reloj, indicará que ha terminado el tiempo de acceso a la memoria de datos y por tanto, el otro procesador podrá comenzar a utilizar dicha memoria.
Así conseguimos que exista una basculación de un procesador a otro, es decir, que en un determinado momento, pueda pasarse el control de la memoria de datos del procesador 0 al procesador 1.