Ich würde gerne wissen, wie das Betriebssystem auf den Punkt gebracht wird :
- Die grundlegenden Komponenten, auf denen es aufgebaut ist
- Wie diese Komponenten zusammenarbeiten
- Was macht UNIX UNIX
- Was unterscheidet es von anderen Betriebssystemen wie Windows?
architecture
Sander Versluys
quelle
quelle
Antworten:
Ein UNIX-System besteht aus mehreren Teilen oder Schichten, wie ich sie nennen möchte.
Um ein System zu starten, befindet sich ein Programm namens Bootloader im ersten Sektor einer Festplattenpartition. Es wird vom System gestartet und sucht den Betriebssystemkern und lädt ihn.
Schichtung
Der Kernel. Dies ist das zentrale Programm, das vom Bootloader gestartet wird. Es übernimmt die grundlegende Hardware-Interaktion für das System (Festplatte, Speicher, Video, Sound) und bietet eine virtuelle Umgebung, in der es Programme starten kann. Der Kernel liefert auch alle Treiber, die sich mit den kleinen Unterschieden zwischen Hardwaregeräten befassen. Für die Außenwelt (die höheren Schichten) scheint sich jede Klasse von Geräten genau gleich zu verhalten - worauf die Programme wiederum aufbauen können.
Hintergrund-Subsysteme. Es gibt nur reguläre Programme, die einem einfach aus dem Weg gehen. Sie kümmern sich beispielsweise um die Remote-Anmeldung, stellen einen zentralen Nachrichtenbus bereit und führen Aktionen aus, die auf Hardware- / Netzwerkereignissen basieren. Zum Beispiel Bluetooth-Erkennung, WLAN-Verwaltung usw. Alle Netzwerkdienste (Dateiserver, Druckserver, Webserver) werden ebenfalls auf dieser Ebene ausgeführt. In UNIX-Systemen sind dies alles nur normale Programme.
Die Kommandozeilen-Tools. Dies sind alles kleine Programme, die gestartet werden können, um beispielsweise Text zu bearbeiten, Dateien herunterzuladen oder das System zu verwalten. Zu diesem Zeitpunkt ist ein UNIX-System für Systemadministratoren voll verwendbar. In Windows gibt es diese Ebene nicht mehr.
Die grafische Benutzeroberfläche. Dies sind auch nur Programme, der einzige Unterschied ist, dass sie Fenster auf dem Bildschirm zeichnen, anstatt Text zu schreiben. Dies macht das System für normale Benutzer benutzerfreundlicher.
Jeder Service oder Event wird von unten nach oben durchgeführt.
Bibliotheken - die gemeinsame Plattform
Programme machen eine Menge üblicher Dinge wie das Anzeigen eines Fensters, das Zeichnen von Gegenständen auf dem Bildschirm oder das Herunterladen einer Datei. Diese Dinge sind für mehrere Programme gleich, daher wird der Code in separate "Bibliotheks" -Dateien (
.so
Dateien - dh gemeinsam genutzte Objekte) gestellt. Die Bibliothek kann von allen Programmen gemeinsam genutzt werden.Für jede erdenkliche Sache gibt es eine Bibliothek. Es gibt eine zum Lesen / Schreiben von PNG-Dateien. Es gibt eine für JPEG-Dateien, zum Lesen von XML, zur Verschlüsselung, zur Videowiedergabe usw.
Unter Linux sind die allgemeinen Bibliotheken für Anwendungsentwickler Qt und Gtk. Diese Bibliotheken verwenden Bibliotheken auf niedrigerer Ebene intern für ihre spezifischen Anforderungen und stellen ihre Funktionalität auf eine schöne, konsistente und übersichtliche Weise zur Verfügung, damit Anwendungsentwickler Anwendungen noch schneller erstellen können.
Bibliotheken stellen die Anwendungsplattform bereit, auf der Programmierer Endbenutzeranwendungen für ein Betriebssystem erstellen können. Je mehr hochwertige Bibliotheken ein System bereitstellt, desto weniger Code muss ein Programmierer schreiben, um ein schönes Programm zu erstellen.
Einige Bibliotheken können für verschiedene Betriebssysteme verwendet werden (z. B. Qt), andere sind speziell an ein Betriebssystem gebunden. Dies schränkt Ihr Programm ein, damit es nur auf dieser Plattform ausgeführt werden kann.
Interprozesskommunikation
Ein dritter Eckpfeiler eines Betriebssystems ist die Art und Weise, wie Programme miteinander kommunizieren können. Dies sind IPC-Mechanismen (Inter Process Communication). Diese existieren in verschiedenen Varianten, z. B. als gemeinsamer Speicher, oder es wird ein kleiner Kanal zwischen zwei Programmen zum Datenaustausch eingerichtet. Es gibt auch einen zentralen Nachrichtenbus, auf den jedes Programm eine Nachricht senden und eine Antwort erhalten kann. Dies wird für die globale Kommunikation verwendet, bei der nicht bekannt ist, welches Programm reagieren kann.
Von Bibliotheken zu Betriebssystemen
Mit Bibliotheken, IPC und dem Kernel können Programmierer alle Arten von Anwendungen für Systemdienste, Benutzerverwaltung, Konfiguration, Verwaltung, Büroarbeit, Unterhaltung usw. erstellen. Dies bildet die vollständige Suite, die unerfahrene Benutzer als "Betriebssystem" erkennen ".
In UNIX / Linux-Systemen sind alle Dienste nur Programme. Alle Systemadministrationstools sind nur Programme. Sie alle machen ihren Job und können aneinander gekettet werden. Ich habe viele wichtige Programme unter http://codingdomain.com/linux/sysadmin/ zusammengefasst.
Unterscheidbare Teile mit Windows
UNIX ist hauptsächlich ein System von Programmen, Dateien und eingeschränkten Berechtigungen. Viele Komplexitäten werden vermieden, was es zu einem leistungsstarken System macht, obwohl es den Anschein hat, als hätte es einen leichten Job.
Im Einzelnen sind dies Prinzipien, die auf UNIX / Linux-Systemen zu finden sind:
Es gibt einheitliche Möglichkeiten, auf Informationen zuzugreifen. ("Alles ist nur eine Datei"). Sie können eine Datei, einen Netzwerk-Socket, einen IPC-Kanal, Kernel-Parameter und ein Blockgerät als Datei öffnen. Daher das Aussehen der virtuellen Dateisysteme in / dev, / sys und / proc. Die einzige API Sie jemals brauchen ist
open
,read
undclose
.Das zugrunde liegende System ist transparent. Jedes Programm arbeitet nach den gleichen Regeln. Im Gegensatz zu Windows gibt es keinen künstlichen Unterschied zwischen einem "Konsolenprogramm", einem "GUI-Programm" oder einem "Hintergrunddienst". Es sind alles nur Programme, die verschiedene Dinge tun. Sie können auch alle auf die gleiche Weise beobachtet, analysiert und debuggt werden.
Die Einstellungen können gelesen und bearbeitet werden und mit Kommentaren versehen werden. Sie haben normalerweise ein INI-Format, können jedoch ein benutzerdefiniertes Format für die Anforderungen dieser Anwendung verwenden. Da es sich nur um Dateien handelt, können sie auf andere Systeme kopiert, archiviert oder mit Standardwerkzeugen gesichert werden.
Keine großen "Alles auf einmal" -Anwendungen. Das Mantra lautet "Mach eins, mach es gut". Kommandozeilen-Tools können verkettet werden und zusammen mächtig sein. Separate Dienste (z. B. SMTP, IMAP und POP sowie Login) sind separate Unterprogramme, um komplexe Code- und Sicherheitsprobleme zu vermeiden. Komplexe Desktop-Umgebungen delegieren harte Arbeit an einzelne Programme.
fork()
. Neue Programme werden von einem vorhandenen Programm gestartet, das sich selbst klont. Der Klon richtet alles ein (zB Dateihandles) und ersetzt sich optional durch den neuen Programmcode. Dies macht es wirklich einfach, die gleichen Sicherheitseinstellungen und Einschränkungen auf neue Programme anzuwenden, Speicher freizugeben oder einen IPC-Mechanismus einzurichten. Die Kosten für das Starten eines Prozesses sind ebenfalls sehr gering.Das Dateisystem ist ein Baum, in dem andere Festplattenpartitionen und Netzwerkfreigaben bereitgestellt werden können. Es gibt wieder eine universelle Möglichkeit, auf Daten zuzugreifen. Gemeinsame Systemstandorte (zB
/usr
können einfach als Netzwerkfreigabe gemountet werden.Das System ist für niedrige Benutzerrechte ausgelegt. Nach der Anmeldung ist jeder Benutzer (außer root) auf seine eigenen Ressourcen beschränkt und führt nur Anwendungen und Dateien aus. Netzwerkdienste reduzieren ihre Berechtigungen so schnell wie möglich. Es gibt nur einen eindeutigen Weg, um mehr Berechtigungen zu erhalten oder jemanden zu bitten, einen privilegierten Job in seinem Namen auszuführen. Jeder andere Aufruf ist durch die Einschränkungen und Beschränkungen des Programms begrenzt.
Jedes Programm speichert die Einstellungen in einer versteckten Datei / einem versteckten Ordner des Benutzerverzeichnisses. Kein Programm versucht jemals, eine globale Einstellungsdatei zu schreiben.
Bevorzugung offen beschriebener Kommunikationsmechanismen gegenüber geheimen Mechanismen oder spezifischen 1-zu-1-Mechanismen. Andere Anbieter und Softwareentwickler werden aufgefordert, die gleichen Spezifikationen zu befolgen, damit die Dinge problemlos verbunden, ausgetauscht und dennoch lose miteinander verbunden werden können.
quelle
UNIX ist ein starkes Betriebssystem, das auf einem Sounddesign aufbaut, das sich seit mehr als 40 Jahren bewährt hat (das ist in der Informatik beinahe Ewigkeit). Die zentrale Technologie basiert auf der Sprache C und einer Vielzahl kleiner Programme: den UNIX-Befehlen. Die grundlegende Philosophie wurde von McIlroy zusammengefasst:
Weitere Informationen zur UNIX-Philosophie finden Sie in ESRaymond "The Art of UNIX Programming".
quelle
Hier gibt es einige hervorragende Antworten. Eine Sache, von der ich denke, dass sie weggelassen wurde, ist, wie sich * nix von anderen Betriebssystemen unterscheidet, insbesondere von Microsoft Windows.
Das grundlegende Konzept, das oben bereits behandelt wurde, "mach eins, mach es gut", ist für * nix-Betriebssysteme so zentral, dass es manchmal übersehen werden kann. Dennoch ist es diese Designphilosophie, die Linux so flexibel und leistungsstark macht.
Beispielsweise ist die grafische Benutzeroberfläche (GUI) für MS Windows in das Betriebssystem integriert. Es ist praktisch unmöglich, ein MS-Betriebssystem ohne die GUI zu installieren. Unter Linux können Sie problemlos einen Server oder ein eingebettetes System aufrufen, das überhaupt keine Grafikkomponente enthält. Es kann vollständig über die Befehlszeile gesteuert werden und dennoch ein Server mit vollem Funktionsumfang sein.
Der modulare Aufbau von Linux ermöglicht es einem Systemadministrator, einen Dienst herunterzufahren, zu aktualisieren und wieder hochzufahren, ohne das Betriebssystem neu zu starten. Tatsächlich müssen Sie ein Linux-Betriebssystem nur dann neu starten, wenn der Kernel selbst geändert oder aktualisiert wird.
Beispielsweise könnten Sie einen neuen Windows-Manager (Gnome, KDE, je nachdem, welcher Typ) unter Linux installieren, und ein Benutzer, der derzeit am System angemeldet ist, wird dies möglicherweise nie bemerken.
Unter Windows erfordern die einfachsten Änderungen am System häufig einen Neustart, obwohl dies manchmal eher ein Sicherheitsproblem als eine tatsächliche technische Anforderung ist. Ich würde behaupten, dass dies einer der grundlegenden Mängel der MS-Betriebssysteme ist. Unter Linux können Sie viele der Treibermodule aktualisieren und die Benutzer kaum oder gar nicht beeinflussen. Unter Windows müssen Sie möglicherweise das gesamte System neu starten, wenn Sie einfach eine neue Anwendung installieren.
Dieser modulare Aufbau bietet Linux auch außerordentliche Flexibilität. Jedes Linux-System kann mit möglichst geringem Ressourcenaufwand auf die jeweilige Aufgabe zugeschnitten werden. Unter Windows können Sie die GUI-Oberfläche nicht ausschalten, um einen einfachen HTTP-Server auszuführen. Windows geht von einem Speicherbedarf aus, der eine Barriere schafft, die Ihre Hardware nicht überschreiten kann. Dies ist ein Hauptgrund dafür, dass Linux für viele mobile und eingebettete Anwendungen zum Betriebssystem der Wahl geworden ist.
Ich könnte noch weiter machen, aber ich hoffe, diese Beispiele helfen zu erklären, warum Linux so populär geworden ist und wie es sich wirklich von diesem anderen Betriebssystem unterscheidet.
quelle
"Design des UNIX-Betriebssystems" wäre ein gutes Buch zum Lesen.
quelle
Ich würde empfehlen, Advanced Programming in einer Unix-Umgebung 2e zu lesen , um viel über die Single Unix Standard (SUS) -API und POSIX zu lernen. Dort erhalten Sie eine Vorstellung davon, was Unix Unix ausmacht und wie die Komponenten funktionieren und wie sie zusammenarbeiten.
Es ist jedoch ein sehr C-lastiges Buch und eher ein Nachschlagewerk. Wenn Sie ein Problem mit Schlaflosigkeit haben, nehmen Sie es einfach mit ins Bett. Abgesehen davon, wenn Sie ein Unix C-Programmierer sind, ist es ein Muss.
quelle
Im Sinne der beiden vorhergehenden Buchempfehlungen würde ich auch empfehlen
Die LINUX-Programmierschnittstelle von M. Kerrisk
Obwohl es sich um das Thema UNIX / Linux-Systemprogrammierung handelt, werden hier unzählige detaillierte Informationen zur Funktionsweise von Linux- und allgemeineren UNIX-Systemen aus Sicht des Programmierers / Benutzers angezeigt. Es befasst sich ausführlich mit den meisten in der Antwort von vdboor erwähnten Aufzählungszeichen und gibt auf verständliche und lesbare Weise genügend Details preis, um sich ein Bild von den grundlegenden UNIX-Konzepten und deren Grundlagen zu machen.
quelle