Tak działa GNU / Linux i inne systemy wielozadaniowe, dzielą procesor między uruchomionymi procesami, dot
nie będą miały 99%, ale 100% przez 99% czasu. Każdy proces dominuje nad procesorem przez określony czas.
Zajmują się to planistami (linux ma kilka harmonogramów, niektórzy po prostu stosują zwykłą strategię, inni próbują dać więcej czasu interfejsom użytkownika i tak dalej).
W twoim przypadku problemem było - prawdopodobnie - dot
nie zajęło to dużo czasu procesora, ale dużo pamięci. A kiedy program zużywa zbyt dużo pamięci, następuje przeładowanie , co jest dokładnie procesem, który powoduje zawieszanie się systemu, nie dlatego, że dot
robi dużo, ale dlatego, że jądro musi przenosić strony pamięci tam iz powrotem między dyskiem (partycja wymiany) i pamięć systemową.
Nawet jeśli dot
zajmowałoby 99% czasu procesora, istnieje szansa, że przejście na terminal tekstowy byłoby prawie natychmiastowe, co się dzieje, że jądro musi przenieść dot
rzeczy z pamięci, aby móc je X
ponownie umieścić w pamięci, aby X
mogły zobaczyć klucze po prostu naciskasz i przesuwasz się do terminala tekstowego, a następnie jądro musi X
wyjść z pamięci, dla dot
której wciąż działa, a następnie wyprowadzić dot
się, aby przenieść procesy terminala tekstowego (może po prostu login
?) z powrotem do pamięci. (Jeśli wygląda to niechlujnie, to nie tylko dlatego, że przykład jest niechlujny - rzeczywistość jest taka niechlujna).
Przykładem może być zalogowanie się w terminalu tekstowym, możesz po prostu naciskać klawisze, naciskać klawisz Backspace i na szczęście stanie się to w czasie rzeczywistym, ale jeśli zrobisz coś tak prostego, jak uruchomienie małego narzędzia ps
, to „zamrozi się” „przez pewien czas, ponieważ musi zwolnić pamięć do załadowania ps
(a także musi czekać w kolejce dyskowej we / wy, która jest intensywnie używana do przenoszenia danych do iz pamięci, aż będzie w stanie zażądać ps
od systemu plików) .