Warum hängen moderne vorbeugende Multitasking-Betriebssysteme, wenn die CPU geladen wird?

1922

Dies ist eine offene Frage mit vielen möglichen Antworten, aber vielleicht übersieht ich etwas Großes. Wenn nicht, sollte diese Frage vielleicht ein Community-Wiki sein.


Ich benutze andere Betriebssysteme nicht oft genug, um zu beurteilen, aber sicherlich kann bei allen Windows-Versionen das Betriebssystem zum Durchforsten gebracht werden, wenn Apps die CPU festlegen. Verständlich bei den frühen Versionen mit kooperativem Multitasking.

Sollte das Betriebssystem mit präventivem Multitasking jedoch nicht selbst und seiner GUI eine höhere Priorität einräumen, um auch dann zu reagieren, wenn Benutzeranwendungen die volle CPU-Auslastung fordern ? Schließlich hat das Betriebssystem nicht haben, um alle Zeitscheiben weggeben. In den meisten Fällen ist es mir egal, dass eine App, die Minuten in der CPU benötigt, um einige Mikrosekunden verzögert wird, so dass die OS-Benutzeroberfläche auf Eingaben reagieren kann.

Es kann manchmal hilfreich sein, Prozesse mit hoher CPU-Priorität auf eine niedrigere Priorität zu setzen, vielleicht weil dadurch andere Apps mit niedriger CPU-Rate, mit denen ich interagiere, reaktionsfähiger werden, wodurch der Eindruck einer insgesamt reaktionsfähigeren Umgebung entsteht. Oder beeinflusst die Priorität einer App wirklich die Interaktion mit Betriebssystemprozessen?

Ich habe gesehen, dass dies viele Male vorgekommen ist, als ich über ausreichend physischen Arbeitsspeicher verfügte und ohne starke Festplattennutzung. Es scheint, als wäre die CPU-Nutzung das wichtigste konsistente Element, wenn das Betriebssystem markiert ist.

Ein Gegenbeispiel: Wenn ein System fast vollständig aufgehängt ist, bleibt die Maus immer ansprechbar. Das Betriebssystem schützt diesen einen Teil von sich selbst vor einigen Problemen. Genau wie ist eine separate Frage, ich möchte sie nur als Beispiel anführen.

