Dlaczego nowoczesny wielozadaniowy system operacyjny wyprzedzający zawiesza się po załadowaniu procesora?

5

Jest to pytanie otwarte, z wieloma możliwymi odpowiedziami, ale być może jest jedna wielka rzecz, którą przeoczę. Jeśli nie, być może to pytanie powinno być wiki społeczności.


Często nie używam innych systemów operacyjnych, aby ocenić, ale na pewno we wszystkich wersjach Windows system operacyjny może zostać przeszukany, gdy aplikacje ustalają procesor. Zrozumiałe z wczesnymi wersjami, z wielozadaniową współpracą.

Jednak w przypadku wielozadaniowości z wyprzedzeniem, czy system operacyjny nie powinien mieć wyższego priorytetu i samego GUI, aby pozostać responsywnym nawet w przypadku aplikacji użytkownika pytać o pełne wykorzystanie procesora? W końcu system operacyjny tego nie robi mieć rozdawać dowolne plastry czasu. W większości przypadków nie obchodzi mnie, że aplikacja, która będzie wymagała kilku minut czasu procesora, zostanie opóźniona o kilka mikrosekund, aby interfejs systemu operacyjnego mógł reagować na dane wejściowe.

Czasami pomaga to ustawić procesy o wysokim poziomie procesora na niższy priorytet, być może dlatego, że pozwala to innym aplikacjom o niskim CPU, z którymi współpracuję, być bardziej responsywnym, dając wrażenie bardziej responsywnego ogólnego doświadczenia. Czy też priorytet aplikacji naprawdę wpływa na jej współdziałanie z procesami systemu operacyjnego?

Widziałem to wiele razy, gdy miałem dużo pamięci fizycznej i bez dużego obciążenia dysku twardego. Wygląda na to, że użycie procesora jest głównym spójnym elementem podczas flagowania systemu operacyjnego.

Kontrprzykład: często, gdy system jest prawie całkowicie zawieszony, mysz reaguje. Tak więc system operacyjny chroni tę część siebie przed niektórymi problemami. Dokładnie, jak to jest osobne pytanie, podnoszę je jako przykład.


źródło
1
Obciążenie interfejsu użytkownika powinno być nieistotne w porównaniu z procesami, które działają przez zauważalny okres czasu, więc podniesienie priorytetu systemu operacyjnego nie powinno mieć istotnego wpływu na długotrwały proces. Zastanów się, czy wolisz mieć pasek postępu lub wcześniej zainstalować program 50 milisekund? Podejrzewam, że większość ludzi wolałaby reakcję, choć użytkownicy SU mogą być wyjątkowi.
3
Obciążenie interfejsu użytkownika nie jest bez znaczenia, ponieważ wymaga zmiany na kod uruchamiający interfejs użytkownika, który wymaga przełączników kontekstowych, wydmuchuje pamięci podręczne procesora i tak dalej.
David Schwartz
1
@DavidSchwartz i dlatego ludzie denerwują się, gdy system się zawiesza.
Synetech
1
@Synetech: Dokładnie, długotrwały proces intensywnie wykorzystujący procesor nie powinien sprawić, że system operacyjny lub inne aplikacje będą prawie niezmiernie wolne. Jeśli tak, system operacyjny raczej nie zasługuje na miano „wielozadaniowości”.
1
@DavidSchwartz: Nie sądzę, aby projekt systemu operacyjnego był świadomy, aby GUI mogło się zawiesić podczas długotrwałych zadań intensywnie wykorzystujących procesor. Podejrzewam, że wszyscy się do tego przyzwyczaili i zastanawiam się, czy istnieją ku temu dobre powody.

Odpowiedzi:

5

Jedyne, co naprawdę może sprawić, że jeden z „nowoczesnych systemów wielozadaniowych” naprawdę się zawiesi, to:

  1. awaria sprzętu
  2. CPU utknął w sterowniku urządzenia (z powodu 1 lub złego programowania)
  3. wyjątek krytyczny w sterowniku urządzenia lub innym kernelu (z powodu 1 lub złego programowania)

System operacyjny wielozadaniowego systemu operacyjnego zawsze odcina zadanie, gdy kończy się jego czas. Jeśli jednak program jest zaprojektowany do reagowania na dane wprowadzane przez użytkownika, ale nie działa w czasie, w którym działa, to błąd dotyczy programu

Jest bardziej prawdopodobne, że powłoka nie odpowiada. W systemie Windows tak jest explorer.exe. Możesz spróbować następujących rzeczy:

  • alternatywna powłoka systemu Windows (Litestep itp.)
  • zabij wszystkie pliki explorer.exe za pośrednictwem taskmgr.exe, a następnie uruchom cmd.exei wykonaj swoje rzeczy za pomocą wiersza poleceń. Lub uruchom mniejszy program przeznaczony do uruchamiania innych programów.

