Hier werden bald die entscheidenden Konzepte von Helium vorgestellt. Der untenstehende Text ist ein Dokument von 2006, in dem das damalige Konzept erläutert wird. Dieses ist mittlerweile teilweise veraltet.
Zum Konzept des Helium-Systems XS (geschrieben am 28. Juli 2006)
1. Grösse
Der "Kernel", der für das Laden von Programmen und die Kontrollübergabe (siehe weiter unten) zuständig ist, sollte mitsamt einem weiteren Lader in den Bootsektor einer Diskette passen. Das ganze System inkl. Anwenderprogramme, die gleich beim Start geladen werden, sollte bei einer normalen Konfiguration eine Grösse von 36 KB (zwei Zylinder einer 1.44M-Diskette bzw. vier Zylinder einer 720K-Diskette) nicht überschreiten. Dies garantiert eine sehr kurze Bootzeit.
Die Kompaktheit des Systems auf der Diskette wird einerseits durch die vollständige Programmierung in Assembler erreicht, andererseits enthalten die Binärdateien nur Maschinencode und vorbelegte Strings, aber keine Datensegmente wie z. B. ein Textspeicher in einem Editorprogramm. Strings werden ggf. nach einem einfachen Verfahren komprimiert, wobei eine Kette von gleichen Zeichen durch ein Erkennungsbyte, eine Angabe der Wiederholungen und das zu wiederholende Zeichen ersetzt wird. Besonders bei Fensterrahmen und kompletten Dialogfeldern wird damit viel Speicherplatz gespart.
2. Prozesse
Wechseln
Das Helium-System XS soll ein Betriebssystem für 8086/88-basierende Computer werden. Die 8086/88-Prozessoren sind recht langsam und kennen nur den Real Mode (1 MB adressierbarer Speicher, kein Speicherschutz vor anderen Prozessen, keine Rechtevergabe). Aus diesen Gründen kann ich nicht das übliche präemptive Multitasking mit Zeitscheiben-Einteilung verwenden. Um mit einem Computer sinnvoll arbeiten zu können, muss es möglich sein, dass mehrere Programme nebeneinander im Speicher sind und Daten austauschen können ("Zwischenablage"). Die Programme werden im Helium-System aber nicht "gleichzeitig" ausgeführt, sondern es ist immer nur ein Programm aktiv, das den ganzen Bildschirm und die gesamte Prozessorleistung innehat, bis vom Benutzer durch das Drücken einer speziellen Taste ein Menü zum Wechseln des aktiven Programms angefordert wird. Das aktuell laufende Programm wird durch ein Signal (Veränderung einer reservierten Speicherstelle) aufgefordert, seine Tätigkeit abzuschliessen und zum Menü-Programm zu springen. Der User kann auch den Abbruch des Programms mit einem weiteren Tastendruck erzwingen (wenn das Programm abgestürzt ist oder böswillig die Kontrolle nicht abgibt). Nachdem der User im Menü sein gewünschtes Programm angewählt hat, wird die Kontrolle an dieses Programm weitergegeben, und zwar an einer zuvor festgelegten Einsprungstelle, die z. B. den Bildschirm neu aufbaut und dann weiter in die normale Tasten- Abfrageschleife geht.
Erstellen
| Vor dem Erstellen | Nach dem Erstellen |
|---|---|
| Prozess 1 | Prozess 1 |
| Daten von Prozess 1 | Daten von Prozess 1 |
| frei | Prozess 2 |
| Daten von Prozess 2 | |
| frei |
Ein im RAM gespeicherter Zeiger zeigt jeweils auf den Anfang des freien Bereichs. (Er enthält die kleinste Segmentadresse, die ab Offset 0 frei ist.) Beim Erstellen eines neuen Prozesses wird zum Zeiger die durch 16 geteilte Grösse des Programms (aufgerundet!) addiert, bevor das Programm geladen wird. Nach dem Laden kann sich das Programm ein Datensegment reservieren, entweder durch direktes Erhöhen des Zeigers oder durch den Aufruf einer entsprechenden "Kernel"-Routine.
Beenden
Nachdem der Prozess mit einem Signal benachrichtigt und nochmals aufgerufen worden ist, wird er folgendermassen aus dem Speicher entfernt:
| Vor dem Beenden | Nach dem Beenden |
|---|---|
| Prozess 1 | Prozess 1 |
| Daten von Prozess 1 | Daten von Prozess 1 |
| Prozess 2 | Prozess 3 |
| Daten von Prozess 2 | Daten von Prozess 3 |
| Prozess 3 | frei |
| Daten von Prozess 3 | |
| frei |
Das heisst: Der ganze Speicherinhalt ausser dem freien Bereich wird über den zu beendenden Prozess nach "vorne" geschoben. Vom Zeiger auf den freien Bereich wird die durch 16 geteilte Grösse des entfernten Programms subtrahiert. (Diese wichtige Grösse könnte schon im Header einer Programmdatei stehen.)
Dieser Vorgang muss nur dann ausgeführt werden, wenn es für einen neuen Prozess zuwenig RAM hat. Normalerweise bleiben die Prozesse für die gesamte Einschaltdauer des Systems so im RAM stehen, wie sie geladen wurden. Auch beim Herunterfahren wird diese Verschieberoutine NICHT ausgeführt.
3. Systemstart
- Laden des Bootsektors durch das BIOS. Im Bootsektor sind Ladefunktionen für
Programme und IOSe (Gerätetreiber) enthalten. Dazu kommt ein kleines
Programm, das für das Laden ausschliesslich beim Systemstart zuständig ist.
(Dieser Vorgang entspricht dem Laden des VMLINUZ-Images bei GNU/Linux.) - Dieses Programm lädt nun das FIOS (File Input Output System) von einer durch
C/H/S definierten Stelle der Diskette in den Speicher. Durch die
Ladefunktionen wird das FIOS für Programme verfügbar gemacht (d.h. ein
Interruptvektor wird auf den FIOS-Code gesetzt).
(Dieser Vorgang entspricht dem Laden des INITRD-Images bei GNU/Linux.) - Es wird auf dem Bildschirm ein Informationsfeld angezeigt, das alle Namen der zu ladenden IOSe und Anwenderprogramme enthält.
- Die weiteren benötigten IOSe (z.B. KIOS für die Tastatur) werden gemäss einer Liste in einer Datei als Dateien geladen und installiert. Diese "Liste in einer Datei" kann mit einem Anwenderprogramm geändert werden, um z. B. einen Druckertreiber zu installieren.
- Die beim Start benötigten Programme (z.B. Dateiverwaltung, Textverarbeitung)
werden gemäss derselben Liste in den Speicher geladen. Jedes Programm bekommt
eine Zeitspanne, in der es für Daten benötigten RAM für sich belegen kann.
(Diese beiden Vorgänge entsprechen dem INIT-Prozess bei GNU/Linux.) - Beim Laden wird neben den Namen des Programms im Informationsfeld "Fertig", "Fehler" oder "Nicht gefunden" gesetzt.
- Falls ein Bildschirm-IOS geladen wurde, wird dieses jetzt aktiviert, so dass es den Bildschirmmodus wechselt. Dies hätte bei der Anzeige des Informationsfeldes gestört.
- Die Kontrolle über das System wird dem ersten Programm (Standard: Dateimanager) übergeben.
4. Anwendungsprogramme
Dateiveränderung
Um möglichst wenig Speicherplatz zu belegen und gleichzeitig möglichst grosse Dateien bearbeiten zu können, werde ich dateiverarbeitende Anwendungen (Editor, Textverarbeitung, Tabellenkalkulation, Datenbank, Zeichenprogramm) so aufbauen, dass sich jeweils nur ein Teil der zu bearbeitenden Datei im RAM befindet. Dieser Teil verhält sich ähnlich wie das scrollende Editorfenster in Bezug auf die Datei: Beim Scrollen werden neue Blöcke der Datei eingelesen und alte entfernt. Der RAM ist also nur eine Art Cache, nicht ein Behälter für die ganze Datei.
Für ein möglichst fliessendes Scrollen wird das Dateisystem eine Funktion enthalten, die dem Computer nur den Befehl gibt, etwas von der Diskette zu lesen, dann aber sofort zum Programm zurückkehrt. Nach einiger Zeit ist der gelesene Block an der gewünschten Stelle im RAM.
Wenn der zugewiesene RAM-Speicer ca. doppelt so viele Daten aufnehmen kann wie der Bildschirm, dann kann das Programm schon einige Blöcke weiter lesen als auf dem Bildschirm angezeigt sind. Wenn der Benutzer scrollt, werden diese vorausgelesenen Blöcke neu dargestellt, und der Editor liest weitere Blöcke mit der Funktion "Verzögertes Lesen" des Dateisystems ein. Der Benutzer muss somit nie auf den Abschluss einer Diskettenfunktion warten, ausser wenn er schnell über einen weiten Bereich der Datei scrollt.
Durch dieses Prinzip unterscheidet sich der XS-Editor von einem Editor in anderen Systemen: Während ein anderer Editor eine Datei erst speichert, wenn er durch dem Benutzer dazu aufgefordert wird, speichert der XS-Editor sofort bzw. beim nächsten Scrollen änderungen auf der Diskette. Wer eventuell etwas rückgängig machen will, muss den Editor so einstellen, dass entweder beim öffnen der Datei automatisch die Datei in eine Datei mit .BAK-Suffix kopiert werden soll oder immer eine Kopie mit .TMP-Suffix gebildet und editiert wird.
Design der Oberfläche
Die Benutzeroberfläche einer Anwendung wird folgendermassen aufgebaut sein:
- Rahmen und Titelleiste mit Namen der Anwendung
- "Nutzfläche": Hier erscheint z. B. der Text in einem Editor.
- eventuell Statuszeile, durch Linie von der Nutzfläche getrennt
- Tastenbeschreibungen, wieder abgegrenzt, in der Form:
F1=Aktion F2=Aktion (evtl. F8=Mehr; zeigt weitere Beschreibungen an)
Dialogfelder werden wieder mit den F-Tasten (nicht etwa durch Pfeiltasten
angesteuerte Schaltflächen und Boxen !) bedient.
Beispiel:

5. Herunterfahren
Theoretisch ist das System so konzipiert, dass der Computer einfach mit dem Netzschalter ausgeschaltet werden könnte, sofern das Laufwerkslicht des Diskettenlaufwerks nicht leuchtet. Es entsteht dabei KEIN inkonsistentes Dateisystem.
Anwendungen wie ein Editor haben jedoch einen Teil der Datei möglicherweise noch nicht gespeichert. Durch einen Aufruf des Menüs zum Programmwechsel sichert die aktuelle Anwendung ihre Datei, und der Computer kann durch einen Menü-Eintrag abgeschaltet werden (eventuell Meldung "Sie können jetzt ausschalten").
