02.11.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!