Schnellreferenz

Dieses Kapitel führte die folgenden Symbole ein:

#include <linux/param.h>, HZ  

Das Symbol HZ gibt die Anzahl der pro Sekunde generierten Taktschläge an.

#include <linux/sched.h> , volatile unsigned long jiffies

Die Variable jiffies wird einmal pro Takt inkrementiert, also HZmal pro Sekunde.

#include <asm/msr.h>, rdtsc(low,high);, rdtscl(low);

Liest den Zeitstempel-Zähler oder dessen untere Hälfte. Die Header-Datei und Makros gibt es nur auf PC-Prozessoren; andere Plattformen müssen asm-Konstrukte verwenden, um ähnliche Resultate zu erzielen.

extern struct timeval xtime;

Die aktuelle Zeit zum Zeitpunkt des letzten Timer-Ticks.

#include <linux/time.h>, void do_gettimeofday(struct timeval *tv);, void get_fast_time(struct timeval *tv);

Diese Funktionen geben die aktuelle Zeit zurück. Die erste hat eine hohe Auflösung, die letzte ist schneller bei geringerer Auflösung.

#include <linux/delay.h>, void udelay(unsigned long usecs);, void mdelay(unsigned long msecs);

Diese Funktionen verzögern die Ausführung um die angegebene Anzahl von Mikrosekunden oder Millisekunden. Die erste Funktion sollte verwendet werden, um maximal eine Millisekunde zu warten; die zweite sollte mit großer Vorsicht verwendet werden, weil diese Verzögerungen beide Busy-Loops sind.

int in_interrupt();

Gibt einen von Null verschiedenen Wert zurück, wenn sich der Prozessor gerade im Interrupt-Modus befindet.

#include <linux/tqueue.h>, DECLARE_TASK_QUEUE(variablename);

Das Makro deklariert eine neue Variable und initialisiert diese.

void queue_task(struct tq_struct *task, task_queue *list);

Die Funktion registriert einen Task zur späteren Ausführung.

void run_task_queue(task_queue *list);

Diese Funktion führt eine Task-Schlange aus.

task_queue tq_immediate, tq_timer;

Diese vordefinierten Task-Schlangen werden sobald wie möglich (bei tq_immediate) oder nach jedem Timer-Tick (bei tq_timer) ausgeführt.

int schedule_task(struct tq_struct *task);

Merkt einen Task zur Ausführung in der Scheduler-Schlange vor.

#include <linux/interrupt.h>, DECLARE_TASKLET(name, function, data), DECLARE_TASKLET_DISABLED(name, function, data)

Deklarieren eine Tasklet-Struktur, die die angegebene Funktion aufruft (und die angegebenen unsigned long-Daten übergibt), wenn das Tasklet ausgeführt wird. Die zweite Version initialisiert das Tasklet mit einem gesperrten Zustand, so daß es nicht ausgeführt wird, bevor es nicht explizit freigeschaltet wird.

void tasklet_schedule(struct tasklet_struct *tasklet);

Merkt das angegebene Tasklet zur Ausführung vor. Wenn das Tasklet freigeschaltet ist, wird es kurze Zeit später auf der gleichen CPU ausgeführt, die auch tasklet_schedule aufgerufen hat.

tasklet_enable(struct tasklet_struct *tasklet);, tasklet_disable(struct tasklet_struct *tasklet);

Diese Funktionen schalten ein Tasklet frei respektive sperren es. Ein gesperrtes Tasklet kann vorgemerkt werden, wird aber nicht ausgeführt, bevor es nicht freigeschaltet ist.

void tasklet_kill(struct tasklet_struct *tasklet);

Hindert ein sich immer wieder vormerkendes Tasklet an der weiteren Ausführung. Diese Funktion kann blockieren und darf nicht zur Interrupt-Zeit aufgerufen werden.

#include <linux/timer.h>, void init_timer(struct timer_list * timer);

Diese Funktion initialisiert einen frisch allozierten Timer.

void add_timer(struct timer_list * timer);

Diese Funktion fügt timer in die globale Liste der ausstehenden Timer ein.

int mod_timer(struct timer_list *timer, unsigned long expires);

Diese Funktion wird dazu verwendet, den Ablaufzeitpunkt einer bereits vorgemerkten Timer-Struktur zu ändern.

int del_timer(struct timer_list * timer);

del_timer entfernt einen Timer aus der Liste der ausstehenden Timer. Wenn der Timer tatsächlich vorgemerkt war, gibt del_timer 1 zurück, ansonsten 0.

int del_timer_sync(struct timer_list *timer);

Diese Funktion ähnelt del_timer, garantiert aber, daß die vorgemerkte Funktion derzeit nicht gerade auf anderen CPUs läuft.