Hallo Zusammen! Mich beschäftigt aktuell eine Frage bezüglich FreeRTOS / Tasks & Threads, vielleicht kann dir mir einer beantworten ;) Frage: Was ist der Unterschied zwischen Tasks & Threads bei einem FreeRTOS? Angenommen: 1 CPU, OS FreeRTOS Dann: gibt es nur Tasks, und keine Threads. Angenommen: 2 oder CPUS, OS FreeRTOS Dann: kann es mehrere Tasks geben, und wenn ich diese aufteile auf die CPUs, sind das Threads. Stimmt das? Danke :)
Nich wirklich. Threads sehen alle den selben Speicherbereich. Also können sich gegenseitig Variablen übeschreiben. Prozesse haben eigene virtuelle Speicherbereiche und sehen sich daher nicht gegenseitig. Für Prozesse brauchts eine MMU, diese kann FreeRTOS nicht bedienen. Daher gilt dort Task=Thread.
Okay danke :) Dann besteht aber doch ein FreeRTOS streng genommen aus Threads oder xTaskCreate() --> xThreadCreate() ;) Grüße
:
Bearbeitet durch User
Ein Task ist ist ein allgemeinerer Name. Ein Task ist einfach nur das was getan werden soll, also eine Ansammlung an Instruktionen im Speicher. Die Ausführung ist egal ob als Thread, Prozess, bare metal oder Threadpool. Nur FreeRTOs kann eben nur Threads.
Aus dem FreeRTOS Buch: In FreeRTOS, each thread of execution is called a ‘task’. There is no consensus on terminology within the embedded community, but I prefer ‘task’ to ‘thread,’ as thread can have a more specific meaning in some fields of application. Alexander M. schrieb: > Dann besteht aber doch ein FreeRTOS streng genommen aus Threads Stimmt...
Danke für die Hilfe ;) Dann noch abschließend vielleicht die Frage: Mit FreeRTOS auf uC-Basis kann lediglich 1 Prozess gestartet werden, mit (natürlich) mehreren Threads (xTaskCreate). Mehrere Prozesse würden, wie in dem Beitrag auch bereits erwähnt, eine MMU benötigen, und die jeweiligen Prozesse könnten nicht auf gemeinsame Ressourcen (keine Semaphoren, keine gemeinsamen Variablen) zugreifen. Ich kann aber in FreeRTOS durch keine gemeinsame Verwendung von Variablen "quasi" mehrere Prozesse (xTaskCreate) laufen lassen, stimmt das :D? Danke ;)
Ganz konsistent ist FreeRTOS dabei nicht. Weil sich der Begriff anderswo eingebürgert hat, gibts auch in FreeRTOS mittlerweile "thread local storage". Mitten in einer Funktionsgruppe, die sonst den Begriff "Task" verwendet.
:
Bearbeitet durch User
Alexander M. schrieb: > Mehrere Prozesse würden, wie in dem Beitrag auch bereits erwähnt, eine > MMU benötigen, und die jeweiligen Prozesse könnten nicht auf gemeinsame > Ressourcen (keine Semaphoren, keine gemeinsamen Variablen) zugreifen. Doch, die können auf gemeinsame Ressourcen (zB ein UART oder shared memory) Zugreifen, aber eben nur über eine OS API oder Treiber API. OS API -> monolitischer Kernel wie Linux Treiber API, die als eigener Prozess läuft -> Mikrokernel ... und schon sind wir im Thema OS Design ;) 2 Pozesse können dann per "Interprozesskommunikation" miteinander reden: https://de.wikipedia.org/wiki/Interprozesskommunikation http://openbook.rheinwerk-verlag.de/linux_unix_programmierung/Kap09-000.htm Alexander M. schrieb: > Ich kann aber in FreeRTOS durch keine gemeinsame Verwendung von > Variablen "quasi" mehrere Prozesse (xTaskCreate) laufen lassen, stimmt > das Nein, denn du kannst ja jetzt nicht 2 Threads mit demselben Code starten. Die nutzen ja dann dieselben globalen Variablen. Nur lokale Variablen, die auf den Stack landen, sind dann getrennt. Die MMU würde jetzt beide virtuelle Speicherbereiche auf unterschiedliche physikalische Speicherbereiche mappen. A. K. schrieb: > gibts auch in FreeRTOS mittlerweile "thread local > storage". Mitten in einer Funktionsgruppe, die sonst den Begriff "Task" > verwendet. Einfach nur ein anderer Name für Variablen auf dem Stack oder geht das mit der MPU Erweiterung einher?
Mw E. schrieb: > Einfach nur ein anderer Name für Variablen auf dem Stack oder geht das > mit der MPU Erweiterung einher? Üblicherweise versteht man unter diesem Begriff eine Sorte globaler Variablen, die aber in jedem Thread getrennte Werte haben können. Wie das implementiert wird, ist dann von OS und Hardware abhängig. Bei x86 in Windows/Linux wird das über eines der sonst nicht mehr verwendeten Segmentregister implementiert. Ich habe nicht nachgesehen, aber in FreeRTOS könnte es ein Pointer im Task Record sein, der in jeder Task auf einen anderen Speicherbereich zeigt.
:
Bearbeitet durch User
Hier gibt's eine ausführliche Beschreibung für verschiedene (nicht-µC-)Plattformen: https://www.akkadia.org/drepper/tls.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.