Rainbow (auch Rainbow-OS) ist ein verteiltes Betriebssystem, welches an der Universität Ulm entwickelt wurde.
Es ermöglicht den Aufbau eines PC-Clusters mit Standard-PC-Hardware. Einzelne Rechner bleiben dabei einem Anwender transparent verborgen und nur die Sicht eines einzelnen „großen“ Rechners erscheint (Single System Image).
Rainbow ist die Weiterentwicklung auf 64-Bit des ursprünglichen verteilten Betriebssystems Plurix.
Das komplette Betriebssystem Rainbow ist in der Programmiersprache Java geschrieben – einschließlich der Hardware-Treiber – und arbeitet vollständig objektorientiert. Um einen direkten Zugriff auf die Hardware zu ermöglichen, wird Rainbow nicht wie bei normalen Java-Programmen üblich in einen interpretierbaren Bytecode übersetzt, sondern mittels eines parallel zu Rainbow entwickelten Compilers in nativen Maschinencode für verschiedene Architekturen übersetzt.
Funktionsweise
Rainbow nutzt das weiterentwickelte Konzept eines gemeinsamen Speichers zur Realisierung eines für alle Rechner im Cluster einheitlichen Adressraumes, in welchem Objekte abgelegt werden. Für die Anwendung ist es dabei transparent, auf welchem Cluster-Rechner sich diese Objekte physikalisch befinden. Sie kann über die einheitliche Adresse von jedem Rechner auf ein gewünschtes Objekt zugreifen. Sollte sich das Objekt physikalisch im Speicher eines entfernten Rechners befinden, so sorgt Rainbow automatisch und transparent für eine Übertragung und lokale Bereitstellung auf dem bearbeitenden Rechner.
Rainbow arbeitet transaktionsbasiert, d. h. durchgeführte Berechnungen werden in Transaktionen gekapselt, welche entweder vollständig oder gar nicht ausgeführt werden. Ein Abbruch einer Transaktion kann sich daraus ergeben, dass zwei (oder mehr) Rechner simultan dasselbe Objekt verändern (d. h. schreiben) wollen. Um Inkonsistenzen zu vermeiden, wird eine Transaktion erfolgreich abgeschlossen und die andere abgebrochen. Die abgebrochene Transaktion wird anschließend automatisch neu gestartet, so dass sie ihrerseits ihre Änderungen durchführen kann, allerdings mit den inzwischen aktualisierten Daten der ersten Transaktion.