Есть по крайней мере две причины, почему вы не можете это сделать.
Первый. Спящий режим работает благодаря состояниям питания ACPI. Это не так просто, как "сброс оперативной памяти на жесткий диск и выключение". Оперативная память - это еще не все, есть также устройства, которые необходимо вернуть в прежнее состояние. Вот где ACPI присоединяется к вечеринке - он позволяет приостанавливать устройства при переходе в состояние S5 и возобновлять их при возврате к S0. Но S5 подразумевает выключение, поэтому вы не можете перевести компьютер в спящий режим, не выключив его.
Второй. Давайте предположим, что у нас есть какое-то оборудование, которое позволяет переводить компьютер в спящий режим, оставляя его включенным. Это создает проблему, аналогичную тем, с которыми вы можете столкнуться при работе с параллельными вычислениями.
Компьютеры работают последовательно. Они выполняют ряд простых (очень простых, например, "увеличить это число на 4"), одну за другой. Современные ПК имеют многоядерные процессоры и теоретически могут обрабатывать несколько команд одновременно, но это не всегда возможно. Например, допустим, у нас есть три инструкции.
- Прочитайте X от пользователя.
- Умножьте X на 2.
- Прирост Х на 7.
Шаг 2 не может быть обработан, пока шаг 1 не будет завершен, потому что X неизвестен в то время. Аналогично, шаг 3 не может быть обработан до тех пор, пока шаг 2 не будет завершен, потому что значение X очень вероятно изменится на шаге 2. Эти шаги должны быть обработаны один за другим.
Теперь давайте представим, что у нас есть компьютер, который обрабатывает банковские переводы. У вас есть некоторая сумма денег на вашем банковском счете, и вы хотите перевести 100 долларов на счет вашего друга. Алгоритм выглядит так и должен быть обработан шаг за шагом по некоторым причинам:
- Уменьшите сумму, связанную с вашей учетной записью, на 100 долларов.
- Увеличьте сумму на счете вашего друга на 100 долларов.
- Передача обработана, поэтому удалите ее из очереди на передачу.
Компьютер начинает обрабатывать эту передачу и внезапно, между шагами 1 и 2, отключается из-за сбоя питания.
Теперь, если компьютер не был «спящим, но живым», он начнет загружаться и обнаружит, что что-то пошло не так - он будет знать, что он должен проверить все последние операции. Все отлично.
Но если он был «спящим, но живым» до того, как начал обрабатывать шаг 1, есть проблема - компьютер не знает, что что-то пошло не так, потому что он помнит, что все было в порядке, когда он был в спящем режиме. Но данные на жестком диске были обновлены, и $ 100 уже снято с вашего аккаунта, но еще не переведено на аккаунт вашего друга. Но компьютер не знает об этом, потому что он произошел после спящего режима.
Компьютер возьмет с вашего счета еще 100 долларов и передаст их вашему другу. Первые 100 долларов пропали.
Существуют сотни тысяч подобных проблем, которые могут возникнуть из-за "спящего режима" работающей системы.