|
11.4.4 Konfigurierbare Einschränkungen beim Prozeßmodell
Zur Erstellung von effizienten Programmen ist es notwendig, Laufzeitsysteme zu
haben, die speziellen Anforderungen angepaßt sind. Einige Ada-Sprachelemente
können effizienter implementiert werden, wenn dem Ada-Laufzeitsystem bekannt
ist, daß gewisse Sprachelemente von Ada nicht oder im beschränkten
Umfang verwendet werden.
Dies ist generell im Ada-Kern nicht möglich, aber die Anlage "Echtzeitsysteme"
definiert eine Menge von Einschränkungen, die ein Laufzeitsystem erkennen
sollte, um somit ein effizienteres Ada-Programm zu ermöglichen. Das Konfigurationspragma
"Restrictions" kann verwendet werden, um solche Beschränkungen
bezüglich des Programms zu spezifizieren.
Syntax:
pragma Restrictions(restriction{, restriction});
restriction ::= restriction_identifier
| restriction_parameter_identifier => expression
Während der Übersetzungszeit werden z. B. folgende Einschränkungen
geprüft:
- No_Abort_Statement
Es existieren keine Abbruchanweisungen (abort_statement
<BNF>) .
- No_Terminate_Alternatives
Es gibt keine selektiven Annahmeanweisungen (select_alternative
<BNF>) mit einer "terminate"- Alternative (terminate_alternative
<BNF>).
- No_Implicit_Heap_Allocation
Es existieren keine Operationen, die implizit eine Allozierung von dynamischem
Speicher durch die Implementierung benötigen.
Während der Laufzeit werden z. B. folgende Beschränkungen geprüft:
- Max_Storage_At_Blocking
Spezifiziert die maximale Größe des Speicherbereichs eines parallelen
Prozesses, der durch einen blockierten parallelen Prozeß zurückbehalten
werden kann.
- Max_Asynchronous_Select_Nesting
Spezifiziert die maximale Verschachtelungstiefe von asynchronen Auswahlanweisungen
(asynchronous_select
<BNF>). Ein Wert von null verhindert den Gebrauch einer asynchronen
Auswahlanweisung.
- Max_Tasks
Spezifiziert die maximale Anzahl von parallelen Prozessen, den Umgebungsprozess
ausgenommen, die während der Lebensdauer einer Partition existieren dürfen.
Das Pragma ist Bestandteil des Kerns von Ada, aber verschiedene Beschränkungen
sind im Anhang "Echtzeitsysteme" definiert. Weitere Beschränkungen
sind im Anhang "Safety and Security" $->Safety and Security$ definiert.
Es existieren Einschränkungen, die zur Übersetzungszeit geprüft
und andere die während der Laufzeit geprüft werden.
|