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
und close
.
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.