Das größte Problem ist die Aufwärtskompatibilität:

Betriebssysteme als siliziumresidente Software

27.07.1984

Betriebssysteme auf dem Chip: Einerseits fest verdrehtet und nicht mehr zu verändern, muß es andererseits auch möglich sein, das BS an eine andere Hardware anzupassen oder neue Systemkomponenten aufzunehmen. Die Intel Corporation hat diesen scheinbaren Widerspruch praktiziert: Als "Software-on-Silicon-Produkt" enthält der 80130-Baustein den Kern des iRMX 86 Betriebssystems für 16-Bit-Mikroprozessoren. Zusammen mit Digital Research wurde ein Chip entwickelt, auf dem das Betriebssystem CP/M-86 implementiert ist. Ron Slamp und Jim Person, Mitarbeiter der Intel Corporation, Hawthorne, Oregon, und beide an der Entwicklung dieser Chips beteiligt, schildern die dabei aufgetretenen Schwierigkeiten und definieren die Anforderungen, die an Firmware gestellt werden müssen.

Silicon-Software besteht aus zwei Teilen: On-Chip-Code und Off-Chip-Code. Normalerweise sind beide Teile eng miteinander verbunden und werden gemeinsam entwickelt. Ein Teil des Off-Chip-Codes hat die Aufgabe, den Code auf dem Chip zu unterstützen. Er enthält meist das Initialisierungsprogramm, Schnittstellenunterstützung, Systeminformationen und Informationen über Updates.

Damit Software, die fest auf einem Chip gespeichert ist, Veränderungen toleriert und in mehr als einem System einsetzbar ist, muß sie drei Eigenschaften aufweisen: Sie muß positions- und konfigurationsunabhängig sowie aufwärtskompatibel sein.

Die leistungsfähigsten Mikroprozessoren adressieren Speicher mit einem Volumen von mindestens 1 Megabyte. Siliziumresidente Software muß fehlerfrei arbeiten, egal an welcher Stelle sie gespeichert ist. Absolute Adressen im Code oder bei den Daten auf dem Chip, von dem ja nur gelesen werden kann, schränken die Konfigurationsmöglichkeiten des Systems ein. Deshalb darf im On-Chip-Code nur die Struktur der Daten festgelegt sein, auf die zugegriffen wird, nicht aber ihr Speicherplatz. Absolute Adressen müssen aus dem Register des Hauptprozessors geholt werden.

Die zweite Eigenschaft, die an Silicon-Software gestellt werden muß, ist, daß dem On-Chip-Code keine besondere Hardware- oder Software-Konfiguration zugrunde liegen darf. Stattdessen muß indirekter Zugriff auf anderen Code oder Daten möglich sein und die Systemkonfiguration aus den Laufzeitdaten ermittelt werden. Alle Werte, die für bestimmte Hardwarekomponenten stehen oder die von einer besonderen Hardwarekonfiguration abhängen, müssen Off-chip gespeichert werden.

Aufwärtskompatibilität geht noch einen Schritt weiter als Konfigurationsunabhängigkeit und ist vielleicht die am schwersten zu realisierende Forderung an siliziumresidenter Software.

Gemeint ist damit, daß sich On-Chip-Code und Off-Chip-Code weiter vertragen müssen, auch wenn einer der beiden Codes aktualisiert wurde. Silicon-Software ist also genau dann aufwärtskompatibel, wenn jede Version des On-Chip-Codes mit jeder Version des Off-Chip-Codes einwandfrei läuft.

Zu den typischen Daten, die sich durch Updates verändern, gehört beispielsweise die Größe des Datenbereichs. Wenn diese Größe als Konstante im Chip festgelegt ist, kann es passieren, daß eine aktualisierte Version des Off-Chip-Codes von einem größeren Datenbereich ausgeht als tatsächlich auf dem Chip verfügbar. Die Größe des Datenbereichs muß also bei jedem Lauf von dem Off-Chip-Code übergeben werden. Damit wird die Größe des Datenbereichs zu einem konfigurierbaren Parameter.

Jedes größere Programm enthält Fehler. Normalerweise werden Fehler beseitigt, indem das Programm modifiziert und der fehlerhafte Teil durch den korrigierten ersetzt wird. Dies ist bei siliziumresidenter Software nicht möglich.

Stattdessen müßte jedesmal der ganze Baustein ersetzt werden. "Bug-Fixing" ist also ein Gesichtspunkt, der schon beim Entwurf von Silicon-Software eine entscheidende Rolle spielt.

Eine Möglichkeit zur Fehlerbeseitigung besteht darin, den Zugriff auf die Routine, die den Fehler enthält, zu verhindern und eine korrigierte Fassung - sozusagen ein Ersatzteil - im Off-Chip-Code einzubauen. Jedesmal wenn die Routine aufgerufen werden soll, muß das Programm dann zu der korrekten Fassung verzweigen.

Die Kosten für diese notwendig werdenden Verdopplungen können reduziert werden, wenn bei dem Programmentwurf mit Modultechnik gearbeitet wurde. Die Bugs lassen sich genauer lokalisieren und der Bereich, der stillgelegt werden muß, ist kleiner.

Intel benutzt die "Software-on-Silicon" - Technik auf dem OSF-Baustein. OSF steht für Operating System Firmware. Die Hauptfunktionen dieses Bausteins sind Unterbrecher und Taktgeber. Teil dieses Bausteins ist der 80130-Prozessor, auf dem die elementaren Prozeduren des Betriebssystems iRMX86 fest verdrehtet sind.

Das iRMX86 ist ein Realzeit-, Multitasking- und Multiprogramming-Betriebssystem, das für 16-Bit-Mikroprozessoren vorgesehen ist.

