Handbuch zur dynamischen Ablaufverfolgung in Solaris

Prüfpunkte

Die sched-Prüfpunkte sind inTabelle 26–1 beschrieben.

Tabelle 26–1 sched-Prüfpunkte

Prüfpunkt 

Beschreibung 

change-pri

Prüfpunkt, der kurz vor der Änderung der Priorität eines Threads ausgelöst wird. Auf lwpsinfo_t des Threads wird mit args[0] gezeigt. Die aktuelle Priorität des Threads befindet sich im Feld pr_pri dieser Struktur. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt. Die neue Priorität des Threads ist in args[2] enthalten.

dequeue

Prüfpunkt, der unmittelbar vor dem Löschen eines ausführbaren Threads aus einer Ausführungswarteschlange ausgelöst wird. Auf lwpsinfo_t des Threads, der aus der Warteschlange gelöscht wird, zeigt args[0]. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt. Auf cpuinfo_t der CPU, für welche der Thread aus der Warteschlange gelöscht wird, zeigt args[2]. Wenn der Thread aus einer Ausführungswarteschlange gelöscht wird, die keiner bestimmten CPU zugeordnet ist, hat die Komponente cpu_id dieser Struktur den Wert -1.

enqueue

Prüfpunkt, der ausgeführt wird, unmittelbar bevor ein ausführbarer Thread in eine Ausführungswarteschlange gestellt wird. Auf lwpsinfo_t des Threads, der in die Warteschlange gestellt wird, zeigt args[0]. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt. Auf cpuinfo_t der CPU, für welche der Thread in die Warteschlange gestellt wird, zeigt args[2]. Wenn der Thread in eine Ausführungswarteschlange gestellt wird, die keiner bestimmten CPU zugeordnet ist, hat die Komponente cpu_id dieser Struktur den Wert -1. args[3] enthält einen booleschen Wert, der angibt, ob der Thread an den Anfang der Ausführungswarteschlange gestellt wird. Ist der Wert nicht Null, wird der Thread an den Anfang der Ausführungswarteschlange gestellt, bei Null an das Ende.

off-cpu

Prüfpunkt, der ausgelöst wird, wenn die aktuelle CPU kurz davor steht, die Ausführung eines Threads zu beenden. Die Variable curcpu gibt die aktuelle CPU an. Die Variable curlwpsinfo steht für den Thread, dessen Ausführung beendet wird. Die Variable curpsinfo beschreibt den Prozess, der den aktuellen Thread enthält. Auf die Struktur lwpsinfo_t des Threads, den die aktuelle CPU als Nächstes ausführen wird, zeigt args[0] . Auf psinfo_t des Prozesses, der den nächsten Thread enthält, wird mit args[1] gezeigt.

on-cpu

Prüfpunkt, der ausgelöst wird, wenn eine CPU gerade mit der Ausführung eines Threads begonnen hat. Die Variable curcpu gibt die aktuelle CPU an. Die Variable curlwpsinfo steht für den Thread, dessen Ausführung beginnt. Die Variable curpsinfo beschreibt den Prozess, der den aktuellen Thread enthält.

preempt

Prüfpunkt, der ausgelöst wird, unmittelbar bevor der aktuelle Thread unterbrochen wird, weil einem anderen CPU-Zeit zugeteilt wird. Nachdem dieser Prüfpunkt ausgelöst wird, wählt der aktuelle Thread einen auszuführenden Thread, und der Prüfpunkt off-cpu wird für den aktuellen Thread ausgelöst. In einigen Fällen wird ein Thread auf einer CPU präemptiv unterbrochen, aber der ihm zuvorkommende Thread wird in der Zwischenzeit auf einer anderen CPU ausgeführt. In diesem Fall wird der Prüfpunkt preempt ausgelöst, doch der Dispatcher kann keinen Thread mit höherer Priorität finden, der ausgeführt werden könnte. Dann wird der Prüfpunkt remain-cpu anstelle von off-cpu ausgelöst.

remain-cpu

Prüfpunkt, der ausgelöst wird, wenn eine Scheduling-Entscheidung getroffen wurde, aber der Dispatcher entschieden hat, den aktuellen Thread weiter auszuführen. Die Variable curcpu gibt die aktuelle CPU an. Die Variable curlwpsinfo steht für den Thread, dessen Ausführung beginnt. Die Variable curpsinfo beschreibt den Prozess, der den aktuellen Thread enthält.

schedctl-nopreempt

