¿Qué significa realmente el uso de la CPU para un proceso?

4

Supongamos que la computadora tiene un solo núcleo: ¿qué significa exactamente que el proceso A se ejecute al 100% de la capacidad de la CPU en comparación con el 10% de la capacidad de la CPU?

Si la CPU fuera de 2.0 GHz, ¿significa eso en un intervalo de tiempo para el proceso A, que el procesador estaba ejecutando 2 mil millones de pasos por segundo (si está al 100% del límite), pero solo estaría ejecutando 200 millones de pasos (si el 10% del límite) )?

¿Qué causaría el escenario del 100% frente al escenario del 10%?

Dave Stibrany
fuente
La diferencia entre el 10% de uso y el 100% de uso es clara. En un caso, la tarea en cuestión es tomar el 10% de las capacidades de ejecución. En otras palabras, cada vez que se activa el reloj, se asigna un 10% del tiempo de ejecución a ese proceso. Del mismo modo, el 100% de uso significa que el 100% del tiempo de ejecución se asigna a ese proceso (es decir, ninguna otra tarea de procesos puede ejecutarse) creando así una situación de interbloqueo. Mi ejemplo utiliza un solo proceso para hacer que el proceso de la CPU que ejecuta una tarea sea más fácil de entender.
Ramhound
Cuando dices 'cada vez que se activa el reloj', ¿es lo mismo que un intervalo de tiempo o es un tic real de la CPU?
Dave Stibrany
En este caso, @DaveStibrany es solo un intervalo de tiempo genérico asignado por el programador de tareas del sistema operativo (debería poder encontrar detalles de granularidad para su arquitectura de sistema operativo / procesador específico si necesita números reales). Volviendo a la idea del bucle infinito, si escribiera un programa que solo tuviera una gran lista de NOP instrucciones, que todavía se clasificarían técnicamente como uso de la CPU (durante los segmentos de tiempo en los que el sistema operativo le dice a ese programa "Ok, es su turno de correr durante los siguientes X microsegundos", incluso si mi programa no está haciendo nada, todavía es corriendo - y eso es lo que describe el porcentaje de uso de la CPU.
Breakthrough
@DaveStibrany - Digamos que tiene una CPU Intel de 2GHz. Esto significa que cada vez que se dispara la señal del reloj, la CPU procesará X Instrucciones de funcionamiento x86. Cuántas instrucciones se realicen realmente depende de varias cosas diferentes. Si tiene una CPU x86 de 2 núcleos, significa que puede realizar 2 instrucciones distintas en el mismo período de tiempo. Esto significa que 2 procesos diferentes tienen la misma prioridad o que un solo proceso puede realizar una instrucción dos veces más rápido (requiere que escriba dicha operación de cierta manera para hacerlo).
Ramhound
Un buen punto de partida para comprender lo que realmente sucede durante un ciclo de reloj es aprender el lenguaje ensamblador x86. Una vez que haces eso, entiendes lo que es una instrucción.
Ramhound

Respuestas:

7

El uso de la CPU es calculado por el sistema operativo proceso / programador de tareas . De hecho, si el uso de la CPU es del 10%, eso indica que la tarea se está ejecutando activamente durante el 10% de los períodos unitarios del programador de tareas; otros programas pueden ejecutarse en el 90% restante del tiempo de CPU, o el sistema operativo simplemente estará inactivo. Del mismo modo, si el total Uso de la CPU para todos programas es del 10%, lo que indica que no se están ejecutando programas en el sistema el 90% del tiempo.

Dado que ningún programa se ejecuta en un sistema operativo multitarea (como Windows o Linux), el uso de la CPU es una medida de qué porcentaje de los ciclos de la CPU están dedicados a ejecutar ese programa en particular. Esta es la razón por la que si tiene un bucle infinito en un programa, aunque no se está haciendo ningún "trabajo", el uso de la CPU todavía se acerca al 100% (ya que el programa está intentando usar todos los períodos de programación que le ofrece el sistema operativo para ejecutar algunos código).

Aunque los procesos son siempre ejecutándose, no usan el 100% de la CPU en la mayoría de los casos, ya que un proceso puede esperar a que ocurra un evento / interrupción en particular, o han indicado al sistema operativo que suspenda / suspenda su operación por un corto período de tiempo.

Breakthrough
fuente
@Breakthrough - ¿Qué consideras 'simple' porque siempre lo he considerado como un programa escrito en lenguaje ensamblador y ciertamente puedes hacerlo?
Ramhound
2
@Ramhound uno que no se ejecuta bajo una planificador de procesos , es decir, uno que no se ejecuta bajo un sistema operativo multitarea. Esto fue posible en DOS, pero el mismo Windows programa cuándo se ejecuta ese código en particular y por cuánto tiempo (interrumpirá el proceso y permitirá que más se siga ejecutando hasta que sea el "turno" de sus procesos).
Breakthrough
Creo que "tiempo real" es una palabra mejor que "simple".
surfasb
1
@surfasb los dos no son comparables en este contexto. UNA sistema operativo en tiempo real simplemente garantiza que su proceso puede actuar sobre algún evento / interrupción dentro de X micro / milisegundos, pero de hecho su programa aún se ejecuta bajo un sistema operativo.
Breakthrough
Es sorprendente la cantidad de código del sistema operativo que se requiere para realizar tareas simples. El printf de su programa "Hello world" típico, si se ejecuta en una ventana de modo de caracteres en Windows, en realidad toma más código del sistema operativo (¡parte de ello se ejecuta en otro proceso!) Que lo que haría una simple ventana de mensaje. Hay mucho código involucrado en I / O para cualquier cosa, para el caso. Un programa que se limita a llamar a las funciones de NO OS puede "ejecutarse" pero no puede leer ningún dato desde cualquier lugar ni enviar ningún resultado a ninguna parte. También podría no ejecutarlo.
Jamie Hanrahan