Questo è il modo in cui GNU / Linux e altri sistemi multitasking funzionano, condividono il processore tra i processi in esecuzione, dot
non avranno il 99%, ma il 100% nel 99% delle volte. Ogni processo domina il processore per un certo periodo di tempo.
Questo è gestito dagli scheduler (Linux ha diversi programmatori, alcuni usano solo la solita strategia, altri cercano di dedicare più tempo alle interfacce utente e così via).
Ora, nel tuo caso, il problema era - probabilmente - che dot
non richiedeva molto tempo per il processore, ma molta memoria. E quando un programma usa troppa memoria, c'è un thrashing , che è esattamente un processo che congela il sistema, non perché dot
sta facendo molto, ma perché il kernel deve spostare le pagine di memoria avanti e indietro tra il disco (partizione di swap) e la memoria di sistema.
Anche se dot
impiegava solo il 99% del tempo della CPU, è probabile che passare a un terminale di testo sarebbe quasi immediato, ciò che accade è che il kernel deve spostare le dot
cose dalla memoria in modo da poterle rimettere X
in memoria in modo che X
possano vedere le chiavi basta premere e passare al terminale di testo, quindi il kernel deve X
uscire dalla memoria per la dot
quale è ancora in esecuzione, e quindi anche spostarsi dot
fuori per spostare login
nuovamente i processi del terminale di testo (forse solo ?) in memoria. (Se questo sembra disordinato, non è solo perché l'esempio è disordinato - la realtà è così disordinata.)
Un esempio è se accedi al terminale di testo, potresti essere in grado di premere semplicemente i tasti, premere backspace e accadrà felicemente in tempo reale, ma se fai qualcosa di semplice come eseguire un piccolo strumento come ps
, "si bloccherà "per un po 'perché deve liberare memoria da caricare ps
(e deve anche attendere nella coda di I / O del disco, che viene pesantemente utilizzata per spostare i dati da e verso la memoria, fino a quando non è in grado di richiedere ps
dal filesystem) .