Перейти к содержимому
2.3. Процессы и многозадачность

Иллюзия одновременности и что делать с зависшим

Посмотрите, как планировщик гоняет процессы между тремя состояниями, а потом разберитесь, что делать, когда один из них перестал отвечать.

// состояния

Каждый процесс в каждый момент находится ровно в одном из трёх состояний. Ядро здесь одно, поэтому «выполняется» вмещает только одного - выберите процесс и переводите его кнопками ниже.

Выберите процесс, потом действие

Выполняется

1

Прямо сейчас использует процессорное ядро. Место одно: у нас одно ядро, а процессов больше.

    Готов

    Мог бы выполняться хоть сейчас, но ядро занято другим. Стоит в очереди и ждёт своей доли.

      Ожидает

      Не может выполняться, пока не произойдёт что-то внешнее: ответ диска или данные из сети. Процессорное время ему сейчас не нужно вообще.

        • открывает большой файл
        • ждёт своей очереди
        • проверяет файлы в фоне
        • Операции с диском в десятки тысяч раз медленнее работы процессора. Пока программа ждёт данные, процессор мог бы сделать миллионы вычислений - поэтому она уходит в ожидание и немедленно освобождает ядро. Обратите внимание: место в «выполняется» освободилось.

        • Внешнее событие произошло, и процесс снова готов работать. Но ядро он получит не сразу, а при первой возможности: сначала встанет в очередь готовых.

        • Планировщик выбрал этот процесс из очереди готовых. Кнопка доступна, только когда ядро свободно: пока на нём кто-то есть, встать туда нельзя.

        • Процесс ничего не ждёт и сам бы не ушёл: его снимают принудительно, когда истекает выданный отрезок времени. Так ни одна программа не может захватить процессор навсегда.

        В настоящей системе ядер обычно несколько, а процессов 100-300, и переключения происходят сотни раз в секунду. Здесь одно ядро и три процесса, чтобы правило «одно место в «выполняется» было видно глазами.

        // что именно зависло

        Пять ситуаций: что зависло и что с этим делать

        Зависший процесс изолирован: он не может заразить соседей, и система продолжает работать. Поэтому первый вопрос - не «как перезагрузиться», а «что именно перестало отвечать». Выберите свою ситуацию.

        Что перестало отвечать?

        Смотрите на то, что реагирует, а не на то, что не реагирует: работает ли остальная система, двигается ли курсор, откликаются ли другие окна.

        Зависла одна вкладка: остальной браузер жив

        Chrome и другие современные браузеры запускают отдельный процесс на каждую вкладку, плюс отдельные на плагины и отрисовку. Сделано это ровно для такого случая: бесконечный цикл в скрипте одной страницы не должен ронять весь браузер. Закройте вкладку или откройте встроенный диспетчер задач браузера - в Chrome это Shift+Esc - и снимите именно её процесс. Ни браузер, ни система при этом не пострадают.

        Одна программа не отвечает - снимайте задачу

        Классическое зависание: бесконечный цикл в коде, взаимная блокировка потоков или ожидание ресурса, который никогда не придёт. Процесс изолирован, соседей он не заражает. В Windows это Ctrl+Shift+Esc, диспетчер задач, правой кнопкой по процессу и «Снять задачу»; в macOS - Cmd+Option+Esc, «Принудительное завершение»; в Linux - kill с номером процесса или системный монитор. Перезагружать машину не нужно.

        Задача не снимается: процесс ждёт ответа от ядра

        Когда вы снимаете задачу, система сначала посылает процессу сигнал завершения, а если тот не реагирует - принудительный сигнал уничтожения. Не срабатывает это в одном случае: процесс застрял внутри системного вызова и ждёт ответа от драйвера - например, от диска, который перестал отвечать, или от сетевого хранилища, которого нет в сети. Убить его нельзя, пока ядро не отпустит. Подождите тайм-аут, отключите проблемное устройство - и снимайте задачу. Если диск сыпется, начинать надо не с этого, а со спасения данных.

        Встали системные службы: рабочий стол ещё дышит

        Курсор двигается, потому что его рисует драйвер видеокарты, а вот окна не открываются: встал системный процесс, отвечающий за оболочку. В Windows это часто проводник - его можно перезапустить прямо в диспетчере задач, не трогая всё остальное. Если не помогает, попробуйте переключиться на другой рабочий стол или войти по сети: система жива, встала только её видимая часть.

        Не реагирует ничего - вот здесь перезагрузка оправдана

        Курсор не двигается, клавиатура молчит, звук оборвался - значит встал не пользовательский процесс, а системный: драйвер устройства или компонент ядра. Такие работают в привилегированном режиме, и снять их нечем - ядро и есть тот, кто снимает. Это единственный случай, когда правильный ответ - перезагрузка. Если повторяется регулярно, ищите свежий драйвер: в современных системах ошибка ядра почти всегда приходит от них, а не от самой ОС.

        Интерактив разработан - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/illyuziya-odnovremennosti