Чому система може не відповідати?


12

Я щойно виконував dot(програма для малювання спрямованих графіків) із вхідним файлом, який був настільки великим, що його не вдалося винести за розумну кількість часу.

Вся моя система замерзла. Я ледве встиг до текстової консолі з Ctrl+ Alt+, F1щоб убити dot, але це зайняло кілька хвилин.

Чому система дозволяє щось подібне? Чому вона дає некритичну програму, таку як dot99% системи, а решту 1% використовує для того, щоб залишатися чуйними?


Можливий дублікат вводу / виводу важкого диска unix.stackexchange.com/questions/5565/… та unix.stackexchange.com/questions/11/…
Джордж М

Відповіді:


15

Ось так працюють GNU / Linux та інші багатозадачні системи, вони поділяють процесор між запущеними процесами, dotне матимуть 99%, але 100% протягом 99% часу. Кожен процес домінує над процесором протягом певного періоду часу.

Цим займаються планувальники (у Linux є кілька планувальників, деякі просто використовують звичайну стратегію, деякі намагаються приділити більше часу користувальницьким інтерфейсам тощо).

Тепер у вашому випадку проблема, ймовірно, dotполягала в тому, що це не забирало багато процесорного часу, але багато пам’яті. І коли програма використовує занадто багато пам'яті, відбувається обмолот , що є саме процесом, який змушує систему замерзати не тому dot, що робить багато, а тому, що ядро ​​має переміщати сторінки пам’яті туди-сюди між диском (swap-розділ) і системну пам'ять.

Навіть якщо dot99% процесорного часу просто займає 99%, ймовірно, що зміна на текстовий термінал буде майже негайною, що трапляється, що ядро ​​має перемістити dotречі з пам'яті, щоб воно могло Xповернутись у пам'ять, щоб Xпобачити ключі Ви просто натискаєте та переходите до текстового терміналу, тоді ядро ​​має переміститися Xз пам'яті, для dotякої все ще працює, а потім також переміститися dot, щоб перемістити текстові термінальні процеси (можливо просто login?) назад у пам'ять. (Якщо це виглядає безладним, це не лише тому, що приклад безладний - реальність така безладна.)

Наприклад, якщо ви увійдете в текстовий термінал, ви можете просто натиснути клавіші, натиснути зворотну простір, і це щасливо станеться в реальному часі, але якщо ви зробите щось таке просте, як запуск невеликого інструменту, як-от ps, він "застигне" "деякий час, тому що він повинен звільнити пам'ять для завантаження ps(а також доводиться чекати в дисковій черзі вводу / виводу, яка активно використовується для переміщення даних в пам'ять і з неї, поки вона не зможе запитувати psфайлову систему) .


Хм, таким чином шлях до кращого користувацького досвіду полягав би в тому, щоб вказати певні програми як " липкі " і таким чином не допустити їх заміни.
Крістоф Вюрм

Клейкість не спрацювала так з 70-х та оригінальна семантика "липкого" біта. Ви можете , однак, блокування (частини) програм в пам'яті , тому вони не можуть бути вивантажені. Основна пам'ять - це дорога розкіш, тому цього неможливо зробити для всього.
Олексій

@ njsg, дякую за гарне пояснення. Подальше запитання: чи немає способу запобігти молоті? Я розумію, що заміна робить використання пам'яті в цілому більш ефективним, але повинні бути обмеження. IMHO процес, такий важливий, як X, ніколи не повинен вилучатися з пам'яті. Чи існує спосіб налаштувати unix-подібну систему таким чином, щоб основні процеси були захищені від переміщення? На сервері це інша річ, але на робочому столі я б швидше зазнав краху в пам'яті процесу, ніж для того, щоб мій робочий стіл перестав говорити зі мною.
А.Донда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.