Можно ли было частично отключить ОС, а затем снова загрузить ее в рабочее состояние? - PullRequest
0 голосов
/ 09 июня 2011

Я прочитал этот очень интересный вопрос о том, как компьютеры перезагружаются , и, хотя я совсем ничего не знаю о разработке ОС, мне было интересно, можете ли вы частично выключить систему, а затем загрузитьвыполните резервное копирование с этого момента.

Например, в Linux, если я правильно прочитал вывод во время выключения, он выглядит примерно так:

  1. Send Terminate / KILL toвсе процессы.
  2. Завершение работы служб / демонов
  3. Выключение.

И последовательность запуска выглядит примерно так:

  1. BIOS, Bootloader
  2. Загрузка ядра и модулей
  3. Запуск служб / демонов
  4. Запуск процессов

Итак, можем ли мы завершить работу после 2, а затем начать обратно?с 3 года?По сути, я думаю, что это должно сбрасывать процессы и демоны, сохраняя ядро ​​в памяти, таким образом экономя время загрузки ядра при обычной (пере) загрузке.

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Сосредоточение на Linux здесь:

«Перезагрузка» пользовательского пространства (и некоторых аппаратных компонентов)

Вы упускаете что-то из своей последовательности загрузки с точки зрения того, какслужбы, демоны и программы запускаются.

Введите init в Linux.Цель /sbin/init, которая может быть system V init, upstart или systemd, в точности запускает все эти другие процессы.Все эти утилиты инициализации имеют функции для управления сервисами, которые они запускают под ними.

Теперь в системе Linux также есть концепция уровней запуска, а именно:

0 = shutdown
1 = single user recovery mode, no networking
2 = ?
3 = multi user networking no X
4 = ?
5 = multi user networking X

?те не строго определены.В любом случае, если вы ввели root и прямо сейчас набрали init 3, предполагая, что вы работаете в Linux, X и каждый x-клиент будут прерваны.Конечно, если что-то разрешено на заданном уровне запуска, оно не будет уничтожено, но если вы хотите только перезагрузить определенный процесс, то это достигается довольно хорошо.Вариант использования для перезапуска системных демонов - в ответ на обновление, и большинство менеджеров пакетов в наши дни фактически сделают это для вас с помощью выбранного вами инструмента initscript.

Таким образом, мы можем перезапустить весь наш графический интерфейс, мы можем перезапустить любойдемон.Мы могли бы убить любой другой процесс тоже.Перезагрузка аппаратных драйверов?Я уже могу сделать это на лету через modprobe, поэтому, если мне захочется обновить мои графические драйверы, я смогу init 3, удалить старые, вставить новые и продолжить.

Ваш менеджер пакетов знает, как перезапустить системные демоны, и вы всегда можете последовать его совету, чтобы выйти из системы и снова войти в нее;таким образом, Linux уже довольно эффективен в плане предотвращения перезагрузок при обновлении.

«Перезагрузка» ядра

Так что, в принципе, мне нравится думать, что большая часть Linux может быть такой »перезагрузил "без перезагрузки.Итак, что осталось?

  1. Я не могу перезагрузить ядро.
  2. Я не могу легко размонтировать корневую файловую систему.Я полагаюсь на это для этого недавно загруженного пользовательского пространства.Отказ от ответственности: вы могли бы просто перезагрузить initramfs во время «перезагрузки» ядра, поэтому мы здесь зависим от 1.

Теперь вопрос в том, как перезагрузить ядро?Ну, на самом деле ядро ​​- это не какая-то особая магия, это просто другая компьютерная программа, скопированная в память, поэтому мы можем просто написать программу где-нибудь, которая записывает поверх нашего ядра и передает ему выполнение ...

Это существует,Верьте или нет, и называется kexec.Я оставлю страницу википедии , чтобы суммировать с ней проблемы:

Хотя реализация такого механизма, как kexec, возможна, возникает две основные проблемы:

  1. новое ядро ​​перезапишет память текущего запущенного, пока оно все еще выполняет
  2. новое ядро ​​обычно ожидает, что все физические устройства будут в четко определенном состоянии (как они находятся после перезагрузки системыкогда BIOS (или прошивка) сбрасывает их в «нормальное» состояние).Пропуск реальной перезагрузки может оставить устройства в неизвестном состоянии, и новому ядру придется восстанавливаться после этого.

kexec, в отличие от завершения работы системы, автоматически не останавливает файловые системы или процессы длявы;Вы ответственны за это.

Так что у вас это есть.В зависимости от того, какую часть вам нужно перезагрузить, в Linux большинство из них возможно.

0 голосов
/ 09 июня 2011

Большинство производителей процессоров / компьютеров имеют несколько различных состояний питания, в которых может находиться компьютер. Intel, вероятно, наиболее подходит для вашего вопроса, который звучит так, как будто речь идет о компьютерах общего назначения.Проверьте эту ссылку:

Все о состояниях питания системы (S0-S5)

Чтобы узнать больше о том, как состояния питания работают для Intel,какой системный контекст сохраняется в каждом состоянии и т. д. Как правило, чем выше S-состояние, в которое вы входите, тем меньше системного контекста требуется сохранить, и, следовательно, чем дольше система будет выходить из этого состояния и возвращаться к S0 (полностью в рабочем состоянии).

...