Questo è il modo in cui GNU / Linux e altri sistemi multitasking funzionano, condividono il processore tra i processi in esecuzione, dotnon 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 dotnon 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é dotsta 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 dotimpiegava 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 dotcose dalla memoria in modo da poterle rimettere Xin memoria in modo che Xpossano vedere le chiavi basta premere e passare al terminale di testo, quindi il kernel deve Xuscire dalla memoria per la dotquale è ancora in esecuzione, e quindi anche spostarsi dotfuori per spostare loginnuovamente 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 psdal filesystem) .