Typowe procesory, które trafiają do smartfonów, laptopów, a nawet komputerów stacjonarnych, mają zmienną częstotliwość taktowania. Gdy program planujący wykryje, że ma czas bezczynności, może zmniejszyć częstotliwość taktowania i zwiększyć go ponownie, jeśli więcej procesów konkuruje o czas procesora.
Procesory zoptymalizowane pod kątem urządzeń zasilanych bateryjnie zwykle składają się z wielu funkcjonalnych komponentów, z których każdy ma swój własny zegar (przykład: ARM Cortex A8 ). Gdy jeden składnik jest bezczynny, system operacyjny może go wyłączyć (lub skrócić swój zegar), co oszczędza energię. Na przykład na wielu procesorach wielordzeniowych (takich jak te w zaawansowanych urządzeniach mobilnych) każdy rdzeń można włączać i wyłączać osobno. ARM jest szczególnie dobry w tej grze, co jest jednym z powodów, dla których większość smartfonów ma procesory ARM.
Zmienianie częstotliwości taktowania lub wyłączanie zegara komponentów elektronicznych jest znane jako zarządzanie energią . Zwykle jest to złożona część pisania i optymalizacji systemu operacyjnego dla urządzenia zasilanego bateryjnie, z wieloma zależnościami od dokładnego modelu sprzętu.
To, co dotyczy procesora, dotyczy również urządzeń peryferyjnych. Podświetlany wyświetlacz to na przykład główny odbiornik energii w smartfonie, a następnie radio. System operacyjny CPU może odgrywać rolę w zarządzaniu energią urządzeń peryferyjnych; układy wtórne również uruchamiają własne oprogramowanie układowe, które również zarządza energią.
Aplikacje mają do odegrania swoją rolę w obniżaniu zużycia energii: muszą pozwalać systemowi operacyjnemu na robienie tego. Najgorsze, co aplikacja może zrobić, to odpytywanie - uruchomienie pętli while (not_ready()) {}
. Nawet wprowadzenie małego opóźnienia jako in while (not_ready()) {usleep(100);}
nie pomaga, ponieważ nie pozwala wystarczająco dużo czasu procesorowi przejść w tryb niskiego poboru mocy, a jeśli tak, każde bezowocne wybudzenie oznacza marnowanie energii. Dlatego interfejsy API systemu operacyjnego muszą być tak zaprojektowane, aby aplikacje nigdy nie musiały odpytywać, ale mogły subskrybować jakiś mechanizm zdarzeń i pozostawać bezczynne, dopóki nie zostaną powiadomione o odpowiednim zdarzeniu. Aplikacje z kolei muszą korzystać z takich mechanizmów, więc konstrukcja całego stosu oprogramowania ma wpływ na zużycie energii.
Możesz uzyskać informacje na temat tego, co odpowiada za zużycie energii przez komputer dzięki narzędziu Intel Powertop . Smartfony zazwyczaj mają sposób na sprawdzenie, ile zużywają aplikacje. Dokładne rozliczenie zużycia energii przez aplikację jest trudne: jeśli komponent budzi się dla dwóch aplikacji, czas budzenia można przypisać jednemu z nich nieco arbitralnie lub żadnemu; Zużycie energii przez urządzenia peryferyjne nie zawsze jest łatwe do śledzenia dla odpowiedzialnej aplikacji.
Układ RAM nie wie, który z jego bitów przechowuje dane aktywnego procesu, więc nie można go selektywnie wyłączyć w ten sposób. Zużycie energii przez proces nie jest związane z ilością używanej pamięci (z wyjątkiem tego, że dostęp do pamięci RAM zużywa energię, ale ponowne użycie tej samej pamięci lub użycie różnych obszarów pamięci RAM nie ma znaczenia pod względem zużycia energii).
Jak zapewne wiesz, system operacyjny utrzymuje wiele list. Dwie z tych list to gotowa lista i lista timerów. Gotowa lista określa, które zadania / wątki są gotowe do uruchomienia. Lista timerów identyfikuje zadania / wątki, które są w stanie zablokowanym z limitem czasu.
Wyobraź sobie, że system operacyjny ma pustą gotową listę. Oznacza to, że zabrakło zadań gotowych do uruchomienia (jest w stanie bezczynności). Niektóre procesory (takie jak x86) mają instrukcję zatrzymania, którą system operacyjny może wywołać, aby spowodować zatrzymanie procesora, dopóki nie zostanie obudzone przez zewnętrzne przerwanie (takie jak przerwanie tyknięcia). W tym czasie zużywa mniej energii. Technikę tę można jeszcze ulepszyć, zerkając na listę timerów. Jeśli jesteś bezczynny i wiesz, że najwcześniej zadanie może się obudzić z tykania timera za 100 tyknięć dalej, częstość tyknięć może zostać tymczasowo zmodyfikowana, aby powiedzieć 100 razy wolniej. W ten sposób procesor może zużywać jeszcze mniej energii przez dłuższy czas, ponieważ nie będzie musiał obsługiwać do 100 przerwań tykania.
Po nadejściu zewnętrznego przerwania częstość tyknięcia będzie musiała zostać ponownie obliczona. Jeśli zewnętrzne przerwanie przygotowało zadanie, wskaźnik tyknięcia wraca do normy. Jeśli nie, liczba tyknięć do snu musi zostać ponownie obliczona wraz z nową (spowolnioną) częstością tykania.
Mam nadzieję że to pomoże.
źródło
Aby dodać do innych odpowiedzi:
Twoje pytanie dotyczy systemów operacyjnych iOS i Android, ale „System operacyjny” jest tylko ich częścią.
Zarówno Android, jak i iOS są platformami i zawierają wiele części, które nie są uważane za część rzeczywistego systemu operacyjnego, ale są aktywne w zmniejszaniu zużycia energii.
Na przykład system Android z założenia pozwala twórcom aplikacji zapisać swój stan, gdy jest ukryty, więc procesy mogą zostać zakończone, gdy nie są aktywnie używane, a tym samym zmniejszyć ilość gotowych wątków i umożliwić wyłączenie rdzenia i zmniejszenie częstotliwości taktowania.
W „OS” znajdują się funkcje, które ustawiają adaptacyjną jasność, stan uśpienia Wi-Fi, wątki czyszczenia, zestawianie harmonogramów, wskaźniki LED, zachowanie w trybie gotowości komórkowej i inne aspekty, które drastycznie wpływają na zużycie energii.
Ponadto niektóre platformy mobilne ciężko pracują nad optymalizacją współczynnika wykorzystania procesora / GPU, ponieważ procesor graficzny jest bardziej dostosowany do grafiki i jest to stosunkowo nowy dodatek do krajobrazu mobilnego, coraz więcej elementów systemu operacyjnego związanych z grafiką przechodzi na procesor graficzny, który usuwa pracę z procesora i umożliwia wykorzystanie optymalizacji mocy procesora do użycia (aw wielu przypadkach również przyspiesza system jako całość).
źródło