JMP infinito al finalizar el programa

JMP infinito al finalizar el programa

de Guillermo Daniel Toyos Marfurt -
Número de respuestas: 2

Buenas, entiendo que al finalizar un programa debemos dejarlo en loop infinito al final (haciendo nada) para evitar que la cpu continue leyendo las siguientes direcciones de memoria y sucedan cosas indefinidas.

Mi duda proviene de cuando uno hace loops infinitos en lenguajes de alto nivel. Por ejemplo al ejecutar el siguiente codigo de Python:

while True:
    continue;

Mi cpu esta consumiendo al 100% uno de los núcleos. Un JMP infinito en assembly no genera este consumo? Si no es así, por qué?

En respuesta a Guillermo Daniel Toyos Marfurt

Re: JMP infinito al finalizar el programa

de Gustavo Brown -

Guillermo,

  Primero te comento desde el punto de vista de Arquitectura de computadoras: 

  - para una CPU sencilla, cuando esta en funcionamiento debe estar procesando algo. O sea, al resetear la CPU se inicializan los registros entre los cuales está su "PC" y ahi comienza a "ejecutar".

Si la CPU no tiene una instrucción que haga parar la ejecución, la CPU va a ir tomando instrucciones de la memoria y ejecutándolas. La CPU no sabe la lógica de tu programa, solo sabe leer instrucciones y ejecutarlas, asi que no sabe si lo que apunta el PC es una instruccion de tu programa, o datos (o basura). Entonces en un programa que tu hagas para esa CPU podés querer ponerle un bucle infinito al final para que no siga ejecutando "basura". Pero por ejemplo si estás implementando una subrutina claramene no vas a poner un bucle infinito al final de la misma sino el código que retorna de la subrutina.

Algunas CPUs tienen instrucciones para "parar" la ejecución en un punto (suele llamarse HALT a esa instrucción), que puede por ejemplo dejar de procesar instrucciones pero quedar atento a si ocurre una interrupción y ahi retomar la ejecución (saltando a la rutina que atiende a esa interrupción). 

Respecto a tu observación de que la CPU queda consumiento al 100% uno de los núcleos en tu programita de python:

En este curso en general ni nos metemos con arquitecturas de multiples núcleos por lo que nuestros ejemplos son siempre con CPUs de 1 core. En ese caso tu observación sería que la CPU queda consumiendo 100% del CPU. El porcentaje de CPU es un tema del sistema operativo que corre en tu computador. Desde el punto de vista de este curso el CPU va a estar siempre consumiendo el 100% porque no hay sistema operativo, lo que hay es el código que tu hayas escrito y la CPU está siempre ejecutando algo. 

Cuando tenés un sistema operativo éste se encarga de dividir el tiempo de cómputo entre todos los procesos que están ejecutando en cada momento y de ahi te puede dar un porcentaje de CPU. Todo esto te va a quedar claro cuando curses Sistemas Operativos. En tu ejemplo el programita no hace entrada/salida y esta en un bucle infinito por lo que es un proceso "cpu-bound" que solo consume toda la cpu que el sistema operativo le pueda dar, de ahi el 100% del core que ves.

Saludos,
  Gustavo