Funktionen des UNIX-Kernels

Ein UNIX-Kernel stellt eine Umgebung zur Verfügung, in welcher Anwendungen ausgeführt werden können. Aufgrund dessen muss der Kernel eine Vielzahl von Diensten und betreffenden Schnittstellen implementieren. Anwendungen kommunizieren und interagieren über diese Schnittstellen mit der Hardware, normalerweise wird der direkte Kontakt mit Hardwareressourcen vermieden.

Eine CPU kann entweder im User-Modus oder im Kernel-Modus laufen. In der Praktik können die meisten CPUs mehr als zwei Ausführungszustände aufweisen. Als Beispiel haben etwa die 80*86 Mikroprozessoren vier Ausführungszustände. Jedoch verwenden alle Standard-UNIX-Kernels nur den User-Modus und den Kernel-Modus. Zudem können Programme auf UNIX im User-Modus oder im Kernel-Modus ausgeführt werden. Wenn ein Programm im User-Mode ausgeführt wir kann es weder auf Kernel-Datenstrukturen, noch auf Kernel-Programme zugreifen. Wenn das Programm im Kernel-Modus ausgeführt wird, gibt es keine geltenden Einschränkungen mehr. Alle CPU-Modelle erhalten spezifische Anweisungen über das Umschalten vom User-Modus in den Kernel-Modus und umgekehrt. Normalerweise werden Programme nur im User-Modus ausgeführt und wechseln nur dann in den Kernel-Modus, wenn ein vom Kernel bereitgestellter Dienst erforderlich ist. Sobald dieser Dienst beendet und nicht mehr weiter benötigt wird, wechselt das Programm automatisch wieder in den User-Modus.

Prozesse sind dynamische Entitäten, welche meistens im System eine begrenzte Lebensdauer aufweisen. Eine Routinegruppe im Kernel ist für die Erstellung, die Eliminierung sowie für die Synchronisation der Prozesse zuständig. Der Kernel selber ist kein Prozess, jedoch ein Prozessmanager.
Die Umstellung eines Programms vom User-Mode in den Kernel-Mode läuft dann folgendermassen ab: Der Kernel weiss, dass Prozesse welche einen Kernel-Service erfordern, Programmierkonstrukte verwenden, welche als Systemaufrufe bezeichnet werden. Jeder einzelne dieser Systemaufrufe richtet eine Parametergruppe ein, welche die Prozessanforderung identifiziert. Dann führt die Parametergruppe je nach Prozessanforderung eine hardwareabhängige CPU-Anweisung aus, um vom User-Mode in den Kernel-Mode zu wechseln.

Neben Benutzerpozessen beinhalten UNIX-Systeme bevorrechtigte Prozesse, welche man als ‚Kernel-Threads‘ bezeichnet. Diese besitzen folgende Eigenschaften:

  • Sie sind im Kernel-Modus im Kernel-Adressraum vorhanden.
  • Sie interagieren nicht mit Benutzern und benötigen daher keine Endgeräte.
  • Sie werden beim Starten des Systems erstellt und bleiben bis zum Herunterfahren des Systems aktiv.

Ein UNIX-Kernel erledigt aber weit mehr als nur Systemaufrufe. Kernelroutinen können auf ganz verschiedene Arten aktiviert werden. Zum Beispiel kann die prozessausführende CPU eine Ausnahme, also etwa eine ungültige Anweisung signalisieren. Der Kernel behandelt dann die Ausnahme für den Prozess, welcher diese verursacht hat. Zudem können Peripheriegeräte (Mäuse, Externe HDDs etc.) ein Interruptsignal an die CPU ausgeben, um sie über ein Ereignis zu informieren, zum Beispiel eine Anforderung um Aufmerksamkeit oder eine Statusänderung. Das Kernel-Programm „Interrupt-Handler“ übernimmt dann die Ausgabe eines solchen Interruptsignals. Peripheriegeräte arbeiten in Bezug auf die CPU asynchron, was bedeutet, dass solche Interrupts meistens zu unvorhersehbaren Zeiten auftreten. Des Weiteren muss, wenn ein Kernel-Thread ausgeführt wird, das entsprechende Programm (da es auch im Kernel ausgeführt wird) als Teil des Kernels betrachtet werden. Damit der Kernel Prozesse verwalten kann, wird jeder einzelne Prozess mithilfe eines Prozessdeskriptors dargestellt, welcher Informationen zum aktuellen Status des Prozesses enthält.

