2009-05-27 3 views
8

Это просто ударило меня на днях. Что на самом деле происходит, когда я говорю компьютеру идти в Stand-By или Hibernate?Что происходит во время ожидания и гибернации?

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

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

ответ

6

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

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

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

+0

Это очень хороший момент. Никогда не думал об этом! – Svish

+0

Также обратите внимание, что в то время как в режиме ожидания/hibernate необходимо восстановить * все * аппаратное обеспечение в свое прежнее состояние (ОЗУ, ЦП, графика и т. Д.), Это может не работать для всего оборудования. Поэтому некоторые аппаратные средства не могут «проснуться» должным образом. Обычно это происходит только с плохими драйверами, но это то, на что нужно обратить внимание, особенно с необычным аппаратным обеспечением (например, специальные интерфейсные карты). – sleske

2

Stand-By сохраняет ваше «состояние», сохраняя его в ОЗУ. Как следствие, если вы потеряете власть, вы потеряете свое сохраненное «состояние».

Но это делает его быстрее.

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

Я полагаю, что ограничение с Stand-By - это то, сколько у вас RAM, но я уверен, что виртуальная RAM должна использоваться Stand-By, когда заканчивается стандартная RAM. Я посмотрю, хотя и вернусь!

+0

Мы спящий компьютер, он просто записывает содержимое ОЗУ на диск. В следующий раз, когда вы загружаете, он восстанавливает содержимое ОЗУ с диска. Когда ОС заканчивается из стандартной ОЗУ, она записывает материал на диск, это называется пейджинг :) – Philippe

+0

И, AFAIK, пейджинг происходит, когда компьютер работает нормально (если у вас заканчивается ОЗУ) – Svish

+0

@Philippe - вот что я говорю; hibernate принимает содержимое вашей оперативной памяти и записывает его на жесткий диск. – joshcomley

1

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

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

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

В режиме ожидания компьютер будет продолжать подавать питание в ОЗУ, так как основная память volatile memory, которая нуждается в постоянном refreshing, чтобы сохранить его состояние. Это означает, что жесткие диски, процессор и другие компоненты могут быть отключены, если есть достаточная мощность, чтобы обновить DRAM, чтобы содержимое не исчезло.

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

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

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

3

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

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

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

+0

Благодарим за сообщение WM_POWERBROADCAST на msdn! Может быть очень полезно, если приложение должно восстановить сетевое соединение или что-то =) – Svish

0

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

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

Смежные вопросы