explorer.exe jest jednym z tych mocno skomponowanych programów Windows, w które wiele rzeczy można się podłączyć. Więc zobacz, jak to się dzieje bez tego.

LawrenceC
źródło
Interesuje mnie nie tylko bezpośrednie zawieszenie, ale także przypadki, w których GUI jest znacznie spowolniony, co wystarcza, aby korzystanie z komputera było frustrujące. Używanie alternatywnej powłoki jest interesującym pomysłem, choć może nie jest praktyczne dla większości użytkowników (każdy pamięta alternatywne interfejsy dla Windows 3?).
Gdyby tylko Microsoft był równie zainteresowany ... Oczywiście może biorąc pod uwagę rozwój platform iOS i mobilnych, być może jest to możliwy powód dla Metro ...
LawrenceC
3

Wypróbuj Linuksa. Jeśli faktycznie skompilujesz jądro, możesz określić przedział czasu. Widzisz także efekt wyprzedzenia. 1000-krotny odcinek czasu jest lepszy, jeśli budujesz serwer, który (prawdopodobnie) nie będzie musiał się martwić o interfejs użytkownika (ale nadal będzie to wyprzedzający wielozadaniowy system operacyjny). Z drugiej strony 100us da w rezultacie bardzo czuły system. Większość dystrybucji ma 100os na swoim systemie operacyjnym, co oznacza, że ​​nawet jeśli mój procesor dotyka 100% wykorzystania wszystkich rdzeni, mój interfejs użytkownika nadal odpowiada (możesz go wypróbować).

Anonymous
źródło
2

W odniesieniu do Windows, Windows 7 wykonuje o wiele lepszą pracę niż XP, jeśli chodzi o tego rodzaju rzeczy, więc nie zgodziłbym się z Twoim stwierdzeniem „wszystkie wersje Windows”. Ale nawet w przypadku XP, gdy używasz wersji systemu operacyjnego klienta, system Windows nada dodatkowy priorytet aplikacji na pierwszym planie (domyślnie). Niezależnie jednak od wersji systemu operacyjnego, jeśli wiele procesów utknie na tym samym pojedynczym, współużytkowanym zasobie (może to być I / O), wszystkie będą zachowywać się w sposób niereagujący.

Inny sposób na obejrzenie tego problemu, jeśli explorer.exe jest zajęty oczekiwaniem na udostępniony zasób (w tym czas procesora), wtedy sam menedżer pulpitu / okna będzie się zachowywał bez odpowiedzi. Podobnie dla wszystkich aplikacji, które bezpośrednio lub pośrednio czekają na zwolnienie explorer.exe.

Chris O
źródło
Na pewno lepsze niż wcześniejsze wersje. Nadal jednak mogę w sposób niezawodny zredukować swoją maszynę (Phenom dual 2.8, 4 GB) do indeksowania, przeliczając duży skoroszyt programu Excel, ustalając w ten sposób oba rdzenie, ale wykorzystując niewielką pamięć lub dostęp do dysku twardego i nie wchodząc w interakcje z żadnym sterownikiem.
@JoofAllTrades - Jak już wspominali inni, Excel może wykonywać nadmierne przełączanie kontekstu (spowalniając cały system) lub zbyt często unieważniać linie pamięci podręcznej (spowalniając także cały system). Możliwe, że Excel może zostać zoptymalizowany pod kątem tego konkretnego scenariusza, ale nie jest to prawdopodobne. Jeśli nie zależy Ci na szybkości obliczeń, możesz ustawić koligację procesora na tylko jeden rdzeń dla programu Excel (Menedżer zadań - & gt; kliknij prawym przyciskiem myszy Excel.exe - & gt; Ustaw powinowactwo), a to da całemu innemu rdzeń do reszty systemu i powinien sprawić, że rzeczy będą bardziej responsywne.
Chris O
1

Aplikacje trybu użytkownika zazwyczaj nie mogą spowolnić GUI twojego systemu operacyjnego. Jednak sytuacja nie jest tak wyraźna, jak się wydaje. Nie ma jednej aplikacji trybu użytkownika, która byłaby w 100% w trybie użytkownika, z powodu wywołań systemowych (zwłaszcza systemu plików) lub z powodu mapowania pamięci wirtualnej.

W większości przypadków system operacyjny nie blokuje pracy procesora, ale utknął na jakimś zasobie I / O. Jest to szczególnie widoczne, gdy zabraknie pamięci fizycznej i zaczniesz wchodzić do pliku stronicowania (chociaż pamiętaj, że system operacyjny może umieścić pamięć w pliku stronicowania w czasie wolnym, nawet jeśli jest dostępna duża ilość fizycznej pamięci RAM). Windows jest zwykle dość mądry w tej kwestii, ale całkiem możliwe jest „złamanie” tego.

Jeśli tak naprawdę jest to procesor, najprawdopodobniej jest to spowodowane zachłannym sterownikiem (którego zdecydowana większość to nie napisane przez Microsoft). Sterowniki trybu jądra są zwolnione z wielozadaniowości prewencyjnej (zarówno ze względu na opóźnienia, jak i niezawodność), więc jeśli kierowca uruchomi drugą długą pętlę na CPU, nie będziesz miał szczęścia, nie zostanie on wyprzedzony.

Świetnym i prostym narzędziem do zobaczenia tego jest Process Explorer (z SysInternals), który pokazuje czas jądra procesora (tj. Ile pracy procesora na rdzeniu odbywa się w jądrze, w przeciwieństwie do użytkownika same aplikacje). Windows 7 i późniejsze również zawierają to w swoim menedżerze zadań (jest to czerwona linia na wykresach użycia procesora).

Podsumowując, wielozadaniowość z wyprzedzeniem nie chroni projektantów systemu operacyjnego przed koniecznością kompromisów. Zawsze jest koszt na wszystko, a planowanie zadań jest naprawdę bardzo trudne (w tej chwili mój system operacyjny żongluje ponad 2000 wątków - to całkiem sporo, a tak naprawdę nie robię „niczego”). Czy lepiej byłoby dać wątkom mniejsze fragmenty czasu i poświęcić więcej czasu na zmianę kontekstu? Czy lepiej byłoby dać im dłuższe fragmenty, rezygnując z opóźnień?

Sprawdź więc, co robią dyski twarde. Sprawdź, jak używasz pamięci. Sprawdź czas jądra. To prawdopodobnie pokaże, dlaczego system Windows traci odpowiedzialność, gdy wykonujesz ciężką pracę. Niektóre z nich można usunąć (zwolnienie pamięci, ograniczenie przestępcy pamięci, ręczne wybieranie powinowactwa procesora ...), niektóre są rozwiązywane po prostu przez aktualizację sterowników (sterowniki grafiki były dość godne uwagi z powodu problemów, które spowodowały który prawdopodobnie odgrywał rolę w systemie Windows, wyrzucając je z trybu jądra do trybu użytkownika w ostatnich wersjach).

Współczesny system Windows, wykorzystując GPU, używa akceleracji GPU do renderowania GUI (właściwie do pewnego stopnia, podobnie jak Windows XP). Jeśli aplikacja znacząco obciąża GPU, może to również prowadzić do powolnej reakcji systemu Windows, zwłaszcza w Aero. Ponieważ procesory graficzne są coraz częściej wykorzystywane jako „hiper-procesory” GP, może to mieć znaczenie nawet poza grami i takimi.

Innym ważnym przestępcą jest źle napisana aplikacja wielowątkowa. Dość łatwo jest zabić pamięć podręczną, jeśli robisz głupie rzeczy, a pamięć RAM jest bardzo powolna w porównaniu z samym procesorem, więc bez wydajnego buforowania procesor staje się bardzo, bardzo powolny (nawet jeśli w zasadzie czeka cały czas). Jest to jeszcze bardziej skomplikowane w przypadku procesorów wielordzeniowych (i systemów wieloprocesorowych), ponieważ w celu zapewnienia spójności wiele operacji wielowątkowych wymaga unieważnienia danych buforowanych (tak, że jeden procesor nie ma dostępu do „starej” wartości zmienna w pamięci z pamięci podręcznej / rejestrów). Wszystkie te rzeczy są niesamowicie szybkie, ale ... Procesory są szybsze. O wiele szybciej. Co oczywiście wprowadza również problemy różnych dostawców procesorów obsługujących te same rzeczy w różny sposób, całkowicie oddzielonych od znacznie wyższego poziomu systemu operacyjnego. Współczesne procesory (486+, więc tak, to bardzo stara funkcja, o której nie ma pojęcia wielu niepokojących programistów) ciężko równolegle, nie wykonują już jednej instrukcji po drugiej.

Więc nawet jeśli system operacyjny robi wszystko doskonale (oczywiście niemożliwy ideał), wciąż może przestać działać z powodu problemów ze sprzętem i komunikacji ze sprzętem. Co dobrego jest w tym, że masz czterordzeniowy procesor, gdy twoja aplikacja całkowicie nasyca pamięć RAM R / W? Co dobrego ma szybki dysk twardy, gdy każdy odczytany bajt musi przejść przez procesor (pamiętaj PIO?). Każda operacja sprzętowa, która nie korzysta z bezpośredniego dostępu do pamięci, może potencjalnie zablokować procesor.

