Hallo, könnte jemand mal in ein paar Worten erklären, wie man die Ringpuffer-Aufgabe (Aufgabe 14) angeht ? Bei Aufgabe 15 wär ich auch für einige Tipps dankbar.
:
Verschoben durch User
Hab die Aufgabe nicht gelesen, du scheinbar auch nicht. Ansonsten hättest du die Frage präzisiert!
Frank schrieb: > Hab die Aufgabe nicht gelesen, du scheinbar auch nicht. Was soll denn bitte diese Unterstellung ? Ich kann die Frage nur konkretisieren, wenn ich an einer bestimmten Stelle der Aufgabe hänge und nicht weiterkomme. Ich verstehe die Aufgabe aber im Allgemeinen schon nicht. Da Daten kontinuierlich anfallen und in den Puffer geschrieben werden sollen, wird sich jedes Mal die höchstpriore Task (PT3) durchsetzen und den Puffer voll schreiben. Ende. So viel zu meinem Verständnis der Aufgabe. Daher wäre ich sehr dankbar, wenn jemand mit mehr Ahnung mal mit seinen eigenen Worten erklären könnte, wie das ganze funktionieren soll.
Hmm... Ich behaupte auch, dass du die Aufgabe, die du hier gepostet hast, nicht gelesen hast. Ich habe sie auch nicht gelesen. Schau dir nochmal an was du gepostet hast.
Wenn man das PDF öffnet und nicht nur die Vorschau ansieht, findet man auch die Aufgaben 14 und 15.
Iseh schrieb: > Da Daten kontinuierlich anfallen und in den Puffer geschrieben werden > sollen, wird sich jedes Mal die höchstpriore Task (PT3) durchsetzen und > den Puffer voll schreiben. Ende. > So viel zu meinem Verständnis der Aufgabe. CT1 ist aber höher Priorisiert. Sofern die DB also schnell genug ist, wird der Speicher schon auch noch geleert.. ;)
dunno.. schrieb: > CT1 ist aber höher Priorisiert. Sofern die DB also schnell genug ist, > wird der Speicher schon auch noch geleert.. ;) Je höher die Priorität der Task, umso kleiner die Ziffer daneben. Von daher macht das keinen Sinn.
Nur weil ein Task höher priorisiert ist, muss das noch lange nicht bedeuten, dass er in einem Zeitfenster mehr Datensätze produziert, als der andere Task konsumiert. Man muss berücksichtigen, wieviel Überschuss die produzierenden Tasks maximal erzeugen, so dass der Puffer nicht überläuft. Ich denke, dass die konkreten Prioritäten dabei keine Rolle spielen.
Stefan Us schrieb: > Ich denke, dass die konkreten Prioritäten dabei keine Rolle spielen. Ich denke, die Prioritäten sind gemeinsam mit der Erwähnung von preemptive Scheduling, nur deswegen aufgeführt um anzudeuten dass PT1 jederzeit von PT3 unterbrochen werden kann. Erst dadurch entsteht ein Sinn in der Teilfrage b), die nach Synchronisationsnotwendigkeiten fragt.
Falls der Ringpuffer so implementiert ist, dass schreibende Prozesse beim vollen Puffer blockiert werden und nicht einfach das älteste Element überschreiben, reicht eine Puffergröße von 1 schon aus.
Danke für die Antworten. Was verhindert denn konkret ein dauerhaftes Laufen von PT3 (höchste Priorität und kontinuierliche Datenzufuhr) ?
Florian Otte schrieb: > Danke für die Antworten. > > Was verhindert denn konkret ein dauerhaftes Laufen von PT3 (höchste > Priorität und kontinuierliche Datenzufuhr) ? Das so ein System höchst widersinnig am Konzept eines Multitasking vorbei geht, wenn ein einzelner Task das komplette System lahmlegen kann. D.h. hier ist der Scheduler gefragt, auch den anderen Tasks eine Chance zu geben. Da den Mittelweg zu finden ist in der Praxis nicht so einfach. Aber selbst dann: irgendwann ist die FiFo voll und dann muss PT3 warten und anderen Prozessen eine Chance geben. Für PT2 und PT1 sieht die Sache schlecht aus, die können ebenfalls nichts tun. Nur der DB-Task kann die FiFo ausräumen. Die Frage ist im übrigen: was genau bedeutet "kontinuierlich"? In diesem Zusammenhang wird man unter kontinuierlich nicht unbedingt verstehen, dass nach dem Absetzen einer Message in den Ringbuffer bereit die nächste Message da ist. Denn irgendwann muss der Task ja auch erst mal seine Daten checken um die nächste Message generieren zu können. 'kontinuierlich' ist m.M.n. in der EDV ein sehr dehnbarer Begriff und bedeutet meist: in einigermassen regelmässigen Zeitabständen und nicht: in einem Rutsch immerzu und ohne Pause dazwischen.
:
Bearbeitet durch User
Okay, also soll "kontinuierlich" vermutlich eher im Sinne von "regelmäßig" verstanden werden. Zur Beantwortung von a) müsste man dann doch aber wissen, mit welcher Regelmäßigkeit Daten nachgeführt werden, um über eine mögliche Größe des Speichers urteilen zu können, oder ?
Florian Otte schrieb: > Okay, also soll "kontinuierlich" vermutlich eher im Sinne von > "regelmäßig" verstanden werden. > > Zur Beantwortung von a) müsste man dann doch aber wissen, mit welcher > Regelmäßigkeit Daten nachgeführt werden, um über eine mögliche Größe des > Speichers urteilen zu können, oder ? Da hier keien Zahlen angegeben sind, denke ich, dass eine Aufzählung der grundsätzlichen Zusammenhänge reicht. Die Antwort könnte sonst ja auch lauten: Die Größe saug ich mir aus den Fingern. Eines kann man auf jeden Fall sagen. Nämlich dass die Rate der Zulieferer zusammengenommen auf jeden Fall nicht größer sein darf, als die Rate in der der Datenbank Task Werte aus der FiFo raus nimmt. Denn sonst wird der Ringbuffer unweigerlich irgendwann voll. In Ausnahmefällen darf die Zuliefererrate etwas höher sein, aber nur so lange, so lange der Ringbuffer diesen Überschuss aufnehmen kann. Ja ich weiß, das klingt nach einer Binsenweisheit. Allerdings ist dieser simple Zusammenhang vielen nicht wirklich klar.
Kontinuierlich bedeutet zB mit 9600 Baud, dh all Millisekunde ein Byte. Wenn man gleichzeitig, dh waehrend 10ms einen LCD beschreibt, eine Floatingpoint rechnung ausfuehrt, kann man das Byte nicht bearbeiten, sondern muss es zwischenlagern, bis wieder Zeit vorhanden ist.
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.