Что происходит во время ожидания и гибернации? - PullRequest
8 голосов
/ 27 мая 2009

Это просто ударил меня на днях. Что на самом деле происходит, когда я приказываю компьютеру перейти в режим ожидания или в спящий режим?

Более конкретно, какие последствия, если таковые имеются, имеют ли они для работающего кода? Например, если приложение сжимает некоторые файлы, кодирует видеофайлы, проверяет электронную почту, выполняет запрос к базе данных, генерирует отчеты или просто обрабатывает много данных или выполняет сложные математические операции. Что просходит? Можете ли вы в конечном итоге с ошибкой в ​​вашем видео? Может ли запрос к базе данных потерпеть неудачу? Может ли обработка данных содержать ошибки?

Я спрашиваю об этом как из общего любопытства, так и из-за того, что я начал задаваться вопросом, стоит ли думать об этом, когда я сам программирую.

Ответы [ 5 ]

6 голосов
/ 27 мая 2009

Вы должны помнить, что ОС (планировщик) останавливает вашу программу примерно миллион раз в секунду. Это означает, что ваша программа уже может функционировать довольно хорошо, когда операционная система замораживает ее. С вашей точки зрения, нет большой разницы между режимом ожидания, спящим режимом и переключением контекста.

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

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

3 голосов
/ 27 мая 2009

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

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

Если ваша программа зависит от такого изменения «статуса питания», вы можете прослушать сообщение WM_POWERBROADCAST, как упомянуто в msdn

2 голосов
/ 27 мая 2009

Stand-By поддерживает ваше "состояние", сохраняя его в оперативной памяти. Как следствие, если вы потеряете власть, вы потеряете свое сохраненное «состояние».

Но это ускоряет достижение.

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

Полагаю, что для Stand-By существует ограничение на объем оперативной памяти, но я уверен, что Stand-By должен использовать виртуальную память, когда она исчерпывает стандартную RAM. Хотя я посмотрю и вернусь!

1 голос
/ 27 мая 2009

Статья Википедии о ACPI содержит подробную информацию о различных режимах энергосбережения, которые присутствуют в современных ПК.

Вот основная идея, насколько я понимаю:

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

В режиме ожидания компьютер будет продолжать подавать питание в ОЗУ, так как основной памятью является энергозависимая память , для которой требуется постоянное обновление для сохранения его состояния. Это означает, что жесткие диски, ЦП и другие компоненты могут быть отключены, если достаточно энергии для обновления DRAM, чтобы его содержимое не исчезало.

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

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

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

0 голосов
/ 27 мая 2009

Есть некоторые последствия для вашего кода. Гибернация - это больше, чем просто переключение контекста из планировщика. Сетевые подключения будут закрыты, сетевые диски или съемные носители могут быть отключены во время режима гибернации, ...

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

...