Linux kernel-Timer: Message an User-Space?

Hallo,

ich möchte mehrere Kernel-Timer nutzen, um verschiedene zeitabhängige Funktionalitäten in einem User-Space Prozess steuern zu können.

Also:

  • z.B. 10 unterschiedliche Kernel-Timer (im Sekunden-Bereich)
  • wenn Kernel-Timer abgelaufen: Nachricht an Prozess im User-Space

Hat jemand eine Ahnung, oder kann mir einen Tipp geben, wie ich eine asynchrone Nachricht beim Ablauf eines Kernel-Timers an den User-Space bekomme?

Gibt es dazu Mechanismen, oder gibt es völlig andere Ansätze?

Bin für jede Anregung dankbar.

Grüße,

riedel2

ich möchte mehrere Kernel-Timer nutzen, um verschiedene
zeitabhängige Funktionalitäten in einem User-Space Prozess
steuern zu können.

Also:

  • z.B. 10 unterschiedliche Kernel-Timer (im Sekunden-Bereich)
  • wenn Kernel-Timer abgelaufen: Nachricht an Prozess im
    User-Space

Hat jemand eine Ahnung, oder kann mir einen Tipp geben, wie
ich eine asynchrone Nachricht beim Ablauf eines Kernel-Timers
an den User-Space bekomme?

Muss der Timer unbedingt im Kernel laufen? Du kannst auch mit einer Kombination aus zB gettimeofday() und select() erstaunlich genaue Timer bauen, wenn du von select() nur die Timeout-Funktionalität benutzt. Der Kernel verwendet intern sowieso in den meisten Fällen die selbe Zeitquelle wie gettimeofday.

Wenn du unbedingt Nachrichten aus dem Kernelspace rausbekommen willst kannst du dir ja mal netlink anschauen (und wenn du’s verstehst und damit klarkommst schreib bitte ein HOWTO, ich bräuchte sowas :wink: )

Muss der Timer unbedingt im Kernel laufen? Du kannst auch mit
einer Kombination aus zB gettimeofday() und select()
erstaunlich genaue Timer bauen, wenn du von select() nur die
Timeout-Funktionalität benutzt. Der Kernel verwendet intern
sowieso in den meisten Fällen die selbe Zeitquelle wie
gettimeofday.

Eigentlich ne gute Idee, muss nur mal schauen ob das auch im ms-Bereich funktioniert (brauch ich vielleicht auch noch).

Wenn du unbedingt Nachrichten aus dem Kernelspace rausbekommen
willst kannst du dir ja mal netlink anschauen (und wenn du’s
verstehst und damit klarkommst schreib bitte ein HOWTO, ich
bräuchte sowas :wink: )

Dachte nur: Wieso einfach, wenns auch schwer geht :wink:

Vielen Dank!

otti

Eigentlich ne gute Idee, muss nur mal schauen ob das auch im
ms-Bereich funktioniert (brauch ich vielleicht auch noch).

In dem Bereich bekommst du schon Probleme mit der Zeitscheibe, „normales“ Linux ist ja nicht echtzeitfähig und je nach Einstellung „tickt“ die Uhr mit 100-1000Hz vor sich hin.

Theoretisch (also bei geeignetem Untersatz) hast du bei select() eine Granularität im Mikrosekundenbereich, aber wesentlich genauer als 0,1 Sekunden kannst du selbst im Kernel nicht erwarten.

Wie genau das auf deinem System funktioniert kannst du ja leicht selber ausprobieren.

Dachte nur: Wieso einfach, wenns auch schwer geht :wink:

Sei K die Menge der im Kernel vorhandenen und zu lösenden Probleme, und E die menge der einfach lösbaren Probleme. Dann gilt:

|Kernel \cap Einfach| = 42

wobei dein Problem keins der 42 ist :wink: