Cos'è l'intasamento della CPU?
È esattamente quello che sembra - un processo che passa troppo tempo ad occupare la CPU con il risultato che altri processi muoiono di fame per avere la possibilità di essere eseguiti. Con uno scheduler preemptive ben progettato che esegue processi ragionevolmente ben educati, questo non dovrebbe mai accadere, davvero.
In passato, la maggior parte dei sistemi operativi sul PC ad eccezione di UNIX impiegava uno scheduler cooperativo. Questo significa che mentre lo scheduler del sistema operativo decideva quale processo sarebbe stato eseguito successivamente, una volta che un processo era stato programmato, avrebbe continuato ad essere eseguito indefinitamente fino a quando non avesse ceduto volontariamente il controllo della CPU. Spesso le chiamate di sistema che sono impiegate per eseguire operazioni di input/output e simili (cose che non hanno bisogno del tempo della CPU) sarebbero quindi progettate in modo tale da permettere ad un processo di lasciare andare la CPU e dare ad un altro processo la possibilità di essere eseguito. Quindi, potenzialmente, se un processo disonesto non fa nessuna delle chiamate di sistema progettate per far fruttare la CPU, potrebbe potenzialmente affamare ogni altro processo e portare scompiglio nel sistema.
Con uno scheduler moderno e sofisticato come il Completely Fair Scheduler, la lunghezza massima di tempo che un processo potrebbe avere per essere eseguito in un tratto è decisa al momento in cui è programmato. CFS cerca anche di assicurare fino a un certo punto che due o più processi in competizione per la CPU ottengano il tempo della CPU in proporzione alle loro priorità per un periodo di tempo sufficientemente grande. Inoltre, se un processo ha poche possibilità di essere eseguito, la probabilità che venga selezionato nel successivo turno di programmazione aumenta. Questo però non assicura automaticamente che ogni processo ottenga abbastanza tempo di CPU per essere eseguito. Per esempio, se c'è un numero molto grande di processi (per lo più) legati alla CPU nel sistema che supera notevolmente il numero di CPU disponibili, allora i processi otterrebbero ancora molto meno tempo di CPU di quello di cui hanno effettivamente bisogno. Tuttavia, un tale sistema è un esempio di sovraccarico e non generalmente un hog.
Un esempio di dove c'è un potenziale di hogging della CPU anche con uno scheduler molto equo è quando un processo è in attesa su un dispositivo e un altro processo non può essere eseguito su quella CPU senza causare effetti negativi sul sistema (per esempio, è in attesa di dati da un dispositivo lento o non reattivo che può scrivere solo su un buffer molto piccolo, e un altro processo non può essere programmato in quanto il contenuto del buffer è in uno stato incompleto). Questo può accadere a volte con cattivi dispositivi/driver e dovrebbe essere trattato come un bug.
A proposito, molte persone tendono a equiparare un utilizzo della CPU del 100% con un monopolizzatore di CPU. Questa è una falsa equivalenza. Se un processo sta eseguendo un ciclo legato alla CPU su un sistema che altrimenti andrebbe per lo più inattivo, allora è probabile che il processo finisca per occupare il 90-100% della CPU. Non è nemmeno necessariamente una cosa negativa, a seconda che il ciclo legato alla CPU sia intenzionale o meno - il processo sta semplicemente usando risorse per fare il suo lavoro che altrimenti andrebbero sprecate. Detto questo, tale comportamento non è generalmente incoraggiato in certi ambienti di produzione perché nella modalità idle il sistema operativo impiega speciali interruttori nell'hardware per far funzionare la CPU in una modalità a basso consumo, riducendo così i costi operativi. Come tale, ci si aspetta che i processi siano frugali nel loro uso della CPU.
Articoli simili
- Qual è la differenza tra le prese 'CPU FAN', 'CPU OPT' e 'SYS FAN' sulla scheda madre?
- Qual è il miglior software di monitoraggio hardware durante il gioco, che include la temperatura della GPU e della CPU e l'utilizzo della RAM?
- Cos'è un file .dex? Cos'è dexopt? Che cos'è odex? Cos'è dexoat? Cos'è ELF? Come funziona tutto questo?
- Cos'è un burn-in della CPU?