Prüfpunkt, der ausgelöst wird, wenn ein Thread präemptiv unterbrochen und aufgrund einer Anforderung der Vorrangunterbrechungssteuerung anschließend wieder an den Anfang der Ausführungswarteschlange gestellt wird. schedctl_init(3C) enthält weitere Informationen zur Vorrangunterbrechungssteuerung. Ebenso wie bei preempt wird nach schedctl-nopreempt entweder off-cpu oder remain-cpu ausgelöst. Da schedctl-nopreempt eine Wiedereinreihung des aktuellen Threads an den Anfang der Ausführungswarteschlange kennzeichnet, wird remain-cpu wahrscheinlich eher nach schedctl-nopreempt ausgelöst als off-cpu. Auf lwpsinfo_t des Threads, der präemptiv unterbrochen wird, zeigt args[0]. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt.

schedctl-preempt

Prüfpunkt, der ausgelöst wird, wenn ein Thread, der mit Vorrangunterbrechungssteuerung arbeitet, trotzdem präemptiv unterbrochen und wieder an das Ende der Ausführungswarteschlange gestellt wird. schedctl_init(3C) enthält weitere Informationen zur Vorrangunterbrechungssteuerung. Ebenso wie bei preempt wird nach schedctl-preempt entweder off-cpu oder remain-cpu ausgelöst. Wie preempt (und anders als schedctl-nopreempt), kennzeichnet schedctl-preempt die Wiedereinreihung des aktuellen Threads am Ende der Ausführungswarteschlange. Folglich wird off-cpu mit höherer Wahrscheinlichkeit nach schedctl-preempt ausgelöst als remain-cpu. Auf lwpsinfo_t des Threads, der präemptiv unterbrochen wird, zeigt args[0]. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt.

schedctl-yield

Prüfpunkt, der ausgelöst wird, wenn ein Thread mit aktivierter Vorrangunterbrechungssteuerung und einer künstlich verlängerten Zeitscheibe Code ausgeführt hat, um die CPU anderen Threads zu übergeben. 

sleep

Prüfpunkt, der ausgelöst wird, unmittelbar bevor sich der aktuelle Thread an einem Synchronisierungsobjekt schlafen legt. Der Typ des Synchronisierungsobjekts ist in der Komponente pr_stype der Struktur lwpsinfo_t enthalten, auf die mit curlwpsinfo gezeigt wird . Die Adresse des Synchronisierungsobjekts ist in der Komponente pr_wchan der Struktur lwpsinfo_t enthalten, auf die mit curlwpsinfo gezeigt wird. Die Bedeutung dieser Adresse ist ein privates Implementierungsdetail, aber der Adresswert kann als einmaliges Symbol für das Synchronisierungsobjekt behandelt werden.

surrender

Prüfpunkt, der ausgelöst wird, wenn eine CPU von einer anderen CPU angewiesen wird, eine Scheduling-Entscheidung zu treffen - dies häufig, weil ein Thread mit einer höheren Priorität ausführbar geworden ist. 

tick

Prüfpunkt, der im Rahmen einer auf Systemuhr-Ticks basierten Abrechnung ausgelöst wird. Bei der CPU-Abrechnung auf Grundlage von Uhr-Ticks wird untersucht, welche Threads und Prozesse ausgeführt werden, wenn ein Interrupt mit festem Intervall ausgelöst wird. Auf die Struktur lwpsinfo_t des Threads, dem CPU-Zeit zugewiesen wird, zeigt args[0]. Auf psinfo_t des Prozesses, der den Thread enthält, wird mit args[1] gezeigt.

wakeup

Prüfpunkt, der ausgelöst wird, unmittelbar bevor der aktuelle Thread einen an einem Synchronisierungsobjekt schlafenden Thread aufweckt. Auf lwpsinfo_t des schlafenden Threads zeigt args[0]. Auf psinfo_t des Prozesses, der den schlafenden Thread enthält, wird mit args[1] gezeigt. Der Typ des Synchronisierungsobjekts ist in der Komponente pr_stype der Struktur lwpsinfo_t des schlafenden Threads enthalten. Die Adresse des Synchronisierungsobjekts ist in der Komponente pr_wchan der Struktur lwpsinfo_t des schlafenden Threads enthalten. Die Bedeutung dieser Adresse ist ein privates Implementierungsdetail, aber der Adresswert kann als einmaliges Symbol für das Synchronisierungsobjekt behandelt werden.