5
Ich sehe nicht, wie das ein vernünftiger Kompromiss ist. Ich würde lieber * nützliche * Arbeit erledigen lassen, selbst wenn das bedeutet, dass die Benutzeroberfläche weniger ansprechend ist. Vielleicht ist das nur ich. David Schwartz vor 11 Jahren 0
Die Belastung der Benutzeroberfläche sollte im Vergleich zu Prozessen, die über einen spürbaren Zeitraum ablaufen, vernachlässigbar sein. Daher sollte die Anhebung der Priorität des Betriebssystems keinen wesentlichen Einfluss auf den langwierigen Prozess haben. Haben Sie lieber einen Fortschrittsbalken oder haben Sie Ihr Programm 50 Millisekunden früher installiert? Ich vermute, dass die meisten Leute Reaktionsschnelligkeit bevorzugen würden, obwohl SU-Benutzer möglicherweise außergewöhnlich sind. vor 11 Jahren 1
Die Belastung der Benutzeroberfläche ist nicht unerheblich, da dazu der Code geändert werden muss, der die Benutzeroberfläche ausführt, für die Kontextwechsel erforderlich sind, die CPU-Caches ausgeblendet werden usw. David Schwartz vor 11 Jahren 3
@DavidSchwartz, vielleicht, aber er fragt nach Aufgaben, deren Ausführung im Vergleich zu der Zeit, die die Benutzeroberfläche benötigt, sehr viel länger dauert. Wenn zum Beispiel die Aufgabe (z. B. das Kodieren eines Videos) sehr viel Zeit in Anspruch nimmt, beispielsweise 10 Minuten, ist die Bearbeitung nicht genau fünf Minuten schneller, wenn der Fortschritt nicht angezeigt wird. Möglicherweise dauert der Vorgang fünf Sekunden * schneller; dh das Feedback und die Fähigkeit zu pausieren, abzubrechen usw. ist mehr als die Mühe wert. Synetech vor 11 Jahren 0
@ JonofAllTrades, nicht nur die CPU-Auslastung kann das Problem verursachen, sondern auch Deadlocks. Wenn zwei Threads für eine Ressource blockiert sind, ist die CPU-Auslastung gering und die Benutzeroberfläche ist dennoch eingefroren. Es kann auch vorkommen, dass der Thread abbricht und irgendwie in einer Endlosschleife endet (die die CPU möglicherweise blockiert). Wie für die Maus; das liegt daran, dass es von der CSRSS gehandhabt wird, die in der Tat eine hohe Priorität hat; aber auch das kann einfrieren (hatte jemals der Cursor hängen geblieben und der PC-Lautsprecher piepst?) Synetech vor 11 Jahren 0
@Synetech: Ich stimme dir nicht zu, und die Designer moderner Betriebssysteme scheinen auch nicht mit dir übereinzustimmen. David Schwartz vor 11 Jahren 0
@DavidSchwartz, und deshalb ärgern sich die Leute, wenn das System hängt. Synetech vor 11 Jahren 1
@Synetech: Genau genommen sollte ein langwieriger, CPU-intensiver Prozess das Betriebssystem oder andere Apps nicht nahezu unbrauchbar machen. In diesem Fall verdient das Betriebssystem kaum den Namen "Multitasking". vor 11 Jahren 1
@DavidSchwartz: Ich denke nicht, dass es eine bewusste Entscheidung im OS-Design gibt, die GUI bei lang andauernden CPU-intensiven Aufgaben hängen zu lassen. Ich vermute, wir haben uns alle daran gewöhnt, und ich frage mich, ob es gute Gründe dafür gibt, dass es so sein muss. vor 11 Jahren 1
Ich habe vor kurzem Process Lasso (http://bitsum.com/processlasso/) installiert, das dieses Problem sehr gut dokumentiert: Es verringert die CPU-Priorität, wenn eine App die CPU belegt, sodass andere Programme nicht verhungern. Es war sehr hilfreich für mich. vor 10 Jahren 0

5 Antworten auf die Frage

5
LawrenceC

Die einzigen Dinge, die wirklich eines der "modernen Multitasking-Betriebssysteme" wirklich zum Erliegen bringen können, sind:

  1. Hardwarefehler
  2. CPU steckt in einem Gerätetreiber fest (wegen 1 oder falscher Programmierung)
  3. Schwerwiegende Ausnahme im Gerätetreiber oder anderem Kernelcode (wegen 1 oder falscher Programmierung)

Das Betriebssystem in einem Multitasking-Betriebssystem unterbricht immer eine Aufgabe, wenn die Zeitscheibe beendet ist. Wenn ein Programm jedoch darauf ausgelegt ist, auf Benutzereingaben zu reagieren, dies aber während seiner Zeitscheibe nicht geschieht, liegt der Fehler im Programm

Es ist wahrscheinlicher, dass die Shell nicht reagiert. In Windows ist dies explorer.exe. Sie können folgendes versuchen:

  • eine alternative Windows-Shell (Litestep usw.)
  • töte alle via explorer.exe's taskmgr.exe, starte dann cmd.exeund mache deine Sachen über die Kommandozeile. Oder starten Sie ein kleineres Programm, um andere Programme zu starten.

explorer.exeist eines dieser stark komponentenisierten Windows-Programme, in die sich viele Dinge einbinden können. So sehen Sie, wie die Dinge ohne es sind.

Ich interessiere mich nicht nur für regelrechte Hänge, sondern auch für Fälle, in denen die GUI stark verlangsamt wird, genug, um den Computer frustrierend zu machen. Die Verwendung einer alternativen Shell ist eine interessante Idee, obwohl sie für die meisten Benutzer vielleicht nicht praktikabel ist (erinnert sich jemand an die alternativen Benutzeroberflächen für Windows 3?). vor 11 Jahren 0
Wenn nur Microsoft genauso interessiert wäre ... Natürlich vielleicht angesichts des Aufstiegs von iOS- und mobilen Plattformen, ist das vielleicht ein Grund für Metro ... LawrenceC vor 11 Jahren 0
3
Anonymous

Versuchen Sie es mit Linux. Wenn Sie den Kernel tatsächlich kompilieren, können Sie die Zeitscheibe angeben. Sie sehen auch tatsächlich die Wirkung von Preempt. Ein Zeitintervall von 1000us ist besser, wenn Sie einen Server erstellen, der (wahrscheinlich) keine Benutzeroberfläche hat, um die Sie sich Sorgen machen müssen (es handelt sich jedoch immer noch um ein präventives Multitasking-Betriebssystem). Auf der anderen Seite führt ein 100us zu einem extrem ansprechenden System. Die meisten Distributionen haben 100us auf ihrem Desktop-Betriebssystem, was bedeutet, dass meine Benutzeroberfläche auch dann reagiert, wenn meine CPU die Nutzung von 100% auf allen Kernen vornimmt (Sie können es tatsächlich versuchen).

2
Chris O

With respect to Windows, Windows 7 does a much better job than XP when it comes to this sort of thing, so I would disagree with your statement "all versions of Windows". But even with XP, when you are using the client version of the OS, Windows will give some extra priority to the foreground app (by default). No matter which OS version though, if multiple processes are all stuck waiting on the same single, shared resource (could be I/O) than they will all behave in an unresponsive fashion.

Another way to view this problem, if explorer.exe is busy waiting for a shared resource (including CPU time), then the desktop/window manager itself will behave unresponsive. Likewise for any apps that directly or indirectly wait for explorer.exe to free up.

Besser als frühere Versionen, sicher. Trotzdem kann ich meinen Rechner (Phenom Dual 2,8, 4 GB) immer noch zuverlässig auf eine Durchforstung reduzieren, indem ich eine große Excel-Arbeitsmappe neu berechne. Dadurch werden beide Kerne festgeklemmt, aber es wird wenig Speicher oder Festplattenzugriff benötigt, und es werden keine Treiber verwendet. vor 11 Jahren 0
@ JonofAllTrades - Wie andere bereits erwähnt haben, könnte Excel übermäßige Kontextwechsel durchführen (wodurch das gesamte System verlangsamt wird) oder die Cache-Zeilen zu oft inaktiviert werden (was auch das gesamte System verlangsamt). Es ist möglich, dass Excel für dieses spezielle Szenario optimiert werden kann, aber nicht wahrscheinlich. Wenn Sie sich nicht für die Geschwindigkeit der Berechnung interessieren, können Sie die Prozessoraffinität für Excel auf nur einen Kern festlegen (Task-Manager -> Rechtsklick auf Excel.exe -> Affinität festlegen). Dies gibt den gesamten anderen Kern an der Rest des Systems und sollte die Reaktionsfähigkeit erhöhen. Chris O vor 11 Jahren 0
1
Luaan

Benutzermodusanwendungen können die Benutzeroberfläche Ihres Betriebssystems im Allgemeinen nicht verlangsamen. Die Situation ist jedoch nicht so eindeutig wie es scheint. Es gibt keine einzige Anwendung im Benutzermodus, die sich zu 100% im Benutzermodus befindet, entweder aufgrund von Systemaufrufen (insbesondere des Dateisystems) oder aufgrund der Zuordnung von virtuellem Speicher.

In den meisten Fällen steckt das Betriebssystem nicht bei der CPU-Arbeit, sondern wartet auf einige E / A-Ressourcen. Dies ist besonders offensichtlich, wenn Sie keinen physischen Speicher mehr haben und in die Auslagerungsdatei gehen (obwohl das Betriebssystem in der Lage ist, Speicherplatz in die Auslagerungsdatei zu legen, selbst wenn genügend physischer Arbeitsspeicher zur Verfügung steht). Windows ist normalerweise ziemlich klug, aber es ist durchaus möglich, dies zu "brechen".

Wenn es sich wirklich um eine CPU handelt, liegt dies höchstwahrscheinlich an einem gierigen Treiber (der überwiegende Teil davon wird nicht von Microsoft geschrieben). Treiber im Kernel-Modus sind vom vorbeugenden Multitasking ausgenommen (sowohl aus Gründen der Latenz als auch aus Gründen der Zuverlässigkeit). Wenn also ein Treiber eine zweite lange Schleife auf der CPU ausführt, haben Sie kein Glück, es wird kein Vorgriff geleistet.

Ein großartiges und einfaches Werkzeug, um einige davon zu sehen, ist der Process Explorer (von SysInternals), der Ihnen die Kernel-Zeit einer CPU zeigt (dh, wie viel CPU-Kernarbeit im Kernel ausgeführt wird, im Gegensatz zum Benutzer) Anwendungen selbst). Windows 7 und höher fügt dies auch in ihren Task-Manager ein (die rote Linie in den CPU-Auslastungsdiagrammen).

