Эту особенность заметили пользователи еще в середине 1990-х-х, а впоследствии ее техническую природу объяснил инженер Microsoft Рэймонд Чен. Во время такого перезапуска Windows передавал специальный флажок EW_RESTARTWINDOWS в старую 16-битную функцию ExitWindows. Об этом рассказал Раймонд Чен в блоге Microsoft.

Смотрите также Как ускорить запуск Windows 11 за несколько минут

Как работал "быстрый перезапуск" в Windows 95?

В результате система не выполняла полную перезагрузку компьютера. Сначала завершал работу 16-битный ядровый компонент Windows, после него останавливался 32-битный менеджер виртуальной памяти. Процессор возвращали в реальный режим, а управление снова передавалось программе win.com с сигналом, который означал просьбу повторно запустить Windows в защищенном режиме.

win.com показывал сообщение Please wait while Windows restarts и пытался восстановить систему в том же состоянии, в котором она была во время первоначального запуска. Для этого программе приходилось сбрасывать параметры командной строки и возвращать глобальные переменные к начальным значениям. Процесс был сложным, в частности потому, что win.com был написан на языке ассемблера.

Как пишет PCgamer, отдельной проблемой была память. Файлы формата .com при запуске получали всю доступную конвенциональную память при запуске. win.com освобождал все, что выходило за пределы собственного кода, чтобы Windows в защищенном режиме имела один большой непрерывный блок памяти. Если другие программы успевали занять эту область, память становилась фрагментированной, и восстановление исходного состояния становилось невозможным. В таком случае система отказывалась от быстрого перезапуска и переходила к полному ребуту.

Если же память оставалась в нужном виде, win.com переходил непосредственно к коду запуска Windows в защищенном режиме. Менеджер виртуальных машин создавался заново, запускалась графическая оболочка, и пользователь видел, что Windows просто перезапустился без полного выключения компьютера.

Почему этот механизм был настолько хрупким?

В те годы разработчики часто использовали нестандартные оптимизации ради экономии памяти. Одним из распространенных приемов было повторное использование кода,, который больше не вызывался, в качестве области для хранения переменных. В win.com первые байты точки входа программы использовались как глобальная переменная,, поскольку код точки входа выполнялся только один раз. Для режима быстрого перезапуска это не создавало проблем, ведь выполнение не возвращалось к самому началу программы.

Впрочем, быстрый перезапуск имел недостатки. Некоторые пользователи замечали, что повторное использование этого режима могло приводить к сбою. Сам Рэймонд Чен не смог стабильно воспроизвести эту проблему, но предполагает, что отдельные драйверы не полностью сбрасывали свое состояние. После нескольких перезапусков накапливались ошибки, которые проявлялись уже во время завершения работы системы.