2009-05-27 10 views
8

Po prostu uderzyło mnie to innego dnia. Co się właściwie dzieje, gdy mówię komputerowi, aby przeszedł w tryb gotowości lub hibernacji?Co dzieje się podczas Stand-By i Hibernacji?

Bardziej konkretnie, jakie implikacje, jeśli w ogóle, mają na działający kod? Na przykład, jeśli aplikacja kompresuje niektóre pliki, koduje pliki wideo, sprawdza pocztę elektroniczną, uruchamia kwerendę bazy danych, generuje raporty lub po prostu przetwarza dużo danych lub robi skomplikowane rzeczy matematyczne. Co się dzieje? Czy możesz skończyć z błędem w swoim filmie? Czy zapytanie bazy danych może się nie udać? Czy przetwarzanie danych może zawierać błędy?

Pytam o to zarówno z ogólnej ciekawości, ale także dlatego, że zacząłem się zastanawiać, czy to jest coś, o czym powinienem pomyśleć, kiedy programuję.

Odpowiedz

6

Należy pamiętać, że system operacyjny (program planujący) blokuje program o miliard razy na sekundę. Oznacza to, że twój program może już funkcjonować całkiem dobrze, gdy system operacyjny zawiesza go. Nie ma dużej różnicy, z twojego punktu widzenia, między stanem gotowości, hibernacją i przełączaniem kontekstów.

Czym różni się od dłuższego czasu zamrożenie. I to jest jedyna rzecz, o której musisz pomyśleć. W większości przypadków nie powinno to stanowić problemu.

Jeśli masz połączenie sieciowe, prawdopodobnie będziesz musiał je przywrócić i rozwiązać podobne problemy. Ale to oznacza po prostu sprawdzanie błędów we wszystkich operacjach IO, które na pewno już robisz ... :-)

+0

To bardzo dobry punkt. Nigdy o tym nie myślałem! – Svish

+0

Należy również pamiętać, że podczas gdy w trybie czuwania/hibernacji należy przywrócić * cały * sprzęt do starego stanu (RAM, CPU, grafiki itp.), Może to nie działać dla wszystkich urządzeń. Niektóre urządzenia mogą więc nie "odpowiednio się obudzić". Zwykle dzieje się tak tylko w przypadku złych sterowników, ale jest to coś, na co warto zwracać uwagę, zwłaszcza w przypadku nietypowego sprzętu (np. Specjalnych kart interfejsu). – sleske

2

Stand-By utrzymuje twój "stan" przy życiu, utrzymując go w pamięci RAM. W konsekwencji, jeśli stracisz moc, stracisz swój "stan".

Ale to sprawia, że ​​szybciej osiągnąć.

hibernacji przechowuje swoją „państwo” w wirtualnej pamięci RAM na dysku twardym, więc jeśli straci moc nadal można wrócić trzy dni później. Ale jest wolniej.

Domyślam się, że ograniczenie w Stand-By to ilość pamięci RAM, ale jestem pewien, że wirtualna pamięć RAM musi być używana przez Stand-By, kiedy zabraknie standardowej pamięci RAM. Ale sprawdzę to i wrócę!

+0

Komputer zostaje hibernowany, po prostu zapisuje zawartość pamięci RAM na dysku. Przy następnym uruchomieniu przywraca zawartość pamięci RAM z dysku. Gdy system operacyjny kończy się ze standardową pamięcią RAM, zapisuje dane na dysku, nazywa się to stronicowaniem :) – Philippe

+0

AFAIK, stronicowanie dzieje się, gdy komputer działa również normalnie (jeśli skończy się pamięć RAM) – Svish

+0

@Philippe - to właśnie mówię; hibernacja przejmuje zawartość pamięci RAM i plonuje ją na dysku HDD – joshcomley

1

Artykuł w Wikipedii pod numerem ACPI zawiera szczegóły na temat różnych trybów oszczędzania energii, które są obecne w nowoczesne komputery.

Oto podstawowa idea, ze jak rozumiem rzeczy:

Podstawowym założeniem jest to, aby utrzymać obecny stan systemu trwało, więc gdy maszyna znajdzie się z powrotem do pracy, to może wznowić w stanie, w jakim było zanim maszyna została przełączona w tryb uśpienia/gotowości/hibernacji itp. Pomyśl o tym jako o serializacji dla twojego komputera.

W trybie gotowości komputer będzie nadal zasilał pamięć RAM, ponieważ pamięć główna to volatile memory, która wymaga stałej wartości refreshing, aby utrzymać swój stan. Oznacza to, że dyski twarde, procesor i inne komponenty mogą być wyłączone, o ile jest wystarczająca moc, aby utrzymać odświeżoną pamięć DRAM, aby jej zawartość nie zniknęła.

W stanie hibernacji pamięć główna zostanie również wyłączona, więc zawartość musi zostać skopiowana do trwałej pamięci, na przykład dysku twardego, przed wyłączeniem zasilania systemu. Poza tym, podstawowa przesłanka hiberacji nie różni się od stanu wstrzymania - do przechowywania bieżącego stanu urządzenia, aby przywrócić go w późniejszym czasie.

Mając to na uwadze, prawdopodobnie nie jest zbyt prawdopodobne, że przejście w stan wstrzymania lub hibernacji spowoduje problemy z zadaniami, które są wykonywane w tym momencie. Jednak może nie być dobrym pomysłem zezwolenie na zatrzymanie aktywności sieciowej w trakcie wykonywania, ponieważ w zależności od protokołu połączenie sieciowe może przekroczyć limit czasu i nie może zostać wznowione po przywróceniu systemu do stanu działania.

Ponadto, mogą istnieć niektóre maszyny, które po prostu mają niestabilne sterowniki oszczędzające energię, które mogą spowodować, że przejdzie w tryb gotowości i nigdy nie wróci, ale to zupełnie inna sprawa.

3

Moja początkowa myśl polega na tym, że tak długo, jak program i jego ekosystem są zawarte w komputerze, który przechodzi w stan gotowości lub hibernacji, po wznowieniu programu nie powinno to wpłynąć na działanie programu.

Jednak, jeśli mówisz, że aktualizacja rekordu w bazie danych hostowanej na oddzielnym komputerze, to hibernacja/stand-by będzie traktowana jako przekroczenie czasu.

Jeśli program jest zależny od takiej zmiany w „mocarstwowości” można słuchać WM_POWERBROADCAST Wiadomość jak wspomniano na msdn

+0

Dzięki za wiadomość WM_POWERBROADCAST na msdn! Może być bardzo pomocna, jeśli aplikacja musi ponownie nawiązać połączenie sieciowe lub coś takiego =) – Svish

0

Istnieją pewne implikacje dla kodzie. Hibernacja to więcej niż zmiana kontekstu z harmonogramu. Połączenia sieciowe zostaną zamknięte, dyski sieciowe lub nośniki wymienne mogą zostać odłączone podczas hibernacji, ...

Nie sądzę, aby aplikacja mogła zostać powiadomiona o hibernacji (ale mogę się mylić). Co należy zrobić, to radzić sobie ze scenariuszami błędów (na przykład z utratą połączenia sieciowego) tak wdzięcznie, jak to tylko możliwe. I pamiętaj, że ten scenariusz błędu może wystąpić również podczas normalnej pracy, nie tylko podczas przechodzenia w stan hibernacji ...

Powiązane problemy