Interrupciones en la Arquitectura CISC
En este artículo explico con un ejemplo el tiempo total que tarda la CPU en realizar una tarea de Entrada Salida de datos.
El procesador tarda un tiempo en realizar una tarea de Entrada o Salida de datos, para esto el dispositivo que quiere realizar una transferencia envía una señal al procesador.
Después de que el procesador reciba la petición para realizar una interrupción y transferir esos datos, comienza el ciclo de reconocimiento de la interrupción. Este ciclo sirve para que el procesador deje de hacer lo que está haciendo y pase el control al RSI (Rutina de Servicio de la Interrupción).
Para hacer los cálculos de este ejemplo vamos a utilizar una máquina con las siguientes características:
Suponemos que un disco duro quiere transferir datos a la memoria del procesador, sabemos que el tiempo de latencia del disco es de 3 microsegundos. La velocidad de transferencia del disco será 20Mb/s. El procesador tiene una frecuencia de 2 Giga Hercios. El servicio de interrupción de rutinas (RSI) ejecuta 10 instrucciones de 3 ciclos de reloj cada una. La CPU necesita 8 ciclos de reloj adicional entre que detecta la interrupción y le pasa el control al RSI. Los tiempos de programación y finalización de la transferencia son de 20ns. . Por último sabemos que la transferencia será de 1000 datos de 4Bytes cada uno.
Para conocer el tiempo total que tarda la CPU en realizar toda la transferencia de datos tenemos que realizar las siguientes operaciones:
Primero conoceremos cuanto tiempo tarda el procesador en realizar un ciclo de reloj, para esto dividiremos 1 entre la frecuencia que tiene el procesador, que es 2 GHz. Por lo tanto, podemos saber que la CPU tarda 1/2 =0.5 en realizar un ciclo de reloj.
Sabemos que tarda 8 ciclos de reloj desde que detecta la interrupción hasta que le pasa el control al RSI, si tardamos 8 y cada ciclo es de 0.5 nano segundos, tendremos 8*0.5=4ns.
Ahora queremos conocer el tiempo que tarda en ejecutar una instrucción, que será 3 ciclos de reloj multiplicado por 0.5ns., el resultado es 1.5ns.
Después calcularemos el tiempo de ejecución RSI, que será 10 instrucciones multiplicado por el tiempo que tarda cada instrucción que es 1.5, por lo tanto será 10*1.5=15ns.
Por último, tenemos que realizar 1000 interrupciones, que multiplicado por el tiempo que tarda en ejecutar cada una (RSI) será igual a 1000*15=15000ns
15000ns que añadidos al tiempo que tarda en programar y finalizar la ejecución será igual a 15000+20ns= 15020ns.
Por lo tanto podemos saber que la CPU tardará 15020 nano segundos en transferir 1000 bloques de 4 Bytes cada uno, es decir, 4000 Bytes.