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:

1. Tiempo de respuesta
2. Tiempo de CPU

A su vez, el tiempo de CPU lo dividimos en:

1. Tiempo de CPU utilizado por el usuario.
2. 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:

a. Tiempo de CPU utilizado por el usuario. Es el tiempo que la CPU utiliza para ejecutar el programa delusuario. No se tiene en cuenta el tiempo de espera debido a la E/S o el tiempo utilizado para ejecutar otros programas

b. 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:

1. Tiempo de CPU del usuario = 90.7 segundos

2. Tiempo de CPU utilizado por el sistema = 12.9 segundos

3. Tiempo de CPU= 90.7 seg.+ 12.9seg = 103.6

4. Tiempo de respuesta = 2 minutos 39 segundos =159 segundos

5. Tiempo de CPU = 65% del tiempo de respuesta = 159 segundos*0.65 = 103.6

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

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

por lo que el tiempo de CPU podemos expresarlo como:

Tiempo_de_CPU = NI • CPI • Tc.

o bien:

Tiempo CPU

  • 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:

Número de ciclos de reloj

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:

Expresiones

Fuente: Estructura de Computadores, Facultad de Informática, UCM