Alles in allem rettet vorbeugendes Multitasking die OS-Entwickler nicht vor Kompromissen. Alles kostet immer alles und die Planung von Aufgaben ist in der Tat sehr schwierig (im Moment jongliert mein Betriebssystem über 2000 Threads - das ist ziemlich viel, und ich mache eigentlich gar nichts "). Wäre es besser, den Threads kleinere Zeitabschnitte zu geben und mehr Zeit damit zu verbringen, den Kontext zu wechseln? Wäre es besser, ihnen länger Zeit zu geben und die Latenz zu opfern?

Überprüfen Sie also, was die Festplatten tun. Überprüfen Sie, wie Ihr Speicher verwendet wird. Überprüfen Sie die Kernel-Zeit. Dies zeigt Ihnen wahrscheinlich, warum Windows bei schwerer Arbeit die Reaktionsfähigkeit verliert. Einige davon können behoben werden (Speicher freigeben, Speicher-Täter einschränken, CPU-Affinität manuell auswählen ...), andere werden einfach dadurch gelöst, dass die Treiber auf dem neuesten Stand gehalten werden (Grafiktreiber waren für die von ihnen verursachten Probleme ziemlich auffällig.) das hat wahrscheinlich dazu beigetragen, dass Windows sie in den letzten Versionen vom Kernel-Modus in den User-Modus zurückmeldete).

