Allokation (Informatik)
# Allokation (Informatik)

Unter Allokation versteht man in der Informatik die Reservierung von Hauptspeicher oder anderen Betriebsmitteln durch ein Computerprogramm.

## Sprachliche Verwendung

Während die Schreibweise des Nomens „Allokation“ eindeutig ist, sind als zugehörige Verben sowohl „allokieren“ als auch „allozieren“ gebräuchlich. Als Substantivierung ist somit auch „das Allozieren“ möglich.

## Hintergrund

Bei der Entwicklung eingebetteter Systeme ist Allokation neben der Partitionierung und dem Scheduling eine Teilaufgabe bei der Strukturierung von Software unter Berücksichtigung von nicht-funktionalen Anforderungen. Die Allokation ordnet Softwareeinheiten bestimmte Rechnerressourcen zu. Ziele einer Allokation sind unter anderem die Minimierung der Gesamtkosten der Anwendung und der Kommunikation zwischen den Prozessen. Allokationsprobleme kann man mit Flussproblem-Algorithmen oder mit heuristischen Ansätzen lösen.

Im Kontext verteilter Datenbanken bezeichnet man als Allokation die Zuordnung von Datenfragmenten zu einem oder mehreren Rechnersystemen (Datenbankknoten).

## Zeitpunkt

Ein wesentliches Merkmal ist der Zeitpunkt der Allokation, da in den seltensten Fällen der Adressbereich des allozierten Speichers von dem Programmteil bestimmt werden kann, der ihn benutzt, und so die Zugriffsadressen entsprechend angepasst werden müssen. Man unterscheidet hier drei grundsätzliche Fälle:

* Kompilierzeit: hier werden schon während eines Kompilierens (genauer: Linkens) des Programms Adressen zugewiesen. Dies ist heute nur noch bei ECUs üblich und möglich, da hier ein Betriebssystem mit allen Programmteilen und Treibern auf einmal kompiliert wird, und zur Laufzeit in der Regel keine Teile des Arbeitsspeichers zur nachträglichen Allokation zur Verfügung stehen.
* Ladezeit: Nach dem Kompilieren und Linken ist eine ausführbare Datei entstanden, die direkt von einem Betriebssystem geladen werden kann (also kein Skript). Diese Datei enthält außer dem Maschinencode des Programms auch Informationen über dessen Speicherbedarf, den das Betriebssystem beim Laden alloziert und dessen Adressen es in das Programm schreibt.
* Laufzeit: Ein Programm kann während seiner Laufzeit über die Betriebssystemschnittstelle Speicher allozieren. Der Zugriff des Programms muss dann über die Adresse erfolgen, die das Betriebssystem ihm beim Allozieren mitteilt.

Grundsätzlich ist es auch möglich, eine Adressfestlegung mit der Variablendeklaration im Programmcode vorzunehmen, also eine händische Allokation zu Programmierzeit. Von der Möglichkeit wird heute allerdings kaum noch Gebrauch gemacht, da für sämtliche Programmteile, die auf einem Rechenknoten (PC, ECU, …) ausgeführt werden (und also auf den gleichen Speicher zugreifen), Überschneidungen ausgeschlossen werden müssen, stattdessen wird diese Aufgabe Linkern bzw. Betriebssystemen überlassen.

