Technische Praxis der Computersysteme Teil 1 - Universität Wien
Technische Praxis der Computersysteme Teil 1 - Universität Wien
Technische Praxis der Computersysteme Teil 1 - Universität Wien
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2.2 Multitasking 2 TECHNISCHE EINLEITUNG<br />
und/o<strong>der</strong> gelinkt werden. Dazu benötigt man sowohl den Quelltext des Betriebssystems, als<br />
auch ein Entwicklungssystem (Compiler, Linker), das im kommerziellen PC-Bereich üblicherweise<br />
nicht im Lieferumfang eines Betriebssystems enthalten sind.<br />
Zu Beginn war auch Linux monolithisch aufgebaut, was Linus Torvalds als den wahrscheinlich<br />
größten Fehler in <strong>der</strong> Entwicklung des Betriebssystems bezeichnete. Mittlerweile<br />
sind nur die wichtigsten Gerätetreiber fest an den Betriebssystemkern gebunden, an<strong>der</strong>e<br />
werden modular eingebunden, sodaß sich die Problematik wesentlich entschärft hat.<br />
Bei <strong>der</strong> Trennung zwischen privilegiertem und normalem Modus geht man davon aus,<br />
daß <strong>der</strong> privilegierte <strong>Teil</strong> (mit erhöhten Befugnissen) fehlerfrei ist und daß Übergriffe nur<br />
durch die Anwendungsprogramme zu erwarten sind; praktischerweise wird nur ein möglichst<br />
kleiner <strong>Teil</strong> des Betriebssystems mit vollen Privilegien ausgestattet. Intel CPU’s ab dem<br />
80386 unterstützen bis zu vier unterschiedliche Privilegienstufen, was es möglicht macht<br />
weitere, verfeinerte Schichtungen im Betriebsystem einzuführen. Linux verwendet aber nur<br />
die Unterteilung in User- und Kernel-Modus.<br />
Das dominierende Paradigma <strong>der</strong> Software-Erstellung—die objektorientierte<br />
Programmierung—findet auch im Betriebssystemdesign große Anwendung. Man verwendet<br />
Client-Server-Konzepte, bei dem Nutzer- und Anbieterobjekte (Clients und Server)<br />
miteinan<strong>der</strong> durch Nachrichten kommunizieren. Eine Hauptaufgabe des Betriebssystemkerns<br />
<strong>der</strong> im privilegiertem Modus läuft, ist dabei die Verteilung <strong>der</strong> Nachrichten; die<br />
Clients und Server dagegen werden im nichtprivilegiertem Modus betrieben. Ein prominentes<br />
Beispiel für eine objektorientierte Client-Server-Architektur bei Betriebssystemen ist<br />
<strong>der</strong> Mach-Kernel in einigen Unix-Varianten und dem MacOS und die grafische Oberfläche<br />
X-Window unter Unix. Große Ausführungssicherheit wird dadurch gewonnen, daß ein<br />
Server als <strong>Teil</strong> des Betriebssystems ausfallen kann, ohne daß zwangsweise das gesamte<br />
System abstürzt (Server arbeiten nicht im privilegierten Modus). Im Fehlerfall (etwa<br />
Zugriff auf unzulässige Speicherbereiche) wird <strong>der</strong> Server durch das Sicherheitssystem im<br />
Betriebssystemkern abgebrochen. Prinzipiell kann <strong>der</strong> Server erneut gestartet werden.<br />
Ein weiterer Aspekt ist die Überwachung sicherheitsrelevanter Operationen. Durch Protokollierung<br />
ausgewählter Nachrichten, die durch den Betriebssystemkern verteilt werden,<br />
kann eine fast beliebig genaue Überwachung stattfinden, ohne daß dazu das Design geän<strong>der</strong>t<br />
werden muß.<br />
Weiters bietet eine Client-Server-Architektur die Möglichkeit, die Objekte an verschiedenen<br />
Stellen in einem Netzwerk zu betreiben. So kann etwa ein Kommunikationsserver<br />
auf einem Computer mit Verbindung zu externen Netzen seine Dienste allen erreichbaren<br />
<strong>Teil</strong>nehmern anbieten, wobei sich an <strong>der</strong> Bedienung und <strong>der</strong> Organisation zwischen lokalen<br />
und nichtlokalen Services nichts än<strong>der</strong>t (vgl. Kapitel 7).<br />
2.2 Multitasking<br />
Mo<strong>der</strong>ne Betriebssysteme erlauben es, mehrere Prozesse scheinbar gleichzeitig auszuführen.<br />
Ein Prozeß ist dabei die Instanz eines Programms mit seiner eigenen Prozeßumgebung (Datenbereich,<br />
Prozeßberechtigungen, Umgebungsvariablen, etc.). Es ist wichtig hier zwischen<br />
Programm und Prozeß zu unterscheiden. Wird ein Programm mehrfach gestartet, erhält<br />
je<strong>der</strong> Prozeß seine eigene Prozeßumgebung. Die Prozeßumgebungen werden durch den Betriebssystemkern<br />
verwaltet und sind sauber getrennt. Im Fall von Linux werden die Prozesse<br />
vom Betriebssystem durch eine eindeutige Zahl, die PID (Process Identifier), identifiziert.<br />
Der Eindruck, daß mehrere Prozesse gleichzeitig auf einem System mit nur einem Prozessor<br />
ablaufen kommt dadurch zustande, daß mehrmals innerhalb einer Sekunde ein Wechsel<br />
zwischen den Prozessen stattfindet. Ein solcher Wechsel wird Kontextwechsel genannt und<br />
verläuft in mehreren Schritten.<br />
1. Der aktuell laufende Prozeß wird vom Betriebssystem angehalten. Sein Kontext wird<br />
für die spätere Fortsetzung an gleicher Stelle gesichert.<br />
2. Der nächste Prozeß, <strong>der</strong> ausgeführt werden soll, wird ausgesucht.<br />
3. Der Kontext dieses Prozesses wird wie<strong>der</strong>hergestellt, und <strong>der</strong> Prozeß setzt seine<br />
Ausführung fort. Aus <strong>der</strong> Sicht dieses Prozesses hat sich gegenüber dem Zustand vor<br />
22