Werbung

Linux vs. UNIX: Was ist der grosse Unterschied?

Linux und UNIX sind die 2 ewigen Giganten wenn es um Betriebssysteme geht. Doch da fragt man sich, was ist eigentlich der massgebende Unterschied zwischen diesen beiden Kernels? Und was sind die Vor- und Nachteile, welche Linux und UNIX mit sich bringen? Die beiden Betriebssystem-Arten sind aus Sicht der Benutzererfahrung ziemlich ähnlich. Linux kann in vielen Hardwarearchitekturen, sowie den modernen PCs problemlos verwendet werden. Software, welche auf einem UNIX-System geschrieben wurde, kann dank den POSIX-Standards (Portable Operating System Interface-Standards) ohne grossen Portierungsaufwand auf Linux verwendet werden. In den meisten Fällen können auch UNIX-Shell-Skripte direkt unter Linux verwendet werden. Offensichtliche Unterschiede zwischen Linux und UNIX gibt es hauptsächlich beim Lizenzmodell. Während Linux-Systeme meistens Open Source sind, müssen für zahlreiche proprietäre UNIX-Systeme Lizenzen verwendet werden. Unter Linux kann ein Entwickler Gerätetreiber für ein bestimmtes Hardwaregerät erstellen und sie werden in den meisten Distributionen problemlos funktionieren. Bei UNIX muss der Entwickler aufgrund der kommerziellen und akademischen Zweigen unterschiedliche Versionen der Treiber für die verschiedenen UNIX-Varianten schreiben. In den letzten Jahren wurden auch viele Neuerungen von Linux auf UNIX übernommen. Es wurden zum Beispiel zahlreiche GNU-Dienstprogramme als Add-Ons für UNIX-Systeme zur Verfügung gestellt. Darin sind unter anderem Funktionen enthalten, welche nicht Teil von UNIX sind, aber von vielen Entwicklern gewünscht wurden.

Laut diversen Anbietern soll das proprietäre UNIX bis in die 2020er Jahre von diversen weiteren aktuellen Releases unterstützt und erweitert werden. Auch die Open Source Gruppe BSD mit NetBSD, OpenBSD, FreeBSD, sowie dem eigenständigen DragonFly BSD behaupten sich gut unter den UNIX-Systemen. Sie sind zwar nicht so aktiv und bekannt, wie diverse Linux-Systeme, sind aber eine gute und stabile alternative. Unter Insidern sind die BSD-Systeme natürlich alles andere als unbekannt 😎

Unter anderem punktet Linux im Gegensatz zu UNIX-Systemen mit der Verfügbarkeit auf diversen Hardwareplattformen, wie zum Beispiel der Raspberry Pi, welcher unter Bastlern ein sehr beliebtes Bauteil ist. In Kombination mit zum Beispiel einem RGB-LED-Panel können da ganz kreative Ergebnisse entstehen. Linux läuft auch auf diversen IoT-Geräten, wie Handys, Autos oder Smart-TVs. Viele Cloud-Anbieter auf der Welt bieten virtuelle Linux-Server an, auch viele der heutigen Cloud-basierten Stacks basieren auf Linux. Unabhängig davon, um welche Aufgabe es sich handelt, solche Lösungen werden immer beliebter, auch weil sie sehr Stabil sind. Linux und UNIX sind aber in Sachen Viren beide ziemlich gut unterwegs. Bei Linux sind etwa 60-100 Viren bekannt, während bei UNIX bisher etwa 80-120 Viren gemeldet wurden. Die meisten davon werden jedoch schon längere Zeit nicht mehr verbreitet. Linux hingegen ist für Neuanwender nicht einfach zu verwenden, dass gleiche gilt auch für UNIX-Systeme. Bei UNIX sollte man so oder so vorsichtig sein, vor allem im Terminal, denn wenn man beim Eingeben eines Befehls einen Fehler macht, können Dateien zerstört werden. Wenn man zum Beispiel auf einer Linux-Distribution Windows-Programme, wie Microsoft Office installieren möchte, ist es praktisch vorprogrammiert, dass man sich den letzten Nerv ausreissen wird. Das installieren von Windows-Software ist auf einem solchen System nur mit komplizierten Emulatoren möglich. Dies sollte man aber auf eigenes Risiko versuchen, denn der Erfolg ist nicht gewährleistet.

