Я только что выполнил dot
(программу для рисования ориентированных графов) с входным файлом, который был настолько большим, что его нельзя было воспроизвести за разумное время.
Вся моя система замерзла. Я едва мог дойти до текстовой консоли с Ctrl+ Alt+, F1чтобы убить dot
, но это заняло несколько минут.
Почему система позволяет что-то подобное? Почему он дает некритическую программу, такую как dot
99% системы, и использует оставшиеся 1% для обеспечения отзывчивости?
scheduling
Кристоф Вурм
источник
источник
Ответы:
Именно так работают GNU / Linux и другие многозадачные системы, они разделяют процессор между запущенными процессами,
dot
не будут иметь 99%, но 100% в течение 99% времени. Каждый процесс доминирует над процессором в течение определенного периода времени.Это выполняется планировщиками (в linux есть несколько планировщиков, некоторые просто используют обычную стратегию, некоторые стараются уделять больше времени пользовательским интерфейсам и т. Д.).
Теперь, в вашем случае, проблема заключалась в том, что, вероятно,
dot
потребовалось не много процессорного времени, а много памяти. И когда программа использует слишком много памяти, происходит перебивание , которое является именно процессом, который заставляет систему зависать не потому, чтоdot
делает много, а потому, что ядру приходится перемещать страницы памяти назад и вперед между дисками (раздел подкачки) и системная память.Даже если бы
dot
просто потребовалось 99% процессорного времени, шансы на то, что переход на текстовый терминал был бы почти мгновенным, происходит из-за того, что ядро должно перемещать данныеdot
из памяти, чтобы оно моглоX
вернуться в память, чтобыX
видеть ключи вы просто нажимаете и переходите к текстовому терминалу, затем ядро должноX
выйти из памяти, дляdot
которой все еще выполняется, а затем также выйтиdot
, чтобы переместить процессы текстового терминала (возможно, простоlogin
?) обратно в память. (Если это выглядит грязно, это не только потому, что пример грязный - реальность такая грязная.)Например, если вы войдете в текстовый терминал, вы сможете просто нажимать клавиши, нажимать клавишу Backspace, и это с радостью произойдет в режиме реального времени, но если вы сделаете что-то столь же простое, как запуск небольшого инструмента, такого как
ps
, он «зависнет» «на какое-то время, потому что он должен освободить память для загрузкиps
(и он также должен ждать в очереди дискового ввода-вывода, которая активно используется для перемещения данных в память и из нее, пока он не сможет запроситьps
у файловой системы) ,источник