Die CPU tut nicht die Nutzungsberechnungen von selbst. Es kann Hardware-Funktionen, um diese Aufgabe zu erleichtern, aber seine meist die Aufgabe des Betriebssystems. So offensichtlich die Details der Implementierungen variieren (vor allem im Fall von Multicore-Systemen). Die allgemeine Idee ist zu sehen, wie lange ist die Schlange der Dinge, die die CPU zu tun hat. Das Betriebssystem kann einen Blick auf die Scheduler in regelmäßigen Abständen zu bestimmen, die Menge der Dinge, die sie zu tun hat. Was den zweiten Teil Ihrer Frage betrifft, sind die meisten modernen Betriebssysteme multi-tasked. Das heißt, das OS wird nicht zu lassen, Programme nehmen alle die Bearbeitungszeit und nicht für sich selbst haben (es sei denn, Sie machen es tun). Mit anderen Worten, auch wenn eine Anwendung hängt, kann das Betriebssystem immer noch einige Zeit weg für seine eigene Arbeit zu stehlen. Theres eine spezielle Aufgabe genannt die Leerlauf-Aufgabe, die ausgeführt wird, wenn keine andere Aufgabe ausgeführt werden kann. Die Verwendung ist nur der Prozentsatz der Zeit waren nicht die Leerlauf-Aufgabe ausgeführt. Das Betriebssystem wird eine laufende Summe der Zeit, die die Leerlauf-Task ausgeführt wird, beibehalten: Wenn wir zur Leerlauf-Task wechseln, setzen wir t aktuelle Zeit, wenn wir von der Leerlauf-Task wegschalten, füge (aktuelle Zeit - t) zur laufenden Summe hinzu Nehmen wir zwei Abtastwerte der laufenden Summe n Sekunden auseinander, wir können den Prozentsatz der n Sekunden berechnen, die die Leerlauf-Task als (zweites Sample - erstes Sample) ausgegeben haben. N Beachten Sie, dass dies etwas ist, das das Betriebssystem und nicht die CPU ausführt. Das Konzept einer Task existiert nicht auf der CPU-Ebene (In der Praxis wird die Leerlauf-Task setzen Sie den Prozessor mit einer HLT-Anweisung zu schlafen, so dass die CPU weiß, wenn es nicht verwendet wird) Wie für die zweite Frage sind moderne Betriebssysteme Präemptiv multi-tasked, was bedeutet, dass das Betriebssystem kann weg von Ihrer Aufgabe jederzeit wechseln. Wie funktioniert das OS tatsächlich stehlen die CPU weg von Ihrer Aufgabe Interrupts: de. wikipedia. orgwikiInterrupt Um CPU-Auslastung, die periodische Abtastung der gesamten Prozesszeit, und finden Sie den Unterschied. Zum Beispiel, wenn dies die CPU-Zeiten für Prozess 1 sind: Und dann erhalten Sie sie wieder zwei Sekunden später, und sie sind: Sie subtrahieren die Kernel-Zeiten (für eine Differenz von 0,03) und die Benutzer-Zeiten (0,61), fügen sie zusammen (0,64) und dividiert durch die Abtastzeit von 2 Sekunden (0,32). Also in den letzten zwei Sekunden, verwendet der Prozess durchschnittlich 32 CPU-Zeit. Die spezifischen Systemaufrufe benötigt, um diese Informationen sind (natürlich) unterschiedlich auf jeder Plattform. Unter Windows können Sie GetProcessTimes verwenden. Oder GetSystemTimes, wenn Sie eine Verknüpfung zu insgesamt verwendet oder im Leerlauf CPU-Zeit möchten. Antwort # 2 am: September 20, 2010, um 1:38 Uhr Eine Möglichkeit, es zu tun, ist wie folgt: Wählen Sie ein Stichprobenintervall, sagen alle 5 min (300 Sekunden) der realen verstrichenen Zeit. Sie erhalten diese von gettimeofday. Holen Sie sich die Prozesszeit youve verwendet, dass in 300 Sekunden. Sie können den time () - Aufruf verwenden, um diesen zu erhalten. Das wäre die newprocesstime - oldprocesstime. Wobei oldprocesstime die Prozesszeit ist, die Sie aus dem letzten Zeitintervall gespeichert haben. Ihr CPU-Prozentsatz ist dann (processtimeelapsedtime) 100.0 Sie können einen Alarm zu signalisieren, dass Sie alle 300 Sekunden, um diese Berechnungen zu machen. Ich habe einen Prozess, den ich nicht mehr als einen bestimmten Zielcpu-Prozentsatz verwenden möchte. Diese Methode funktioniert ziemlich gut und stimmt gut mit meinem Systemmonitor überein. Wenn wir zuviel CPU einsetzen, schlafen wir ein wenig. Antwort # 1 am: Oktober 12, um 21:18 Nun, soweit ich es verstehen, gibt es eine riesige Schleife, dass die Betriebssysteme spinnt. Ihr Prozess wird von dieser Schleife aus verwaltet. Es erlaubt externen Code direkt auf dem Prozessor in Stücke ausgeführt werden. Ohne zu viel zu übertreiben, ist dies eine Uber-Vereinfachung dessen, was tatsächlich vor sich geht. Beantwortet September 20 10 at 1:24 Dies ist mein grundlegendes Verständnis von mit ein wenig Exposition gegenüber ähnlichen Code. Programme wie Task-Manager oder Ihr Widget-Zugriffssystem rufen wie NtQuerySystemInformation () und verwenden die Informationen aus dem Betriebssystem zu machen, die einfache Berechnung der Prozent der Zeit eine CPU im Leerlauf oder verwendet wird (in einer Standard-Zeit). Eine CPU weiß, wann sie im Leerlauf ist, so dass sie daher bestimmen kann, wann sie nicht im Leerlauf ist. Diese Programme können in der Tat verstopft werden. Meine crummy Laptops Task-Manager friert die ganze Zeit bei der Berechnung der CPU-Auslastung, wenn seine Richtfest auf 100. Ein kühles Bit von Beispielcode finden Sie auf MSDNs-Website, die Funktionsaufforderungen für die Berechnung der CPU-Auslastung für eine Reihe von Anweisungen: msdn. microsoften - Uslibraryaa364157 (VS.85).aspx Was diese Systemaufrufe tun, ist Zugriffskernel-Code, den ich glaube. Was über den Rahmen meines Verständnisses hinausgeht. Antwort # 2 am: August 20, 2010, um 1:28 Uhr Es gibt eine Reihe von Möglichkeiten, wie Sie es tun können: Prozessor pflegt mehrere Zähler, die Leistung zu messen, können Sie sie über Papi-Schnittstelle zugreifen. Zum Beispiel ist hier eine kurze Einleitung: blogs. oraclejonhentryperformancecountergenericevents der Zähler, den Sie wünschen können, ist PAPITOTCYC, das die Zahl der beschäftigten Zyklen ist (wenn ich mich recht erinnere) antwortete am 20. September um 1:22 Ihre Antwort 2017 Stapel-Austausch, IncWhat Inigoesdr und der Aufstellungsort heshe Punkte zu schreiben ist mehr oder weniger richtig, aber denken Sie daran, dass die Last Durchschnitt ist nicht wirklich ein regelmäßiger mathematischer Durchschnitt, es ist ein exponentiell gedämpft gleitenden Durchschnitt. Dies ist eine sehr gute und eingehende Artikel zum Thema CPU-Prozentsatz und Belastung Durchschnitt, und wie sie in Linux berechnet werden. Wikipedia hat auch einen guten Artikel darüber (einige Unterschiede zwischen Last Durchschnitt auf Linux vs die meisten UNIX-Systeme zum Beispiel). Antwortete am 25.10.10 um 23:55 Uhr
No comments:
Post a Comment