10. Parallele Prozesse
 
zurück
10.7.4 Zuweisung von Prioritäten in Prozessen


In bezug auf das Zuteilungsverfahren für die Prozessorkapazität können Prozessen auch Prioritäten zugewiesen werden. Wichtige Prozesse erhalten eine hohe Priorität, damit ihnen vorrangig die Prozessorkapazität zugewiesen wird. Dazu muß das Pragma "priority" verwendet werden.


Beispiel:

with system;
package service is
    task type drucker is -- 1. Prozesstyp.
       pragma priority( system.priority’first );
       entry input( x : in string );
    end drucker;
    task type temperatur_ueberwachung is -- 2. Prozesstyp.
       pragma priority( system.priority’last );
       entry output( x : out float );
    end temperatur_ueberwachung;
end service;


Das Paket "service" stellt zwei Prozeßtypen zur Verfügung. Der eine nimmt einen Druckauftrag entgegen, der andere überwacht einen Wärmefühler. Das Drucken eines Textes hat in diesem Beispiel geringere Priorität als die Überwachung des Wärmefühlers.

Das Standard-Paket "system" stellt neben vielem anderen auch den Typ "priority" zur Verfügung. Es ist nicht garantiert, daß dieser Typ mehr als einen Wert zur Verfügung stellt. Würde der Typ nur einen Wert definieren, so hätten im obigen Beispiel beide Prozesse die gleiche Priorität. Bei einem Übersetzer- bzw. Plattformwechsel kann daher nicht garantiert werden, daß ein Ada-Programm, dessen Prozeßdynamik ausschließlich von Prioritäten abhängt, auf der neuen Plattform einwandfrei lauffähig ist. Allerdings läßt sich einfach eine Anweisung konstruieren, die verhindert, daß ein solchermaßen abhängiges Programm überhaupt lauffähig ist.


Beispiel:

Es wird angenommen, daß das Ada-Programm vier verschiedene Prioritäten benötigt.

test_anweisung : constant system.priority := system.priority’first + 3;


Dann garantiert diese Anweisung, daß zur Laufzeit eine Ausnahme ("constraint_error") ausgelöst wird, wenn weniger als vier Prioritäten angeboten werden. Ein Ada-Übersetzer ist nicht verpflichtet, zur Übersetzungszeit eine solche Anweisung abzulehnen, wenn er feststellt, daß zur Laufzeit eine Ausnahme ("constraint_error") ausgelöst wird. Allerdings produzieren manche Übersetzer während der Übersetzung Warnungen, die auf solche Stellen hinweisen. Dazu ist ein Ada-Übersetzer aber nicht verpflichtet.

Äquivalent dazu ist:

zu_wenig_prioritaeten : exception;
--...
if 1 + system.priority’last - system.priority’first < 4 then
   raise zu_wenig_prioritaeten;
end if;


Hier wird eine programmspezifische Ausnahme ausgelöst, wenn zu wenig Prioritäten angeboten werden.


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.