Dlaczego system może przestać odpowiadać?

12

Właśnie doturuchomiłem (program do rysowania grafów kierowanych) z plikiem wejściowym, który był tak duży, że nie można go było renderować w rozsądnym czasie.

Cały mój system zamarł. Ledwo mogłem dotrzeć do konsoli tekstowej z Ctrl+ Alt+, F1aby zabić dot, ale zajęło to kilka minut.

Dlaczego system pozwala na coś takiego? Dlaczego daje niekrytyczny program, taki jak dot99% systemu, i wykorzystuje pozostały 1% do pozostania w gotowości?

Christoph Wurm
źródło
Możliwy duplikat We / Wy dysku twardego unix.stackexchange.com/questions/5565 / ... i unix.stackexchange.com/questions/11/…
George M

Odpowiedzi:

15

Tak działa GNU / Linux i inne systemy wielozadaniowe, dzielą procesor między uruchomionymi procesami, dotnie 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 - dotnie 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 dotrobi 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 dotzajmowałoby 99% czasu procesora, istnieje szansa, że ​​przejście na terminal tekstowy byłoby prawie natychmiastowe, co się dzieje, że jądro musi przenieść dotrzeczy z pamięci, aby móc je Xponownie umieścić w pamięci, aby Xmogły zobaczyć klucze po prostu naciskasz i przesuwasz się do terminala tekstowego, a następnie jądro musi Xwyjść z pamięci, dla dotktórej wciąż działa, a następnie wyprowadzić dotsię, 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ć psod systemu plików) .

njsg
źródło
Hm, więc sposobem na lepsze wrażenia użytkownika byłoby określenie niektórych programów jako „ lepkich ”, a tym samym zapobieganie ich zamianie.
Christoph Wurm
Lepkość nie działała tak od lat 70. i oryginalnej semantyki „lepkiego” kawałka. Państwo może jednak zablokować (części) programów w pamięci, więc nie mogą być zamieniane. Pamięć główna jest jednak drogim luksusem, więc nie da się tego wszystkiego zrobić.
Alexios
@njsg, dzięki za dobre wyjaśnienie. Następne pytanie: czy nie ma sposobu, aby zapobiec przeładowaniu? Rozumiem, że zamiana sprawia, że ​​wykorzystanie pamięci jest bardziej efektywne, ale powinny istnieć ograniczenia. IMHO proces tak istotny jak X nigdy nie powinien być usuwany z pamięci. Czy istnieje sposób skonfigurowania systemu uniksopodobnego, tak aby niezbędne procesy były chronione przed przeniesieniem? Na serwerze to inna sprawa, ale na pulpicie wolałbym mieć proces wymagający dużej ilości pamięci do awarii niż przestać ze mną rozmawiać.
A. Donda