Aller Anfang ist schwer – UNIX

Angefangen hat alles im Jahre 1969 mit 6 jungen motivierten Entwicklern, welche zu den Bell Laboratories gehörten. Man wollte ein Mehrbenutzerbetriebssystem, welches es den Bell Laboratories erleichterte, zusammen Betriebssysteme zu programmieren. Auch sollte von mehreren Benutzern gleichzeitig auf das System zugegriffen werden können, ohne dass sich diese dabei in die Quere kamen. Sie begannen sich Gedanken zu machen, wie das Dateisystem bei ihrem neuen Betriebssystem aufgebaut werden sollte. Ebendiese Konzepte für das Dateisystem von UNIX wurden auf Notizzettel geschrieben und auf  Wandtafeln entwickelt. Die Entwicklergruppe wollte das bisher praktisch unbenutzte PDP-7 weiterentwickeln. Durch ein paar Änderungen und der Implementierung eines Dateisystems und einer Shell, konnte ohne Editor direkt in PDP-7 weiterentwickelt werden. Das PDP-7  war aber dazumal bereits ein Auslaufmodell. Nun arbeiteten die Entwicklergruppe auch an einem eigenen Computer, was sich auszahlte. Es wurde die Beschaffung von PDP-11 in Auftrag gegeben, welches als Textverarbeitungssystem patentiert wurde. PDP-11 war sehr klein, auch konnten Dateien nicht grösser als 64 kB werden. 1972 begann die Neuerstellung von UNIX in der dazumal brandneuen Programmiersprache C.

Im Jahr 1980 erschien die erste Portierung von UNIX V7 auf eine 32-Bit-Maschine. Im Laufe der 80-er Jahre wurde auch UNIX V8, V9 und V10 entwickelt, welche aber nur noch in geringem Ausmasse vorgestellt und verwendet wurden. Aus dieser Arbeit heraus entstand dann aber schlussendlich das Betriebssystem Plan9. Dies war ein sehr erfolgreiches Betriebssystem der Bell Laboratories, welches sich seinen Namen verdient hatte. Auch neu in Plan9 war, das Prinzip „Everything is a file“ konsequent umzusetzen. In den 1980-er Jahren begann auch die Kommerzialisierung von UNIX. AT&T (früher die Bell Laboratories) brachte 1983 das auf UNIX V7 basierende Betriebssystem „System V“ auf den Markt. Zur gleichen Zeit veröffentlichte die Universität von Berkeley „4.2BSD“. Auch DARPA (Defense Advanced Research Projects Agency – Behörde des Verteidigungsministerium der USA, welche Forschungsprojekte fördert) unterstützte die Entwicklungen von Berkeley finanziell. Aber auch AT&T veröffentlichte fortlaufende Verbesserungen für ihre UNIX-Systeme. Professor Andrew S. Tanenbaum entwickelte währenddessen für seine Schüler ein UNIX-Betriebssystem namens „Minix“, um den Schülern den Aufbau eines Betriebssystems zu veranschaulichen. Minix selbst gewann nie an Bedeutung, inspirierte aber Linus Torvalds bei der Arbeit am Linux-Kernel 😉

Schliesslich im Jahr 1990 erschien die BSD-Version „4.3BSD Reno“. Als dann in der Zeit von 1993 „4.4BSD“ herauskam, begann zudem die Entwicklung von FreeBSD und NetBSD. Bis heute sind auch noch zusätzliche BSD-Betriebssysteme hinzugekommen, welche alle weiterhin regelmässig aktualisiert werden. BSD ist eine Unix Opensource-Distribution, welche auch selbst angepasst und erweitert werden kann. BSD-Betriebssysteme sind eine wertige Alternative zu diversen Linux oder Windows Systemen.