Der On-Chip-Code ist hier in einem 16-KB-ROM verdrehtet. Der Off-Chip-Code ist extern in ROM oder RAM gespeichert und besteht aus dem Initialisierungscode und Programmteilen, die entweder nicht positionsunabhängig programmiert werden können, oder die erst festgelegt werden, wenn das ganze System konfiguriert wird.

Positionsunabhängigkeit wird dadurch gewährleistet, daß zwischen On-Chip-Code und Off-Chip-Code eine Schnittstelle eingebaut ist, die dem Code auf dem Chip bei jedem Aufruf die notwendige Umgebung aufbaut. Diese Schnittstelle liefert eine absolute Datenadresse und startet die Ausführung des siliziumresidenten Codes. Alle Laufzeitdaten können dann von der Startadresse aus bestimmt werden. Umgekehrt liefert der On-Chip-Code eine Adresse an den Hauptprozessor, der sich daraus weitere On-Chip-Adressen ableitet.

Den 80130 konfigurationsunabhängig zu machen, war relativ einfach, weil der auf dem Chip implementierte Teil des Betriebssystems nur die Basisprozeduren enthält. Alle Steuerprogramme für periphere Einheiten wurden dem Off-Chip-Code zugeordnet.

Die Schnittstelle zwischen Off-Chip- und On-Chip-Code bleibt immer gleich, auch wenn ein Teil des Bausteins verändert wird. Dies wird erreicht durch einen Belegungsplan auf dem Chip, der dem Off-Chip-Code indirekten Zugriff zu allen von außen zugänglichen Funktionen gewährleistet und den Ausführungsbefehl an die richtige Stelle im Chip weiterleitet.

Der Off-Chip-Code wählt die gewünschte Prozedur durch einen Index. Dieser Index bleibt unverändert, auch wenn sich die tatsächliche Adresse einer Funktion durch ein Updating geändert hat.

Intels Entscheidung, das Betriebssystem CP/M-86 auf einem Chip zu implementieren, brachte neue Probleme mit sich. Bei dem 80130 hatte man es mit hauseigener Software zu tun und deshalb alle Aspekte vom Entwurf über die Implementierung und Korrektur bis zum Support unter eigener Kontrolle.

Das war natürlich bei einem unabhängigen Softwaresystem anders. In Zusammenarbeit mit Digital Research mußte das Betriebssystem so verändert werden, daß es den genannten Anforderungen an Silicon-Software genügt.

Das Betriebssystem CP/M-86 besteht aus drei Modulen. Der "Console Command Prozessor" (CCP) steuert die Befehlsausführung und führt eingebaute Dienstprogramme aus. Das "Basic Disk Operating System" (BDOS) übernimmt die Disketten-Ein- und Ausgabe einschließlich Directory-Verwaltung und Sektorzuweisung. Das "Basic Input/Output System" (BIOS) enthält den konfigurationsabhängigen Code und stellt I/O-Routinen für spezielle Peripherie zur Verfügung.

CP/M-86 ist ein Single-User- und Single-Tasking-Betriebssystem, das in positionsabhängigem Code geschrieben ist. Der 80150-Baustein enthält das gesamte CP/M-86 Betriebssystem. Für die meisten Konfigurationen ist kein weiterer Off-Chip-Code notwendig.

Intels Entwicklungsstrategie bestand darin, die konfigurationsunabhängigen Elemente CCP und BDOS als Basis zu benutzen und dazu ein BIOS zu entwickeln, das eine Reihe verschiedener Peripheriekomponenten unterstützt, aber trotzdem konfigurationsunabhängig ist.

Das 80150-BIOS unterstützt zwei Konfigurationsmöglichkeiten:

- Einen vorkonfigurierten Modus (on-chip), für den das Betriebssystem nicht weiter verändert werden muß und

- einen konfigurierbaren Modus (off-chip), bei dem zwischen verschiedenen Intel-Treibern ausgewählt werden kann und diese entsprechend den Erfordernissen der Hardware verändert werden.

Die Auswahl der verschiedenen Modi und der benötigten Treiber geschieht über einen Konfigurationsblock, der off-chip in einem RAM gespeichert ist.

Der 80150 enthält Treiber für folgende Chips:

8251A Universal Asynchronous Receiver/Transmitter (UART)

8274 Multi-Protocol Serial Controller (MPSC)

8255A Programmable Parallel Interface (PPI)

8275 Floppy-Disk Controller

8237 Direct Memory Access (DMA) Controller

Um CP/M-86 auf dem Chip implementieren zu können, mußte es verändert werden. Ursprünglich ist CP/M-86 positionsabhängig; Code und Daten überlappen sich. Jedes Modul enthält außerdem noch Puffer und Datenstapel.

Zusammen mit Digital Research wurde das Betriebssystem neu strukturiert und dabei Datenbereich und eigentlicher Code voneinander getrennt. Dies wurde dadurch erleichtert, daß bei der Implementierung der 8086-Chip von Intel verwendet wurde.

Die Beispiele zeigen, daß es möglich und vernünftig ist, zumindest Systemsoftware auf einem Chip zu implementieren. Die Vorteile sind geringere Kosten und höherer Komfort für den Benutzer.

Natürlich wird es jeder Software-Designer vermeiden wollen, sich auf unkorrigierbare Dinge festlegen zu lassen. Kein Programm läuft auf Anhieb fehlerfrei.

Wenn aber die hier vorgestellten Strategien bei der Entwicklung berücksichtigt werden, braucht man keine Sorge haben, vielleicht nur für den Abfalleimer zu produzieren.