periodisch Prozesse / Scheduling / C-Implementierungen



  • Hallo werte Menschen,

    falls das das falsch forum ist bitte verschieben, freue mich in jedem Fall über tipps und Anregungen.

    Ich beschreibe hier mal mein Problem und unten hab ich das Ganze nochmal für die lesefaulen zusammengefasst 😃

    Es sollen N Prozess periodisch aufgerufen werden, jeweils mit eigener Frequenz. Im Moment helfe ich mir, indem ich in die jeweiligen C-Programme ein delay() rein gepackt habe. Das ist nicht wirklich schön und ich bin mir auch nicht sicher, wie das delay() implementiert ist. Da ich ja soetwas wie ein weiches Echtzeitsystem brauche, habe ich mich mal mit dem Scheduler beschäftigt und war positiv überrascht. Es gibt wohl ein Prioritätsbereich, der genau für soetwas gemacht ist. Die Prozesse mit solchen Prioritäten kann man wohl nach RR oder FIFO schedulen.

    Aber wo/wie kann ich den zu verwendenden Scheduling-Algorithmus festlegen? Für Priorität 1 bis 99 würde sowohl RR also auch FIFO als Scheduling-Algorithmus gehen (http://man7.org/linux/man-pages/man7/sched.7.html).
    Wie rufe ich die Prozesse am besten Periodisch auf? So etwas müsste doch auch das OS können und nicht nur über Scripte realisierbar sein, nur habe ich bisher keine API gefunden.
    Und noch eine ziemlich dumme Frage: In den ganzen Dokumentationen geht es meistens um Threads. Irgendwie hab ich gerade nen Hirn-hänger: wenn ich einen Prozess unter Linux starte, dann habe ich ja nur einen main-Thread, das heißt wenn dieser Thread gestartet/beendet/gescheduled wird, dann ist das gleichbedeutend dass der Prozess gestartet/beendet/gescheduled wird, oder? Oder hat der Prozess da noch einen Overhead den ich vergesse? 😕

    Ziel: N verschiedene Prozesse periodisch aufrufen, feste Periode, Prozess je nach Priorität nicht unterbrechbar
    Bisher: Im C-Programm ein delay() aufrufen (aus WiringPi.h), kein schließen und öffnen der Prozesse
    Ansatz: nutzen des Schedulers des Linux-Kernels, "weiche Echtzeit", Scheduling-Algorithmus: SCHED_RR nutzen
    Problem: wie/wo Prozesse periodisch aufrufen? etc

    Plattform, OS: Raspberry Pi, Raspbian (basiert auf Debian 8, Linux-Kernel 4.1.19)
    Sprache: Programme sind in C geschrieben, ein zusätzliches Programm/Komponente auch möglichst in C

    Vielen Dank schonmal und Grüße
    PS: Ich habe mein Problem auch noch parallel in einem anderen Forum nur für Linux dargestellt, aber ich befürchte die Community dort ist recht inaktiv. Wenn jemand noch ein geeignetes Forum kennt, würd mich da auch über eine Adresse freuen.



  • Falls es jemanden interessiert:

    Prozesse periodisch "aufrufen": http://man7.org/linux/man-pages/man2/clock_nanosleep.2.html
    Zwar werden die Prozesse nicht wirklich geschlossen und aufgeurfen (was im nachhinein bei meinem projekt auch keinen Vorteil gebracht hätte), sondern die Prozesse werden pausiert. Wann ein Prozess wieder arechenzeit erhält, ist aber nicht von dessen Laufzeit beeinflusst (wie das delay()). Es sei denn natürlich er rechnet langsamer, als dass er wieder aufgerufen wird 😃

    Scheduler festlegen (prio und Stategie): http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html

    Antwort auf dumme Frage (Prozess / Thread): http://www2.hs-fulda.de/~gross/betriebssysteme.bachelor/kap2.pdf
    "jeder Prozess besitzt mindestens einen (initialen) Thread" (2-3)

    Grüße 🙂



  • Du könntest mal bei den relevanten Stack-Exchange Seiten gucken und/oder fragen.
    Was OS-Zeugs angeht (Konfiguration, keine Programmierung) wäre das wohl http://superuser.com/
    Was Programmierung angeht http://stackoverflow.com/

    EDIT: Sehe gerade erst dass deine Frage viel älter ist als dein Nachtrag -> du weisst vermutlich schon alles was du wissen wolltest -> in dem Fall bitte einfach ignorieren. Sorry.


Anmelden zum Antworten