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.
Odpowiedzi:
Jedyne, co naprawdę może sprawić, że jeden z „nowoczesnych systemów wielozadaniowych” naprawdę się zawiesi, to:
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:taskmgr.exe
, a następnie uruchomcmd.exe
i 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.źródło
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ć).
źródło
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.
źródło
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 :)
źródło
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.
źródło
kill -9 chrome
. Ale ponowne uruchomienie za pomocą kilkuset kart (1200) wymaga trochę pracy.