Hallo www,
ich habe demnächst eine Prüfung und habe noch etwas Probleme mir das folgende Tracing zu erklären. Eigentlich dachte ich, ich hätte es verstanden, allerdings wurde mir von unserem Prof an den Kopf geschmissen, dass ich es offensichtlich nicht verstanden habe. Eine weitere Erklärung hab ich daraufhin aber leider nicht bekommen (hatte wohl keine Zeit). Ich hoffe, dass mir jemand anderes helfen kann.
Task1: Aaaaaaab (niedrigste Priorität)
Task2: Cccccd (mittlere Priorität)
Task3: Eeeef (höchste Priorität)
Legende:
evtReceive(): „R#“ (#: ID Aktuelle-Task)
evtSend(): „S#“ (#: ID Aktuelle-Task)
semTake(): „P#“ (#: ID Aktuelle-Task)
semGive(): „V#“ (#: ID Aktuelle-Task)
Normaler Ablauf:
AaS2 Eeeeef R2 aS1 Cccccccd R1 aaaaab
Soweit klar: Task 1 ruft Task 3 auf, anschließend Task 2.
Bei dem folgenden Ablauf wird nun zusätzlich von Task1 (A) und Task3 (E) ein gemeinsamer Datenbereich K verwendet und der Inhalt von Task1 (A) mit „kkkk“ ausgegeben wird.
Mit Semaphore:
AP0 aS2 EP2 aS1 Ccccccd R1 aaaaakkkk V0 eeeeV2 f R2 b
Meine Frage hier, was passiert hier?
Task1 (A) nimmt die Semaphore 0, es wird anschließend Task3 (E) aufgerufen, der anschließend Semaphore 2 nimmt. Dann läuft aber Task1 (A) weiter (warum wird Task3 (E) hier überhaupt aufgerufen?). Es wird anschließend Task2 © aufgerufen und ausgeführt (klar, der greift ja auch nicht auf den Speicherbereich zu).Nach dem kritischen Abschnitt wird Semaphore 0 zurückgegeben, Task3 (E) läuft weiter und gibt die Semaphore 2 ab. Nach Beendigung der von Task3 (E) läuft Task1 (A) fertig.
Stimmt das soweit? Wo sind hier meine Denkfehler?
Desweiteren, welches Problem kann hier auftreten?
Ich denke Prioritätsumkehr, da Task2 © hier eine höhere Priorität hat als Task3 (E).
Und wie kann man das verhindern?
_Ich würde die Semaphore 0 erst direkt vor dem kritischen Bereich besetzen:
AaS2 EP2 eeeV2 f R2 aS1 Ccccccd R1 aaaaaP0 kkkk V0 b _
Ich habe hier alles so genau (mit meinen Antworten) hingeschrieben, dass niemand meint für mich meine Hausaufgaben zu machen. Desweiteren merkt hoffentlich jemand wo genau ich meine Denkfehler habe.
Danke schonmal für jeden der sich da rein denkt und mir hilft.
Gruß,
Stahlkopf