In Bezug auf die GPU verwendet das moderne Windows die GPU-Beschleunigung zum Rendern der grafischen Benutzeroberfläche (eigentlich auch Windows XP). Wenn Ihre Anwendung die GPU erheblich belastet, kann dies auch zu einer verlangsamten Reaktionszeit von Windows führen, insbesondere in Aero. Da GPUs zunehmend als GP-Hyper-CPUs eingesetzt werden, kann dies auch außerhalb von Spielen und dergleichen von Bedeutung sein.

Ein weiterer schwerwiegender Straftäter ist eine schlecht geschriebene Multithread-Anwendung. Es ist ziemlich einfach, das Zwischenspeichern von Speichern zu beenden, wenn Sie dumme Sachen machen, und der Arbeitsspeicher ist im Vergleich zur CPU selbst extrem langsam. Ohne effiziente Zwischenspeicherung wird die CPU sehr, sehr langsam (obwohl sie eigentlich die ganze Zeit wartet). Dies ist bei Multi-Core-CPUs (und Multi-CPU-Systemen) noch komplizierter, da viele Multithread-Vorgänge zur Sicherstellung der Konsistenz zwischengespeicherte Daten ungültig machen (damit eine CPU nicht auf den "alten" Wert der CPU zugreift Variable im Speicher aus dem Cache / den Registern). All diese Dinge sind unglaublich schnell, aber ... CPUs sind schneller. Viel schneller. Was natürlich auch die Probleme der verschiedenen CPU-Anbieter einleitet, die dieselben Dinge unterschiedlich behandeln, völlig unabhängig von dem viel übergeordneten Betriebssystem.Sie sind stark parallelisiert und führen nicht mehr eine Anweisung nach der anderen aus.

Selbst wenn das Betriebssystem alles perfekt macht (offensichtlich ein unmögliches Ideal), kann es dennoch aufgrund von Hardwareproblemen und der Kommunikation mit der Hardware zum Stillstand kommen. Was nützt es, dass Sie über eine 4-Kern-CPU verfügen, wenn es Ihrer Anwendung gelingt, den RAM R / W vollständig zu sättigen? Was nützt es, eine schnelle Festplatte zu haben, wenn jedes einzelne Byte, das es liest, durch die CPU laufen muss (PIO beachten?). Bei jeder Hardwareoperation, die keinen direkten Speicherzugriff verwendet, kann die CPU möglicherweise blockiert werden.

Und jetzt laufen die meisten Windows tatsächlich als Anwendungen im Benutzermodus. Und sie interagieren mit den Anwendungen, die ebenfalls ausgeführt werden. Wenn ich explorer.exeetwas für mich tun möchte, kann es in der Zwischenzeit nichts anderes tun. Wenn ich eine Milliarde Fenstermeldungen an ein Fenster schicke, wird dies eine Spur hinterlassen.

Es ist immer so viel los, Garantien sind sehr schwierig. Beachten Sie, wie schnell die Dinge werden, sobald der Bildschirm "Strg-Alt-Löschen" tatsächlich eingeblendet wird - plötzlich ist es so, als ob nichts wäre. :)

0
LMSingh