Obecnie większość systemów Windows działa jako aplikacje trybu użytkownika. I interakcja z uruchomionymi aplikacjami - jeśli o to pytam explorer.exe aby coś dla mnie zrobić, nie może zrobić nic innego w tym czasie. Jeśli wyślę miliard komunikatów systemu Windows do okna, pozostawi to ślad.

Tak wiele się dzieje, cały czas ... gwarancje są bardzo trudne. Zwróć uwagę, jak szybko stają się rzeczy, gdy tylko ekran „ctrl-alt-delete” rzeczywiście się włącza - nagle jest tak, jakby nic się nie stało :)

Luaan
źródło
0

Szczególnie w przypadku okien przeszukiwanych. Jedną z najczęstszych przyczyn jest to, że wiele procesów używa wystarczającej ilości pamięci wirtualnej, aby rozpocząć wymuszanie dużej wymiany. Może się nie wydawać, że aktywność dysku jest duża, ale zwykle tak się dzieje.

Jest to łatwe do sprawdzenia, jak również działa, aby wydostać się z tego zacięcia, po prostu wybierając kilka małych procesów (takich jak notatnik) i „czysto” i „cierpliwie” kończąc je. Zaczyna to zmniejszać efekt zakleszczonej autostrady. A potem zamykasz jedną dużą wieprzową pamięć i wszystko wraca do stanu użytecznego. Obserwowanie aktywności dysku w tym czasie często pokazuje, że niewiele się dzieje.

Dlaczego proponuję najpierw zamknąć mniejsze aplikacje. Najpierw usuwasz mniejsze aplikacje, uwalniasz pamięć wirtualną przy minimalnej aktywności dysku i szybko odblokowujesz maszynę. Jeśli spróbujesz zamknąć dużą aplikację, np. firefox lub Chrome, wszystkie mają wydłużone czasy zamknięcia. Dzieje się tak dlatego, że większość ostatnich aplikacji ma procesy w tle, które nie znikną na długi czas, ponieważ procesy w tle również utknęły w plikach wymiany. Co gorsza, zdarzają się również niższe priorytety, których ukończenie zajmuje nawet więcej czasu, a pełna ilość pamięci wirtualnej, o którą prosi aplikacja, musi poczekać, aż zostanie zwolniona, aż wszystkie procesy i wątki w tle zostaną wykonane.

Kolejną rzeczą, którą zauważyłem na podstawie doświadczenia, jest to, że przeglądarki są jednymi z najgorszych, jeśli chodzi o szybkie i czyste zamykanie. Nawet aplikacje biurowe zamykają się bardziej czysto i szybko.

LMSingh
źródło
Są chwile, które wymagają cierpliwości, ale jeśli chodzi o przeglądarki internetowe, nie trać czasu. Lepiej jest je po prostu zakończyć (zabić). Dobrze sobie z tym radzą. Ja zawsze kill -9 chrome. Ale ponowne uruchomienie za pomocą kilkuset kart (1200) wymaga trochę pracy.
Dan D.
Mam na myśli scenariusz, w którym jest odpowiednia pamięć i minimalne dyski I / O - samo użycie procesora jest czasem wystarczające, aby GUI systemu operacyjnego było prawie bezużyteczne. Rozumiem, że bez względu na czas pracy aplikacji chce do użycia system operacyjny może / powinien / rezerwuje porcję dla siebie, więc dopóki nie ma rywalizacji o inne zasoby, GUI powinien pozostać responsywny.
@ JonofAllTrades OS może i rezerwuje porcję. Jeśli jednak doświadczasz ekstremalnej powolności przy wysokim obciążeniu procesora, to, mój przyjacielu, najprawdopodobniej masz problem ze sterownikiem karty graficznej. Możliwe jest, że sterownik jest napisany tak, że musi oddzwonić do systemu operacyjnego, a nie tylko obsługiwać obraz ekranu. Jednym z prostych testów może być próba tymczasowego wyłączenia obsługi Aero (a nawet motywów), aby ustalić, gdzie jest prawdziwy problem. Mysz reagująca na BTW nie oznacza, że ​​system operacyjny nie jest zajęty inaczej. Duża część obsługi myszy / kbd odbywa się w sterownikach, które zawsze uzyskują plasterki czasu.
LMSingh
@DanD. przebiłeś się przez wszystkie granice, które znam dzięki 1200 kartom !! Łał! W XP zobaczyłbym, że okna zaczynają ulegać uszkodzeniu po tym, jak IE miał około 23 kart. W Win 7, przesunąłem do około 60 w chrome i kolejne 45 w FF w tym samym czasie (podczas gdy wiele innych aplikacji jest uruchomionych), a potem wszystko staje się niestabilne. Zgadnij, będę musiał wymyślić, jak najpierw przekroczyć kilkaset!
LMSingh