Wie funktioniert ein Unix- oder Linux-System? [geschlossen]

37

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?
Sander Versluys
quelle
3
Wow, diese Frage würde so lange dauern, bis sie umfassend beantwortet ist ... wie mehrere Bücher. Es gibt nur sehr wenige Betriebssysteme (abgesehen von eingebettetem Speicherplatz und Windows als Ausnahme), die kein Unix sind.
Xenoterracide
2
nicht sicher, ob man weinen oder lachen soll
zvolkov
27
Wie funktioniert ein Unix- oder Linux-System? Sehr gut danke :-).
Gaurav
3
Liebe die Frage. Auf diese Weise können erfahrene Benutzer ihr eigenes Verständnis verbalisieren und uns alle die Möglichkeit geben, das Universum von Unix und Linux zu verstehen.
Stein Åsmul
5
Kurz gesagt, Sie haben eine Shell und darunter einen Kernel. So funktioniert auch Unix.
Tom Zych

Antworten:

74

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

  1. 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.

  2. 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.

  3. 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.

  4. 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 ( .soDateien - 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, readund 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 /usrkö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.

vdboor
quelle
1
Schöne Antwort, ich weiß, es ist wirklich schwer, kurz zu erklären! Vielen Dank! ;-)
Sander Versluys
1
Ja, Sir, gut gemacht für diese Antwort.
Stefan
14
Wo ist der +10 Button ???
EricSchaefer
1
Vielen Dank für die Kommentare und Stimmen! Schön zu wissen, dass die Antwort so gut angenommen wird!
vdboor
1
@faif, es ist ganz normal (sogar Microsoft-Betriebssysteme haben es), und Schönheit liegt wohl im Auge des Betrachters. Der Punkt ist, dass alles eine Datei ist, auch spezielle.
Psusi
11

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:

Schreiben Sie Programme, die eines können und es gut machen. Schreiben Sie Programme, um zusammenzuarbeiten. Schreiben Sie Programme, um Textströme zu verarbeiten, da dies eine universelle Schnittstelle ist.

Weitere Informationen zur UNIX-Philosophie finden Sie in ESRaymond "The Art of UNIX Programming".

Didier Trosset
quelle
2
+1 für "Die Kunst der UNIX-Programmierung". Während API in C definiert ist, gibt es jedoch kein technisches Problem bei der Implementierung des gesamten Systems in Haskell (mit Assembler-Elementen;)) oder ähnlichem.
Maciej Piechotka
3
Die Baugruppen können auch in Haskell geschrieben werden. Werfen Sie einen Blick auf Potential
Phil Miller
10

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.

Oldtimer
quelle
2

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.

Xenoterracid
quelle
2

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.

Darbehdar
quelle