Insbesondere bei Fenstern, die zu einer Durchforstung kommen. Eine der häufigsten Ursachen, die ich feststelle, ist, wenn mehrere Prozesse genügend virtuellen Speicher verwenden, um eine Menge Swapping zu erzwingen. Es kann nicht "scheinen", dass es eine Menge Festplattenaktivität gibt, wie auch immer üblich.

Dies ist leicht zu beweisen und funktioniert auch, um aus dem Stau herauszukommen, indem einfach einige kleine Prozesse (wie ein Notizblock) ausgewählt und "sauber" und "geduldig" beendet werden. Dies beginnt den gestauten Autobahneffekt zu reduzieren. Und dann schließen Sie ein großes Gedächtnis, und alles wird wieder in einen verwendbaren Zustand versetzt. Das Beobachten der Plattenaktivität während dieser Zeit zeigt oft, dass sehr wenig los ist.

Warum schlage ich vor, kleinere Apps zuerst zu schließen? Indem Sie kleinere Apps zuerst entfernen, geben Sie virtuellen Speicher mit minimaler Festplattenaktivität frei und machen das Entfernen des Computers schnell. Wenn Sie versuchen, eine große App zu schließen, z. B. Firefox oder Chrome, haben sie alle Schließzeiten. Dies ist darauf zurückzuführen, dass die meisten letzten Apps Hintergrundprozesse haben, die nicht für eine lange Zeit verschwinden werden, da die Hintergrundprozesse auch in der Auslagerungsdatei stecken bleiben. Um das Ganze noch schlimmer zu machen, haben sie auch eine geringere Priorität. Sie benötigen sogar noch mehr Zeit, um ihr Geschäft abzuschließen, und der gesamte von der App angeforderte virtuelle Speicher muss warten, bis alle Hintergrundprozesse und Threads freigegeben sind.

Ich habe aus Erfahrung erfahren, dass die Browser einer der schlechtesten sind, wenn es darum geht, schnell und sauber zu schließen. Sogar die Office-Apps schließen sauberer und schneller.

Es gibt Zeiten, in denen Geduld gefragt ist, aber wenn es um Webbrowser geht, verschwenden Sie keine Zeit. Es ist besser, sie einfach zu beenden (zu töten). Sie behandeln das gut. Ich töte immer -9 Chrom. Ein Neustart mit einigen hundert Registerkarten (1200) erfordert jedoch einige Arbeit. Dan D. vor 10 Jahren 0
Das Szenario, das ich mir vorstelle, ist, dass ausreichend Speicher und minimale Festplatten-E / A vorhanden sind - eine hohe CPU-Belastung allein reicht manchmal aus, um die OS-Benutzeroberfläche fast unbrauchbar zu machen. Mein Verständnis ist, dass, egal wie viel CPU-Zeit eine App * verwenden möchte, das Betriebssystem einen Block für sich selbst reservieren kann / sollte / muss. Solange also keine Konflikte mit anderen Ressourcen bestehen, sollte die GUI reaktionsfähig bleiben. vor 10 Jahren 0
@ JonofAllTrades OS kann und muss einen Chunk reservieren. Wenn Sie jedoch mit einer hohen CPU-Auslastung extrem langsam sind, haben Sie, mein Freund, höchstwahrscheinlich ein Problem mit dem Grafikkartentreiber. Es ist möglich, dass der Treiber so geschrieben ist, dass er das OS zurückrufen muss, anstatt nur das Screen-Painting zu handhaben. Ein einfacher Test besteht darin, zu versuchen, die Aero-Unterstützung (und möglicherweise sogar Themes) vorübergehend zu deaktivieren, um festzustellen, wo das eigentliche Problem liegt. BTW responsive mouse bedeutet nicht, dass das Betriebssystem sonst nicht beschäftigt ist. Ein großer Teil der Handhabung von Maus / kbd wird in Treibern ausgeführt, die immer Zeitscheiben erhalten. LMSingh vor 10 Jahren 0
@DanD. Du hast alle Grenzen durchgebrannt, die ich mit 1200 Registerkarten kenne !! Beeindruckend! In XP würde ich sehen, dass Windows anfängt zu korrumpieren, nachdem der IE etwa 23 Registerkarten hatte. IN Win 7 habe ich bis zu 60 in Chrome und weitere 45 in FF gleichzeitig geschoben (während viele andere Apps laufen), und dann werden die Dinge instabil. Ich denke, ich muss herausfinden, wie ich zuerst an ein paar hundert vorbeigehen kann! LMSingh vor 10 Jahren 0