Warum werden das Betriebssystem und der Kernel unter Linux separat behandelt? [geschlossen]

9

Wenn es um ein Linux-Betriebssystem, einschließlich Ubuntu, geht, werden die Begriffe Kern und Betriebssystem unterschieden. Das ist richtig für Windows und die OS X-Familie, aber warum ist das so weit verbreitet in der Linux-Community? Gibt es eine Möglichkeit, den Betriebssystemkernel zu aktualisieren, ohne dass das Betriebssystem selbst aktualisiert wird? Oder umgekehrt? Wenn ja, wie kann das nützlich sein?

    
Aleksandr Medvedev 09.05.2017, 11:00

5 Antworten

12

Das gesamte GNU / Linux-System ist modular aufgebaut. Sie können meistens ein einzelnes Modul aufrüsten ( ersetzen im Allgemeinen), ohne andere zu berühren. Das fragliche Modul kann ein Bootloader, Kernel, Shell, Befehl, Desktop-Umgebung, GUI-Anwendung, was auch immer ... sein.

Natürlich ist es wahr, solange Sie Abhängigkeiten korrekt verwalten können. In der Reihe der Distributionen um Ubuntu wird APT verwendet, um Abhängigkeiten automatisch aufzulösen.

Sie können eine andere Kernel-Version mit dem folgenden Befehl installieren:

sudo apt install linux-image-<version>

Solange es APT erlaubt, sollten Sie in der Lage sein, neu zu starten und ausgewählte Versionen des Kernels zu verwenden, sei es generisch, low-labelncy usw. Oder Sie bauen selbst eine Kernel-Version auf, z. das Echtzeit-Linux und verwende es mit deinem aktuellen System.

    
Melebius 09.05.2017, 11:17
5

Wie Sie wissen, ist Kernel ein wichtiger Teil von OS, in GNU / Linux-Distributionen können Sie den Kernel einfach aktualisieren, ohne andere Teile des Betriebssystems zu berühren. Wir aktualisieren jedoch nur einen Teil unseres Betriebssystems.

Ein Betriebssystem besteht aus zwei Teilen, Kernel Space und User Space.

Sie können also Ihren Kernel-Space aktualisieren, ohne Ihren Benutzerbereich zu berühren, wenn nur die neue Version mit Ihrem aktuellen Benutzerbereich kompatibel ist.

Und zum Aktualisieren von User Space Tools ist es ein anderes Ja.

Beim Ausführen:

sudo apt-get upgrade

Wenn ein Update für den Kernel verfügbar war, erhalten Sie:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

Sie aktualisieren also nur Ihren Benutzerbereich und wenn Sie etwas wie

ausführen
sudo apt-get dist-upgrade

Sie aktualisieren alles einschließlich des Kernels.

Um nur Ihren Kernel auf eine neuere Version zu aktualisieren, verwenden Sie etwas wie:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print }' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

um eine Liste der neueren Kernel zu finden, dann installieren Sie sie als neues Paket, zum Beispiel:

sudo apt install linux-image-4.10.0-14-generic
    
Ravexina 09.05.2017 11:10
3

Zuerst ein paar Erläuterungen, weil ich merke, dass Sie nicht verstehen, wie GNU / Linux-Systeme entstanden sind. Trag mit mir, wenn das nichts Neues für dich ist:

"Kernel" ist nicht nur ein anderes Programm, das ausgeführt wird, sondern es ist der Teil des Betriebssystems, der die Basisfunktionen bereitstellt: Wenn Sie ein Programm starten möchten (sagen Sie "ls" in der Befehlszeile), hat die Binärdatei um von der Festplatte geladen zu werden (das beinhaltet einige Dateisystemoperationen, um sie zu finden und einige Dateihandhabungen, um sie zu lesen), dann wird eine "Prozessumgebung" erstellt: Speicher wird zugewiesen, eine Prozessnummer wird vergeben usw., usw. Alle Die früheren Aktivitäten (FS, Lesen von Dateien, ...) werden von Systembibliotheken gehandhabt, aber die letzteren sind Kernelfunktionen. In gewisser Hinsicht ist der Kernel "das Betriebssystem" und alles andere ist nur Dekoration um ihn herum.

"Linux" ist in der Tat (nur!) ein Kernel ohne andere Teile eines Betriebssystems. Linus Torvalds fing an, es zu schreiben, indem er Andrew Tanenbaums MINIX-Template-OS-Kernel nahm und es so vervollständigte, dass es ein voll ausgebildeter und wirklich funktionierender Kernel war. Bis heute gibt es Linus (und viele andere, die dazu beigetragen haben / beigetragen haben), die diesen Kernel entwickeln. Dieser Kernel ist immer noch sehr ähnlich zu UNIX, aber KEIN UNIX-Kernel.

"GNU" startete als eine Initiative, um viele gängige UNIX-Befehle zu "verbessern". Ich werde nicht diskutieren, ob sie erfolgreich waren oder nicht, aber sie haben definitiv eine Menge Software geschrieben und hatten irgendwann eine Sammlung von Hilfsprogrammen. Sie begannen sogar, einen eigenen Betriebssystemkern (HURD) zu entwickeln, der weitgehend auf UNIX basierte, aber definitiv anders war. Aber bis heute ist HURD in seiner frühen Entwicklung und kaum eine funktionierende Lösung. "GNU" übrigens. ist die Abkürzung für "GNU (ist) Not UNIX" - sie versuchten, einige (wahrgenommene oder reale) Einschränkungen von UNIX zu überwinden, mit der Absicht, einen Nachfolger für UNIX zu erstellen (ich möchte nicht auf die Diskussion eingehen, wenn sie erfolgreich waren) nicht - es ist mir egal, ob es "besser" oder "schlechter" ist, aber es ist definitiv anders!).

Mit einer Reihe von Tools, denen ein Kernel und ein Kernel ohne Toolset fehlten, war es eine natürliche Entwicklung, diese beiden zusammenzubringen: GNU / Linux wurde erstellt.

Um ein funktionierendes (und funktionierendes) Betriebssystem zu haben, brauchen Sie mehr als nur einen Kernel und ein Toolset: Sie benötigen ein Paketverwaltungssystem, Sie benötigen Installationsverfahren, Sie brauchen Vorlagenkonfigurationen, die Sie benötigen ....

>

Mehrere verschiedene Leute (oder Gruppen davon) kamen zu diesem Schluss und benutzten die GNU / Linux-Kombination, um ein GNU / Linux-System ihrer Wahl zu erstellen, indem sie genau die Dinge hinzufügten, über die ich schon gesprochen hatte: ein Verpackungssystem, Installationsverfahren und was mehr. Diese verschiedenen Gruppen (bzw. die Ergebnisse ihrer Bemühungen) sind die verschiedenen Verteilungen. Heute gibt es drei verschiedene Paketmanager (geeignet für Debian und abgeleitete Systeme wie * ubuntu, rpm für RedHat und abgeleitete Systeme wie Fedora, CentOS und mehr, pacman für ArchLinux), aber all diese verwalten nur Softwarepakete, die (im Wesentlichen) das selbe: was man nennt, wenn man "ls" oder "df" usw. auf einem Debian-System oder einem RHEL-System ausgibt, kommt von verschiedenen Paketen, aber im Wesentlichen ist es die GNU-Version des "ls" - (" df "-) Programm, nur anders verpackt.

Also "im Prinzip" können Sie den Kernel alleine aktualisieren, wie die Leute, die eine Distribution aus verschiedenen Versionen der gesamten Software, die ich oben gesprochen habe, erstellt haben.

Aber, und das ist eine große Sache, ABER: weil es nicht nur den Kernel und einige zusätzliche Software gibt, sondern viele andere Dinge, die man im Hinterkopf behalten sollte, wie Systemkonfigurationstools (systemd), die manche Distributionen verwenden und andere nicht ), Netzwerk-Management-Tools wie NetworkManager, die wiederum von einigen Versionen der GNOME-Bibliothek usw. abhängen - eine "Distribution" ist eine ziemlich komplexe Sache und die Chancen stehen gut, wenn Sie versuchen, den Kernel zu aktualisieren eine Menge anderer Dinge wegen der vielen Abhängigkeiten.

Dennoch, und auch "im Prinzip", wie oben: Sie können auch Ihre eigene Distribution erstellen, indem Sie alle Quellen herunterladen, sie kompilieren, eine funktionierende Menge von Versionskombinationen finden, ein Packsystem einbauen (oder eines davon verwenden) die vorhandenen) - und so weiter, bis Sie ein verteilbares, installierbares und konfigurierbares System haben. Dies ist es, was die Entwickler von Distributionen wie Ubuntu tun, und es ist kein Wunder - nur eine Menge komplexer Arbeit, so dass die meisten Benutzer in der Realität davor zurückschrecken und etwas verwenden, das sie verwenden können.

Ich hoffe, dies beantwortet Ihre Frage.

    
bakunin 09.05.2017 14:08
3

Die einfachste Antwort hat nichts mit Ubuntu zu tun; Es hängt mit der Art zusammen, wie GNU / Linux gebaut wird. Wenn Sie versuchen, es als Systementwickler zu betrachten, werden Sie zwei Welten sehen, die jeweils durch einen scharfen Rand (den ABI) getrennt sind.

Die Kernel-Welt, in der Low-Level-Entwickler arbeiten, ist ein eigenständiges System. Es hat alles, was Sie normalerweise in einer regulären Anwendung finden würden. Der einzige Unterschied besteht darin, dass der Benutzer nicht die tatsächliche Person ist, die das Gerät verwendet, sondern die Benutzer-Welt. Die "Anwendung" des Kernels ist der Mittelmann, der Server, der die Maschine benutzt - der Geist in der Shell.

Nun ist der User-Space die normale Welt, in der der alltägliche Benutzer und Entwickler spielt. Es hat starre APIs, Regeln, Dateien und, am wichtigsten, ein abstraktes, kindliches Bild der Maschine, auf der es läuft. Da der Benutzer nur diesen Teil sieht und dies für 99% der Verteilungsgröße gilt, ist es leicht, das Betriebssystem falsch zu benennen. Die richtige Nomenklatur besteht darin, sie als Softwareverteilung zu bezeichnen, die von einer Entität (Canonical, Fedora usw.) unter Verwendung eines Kernels (Linux, HURD, BSD usw.) erstellt und mit einer Reihe von Werkzeugen (normalerweise von GNU bereitgestellt) erstellt wird ).

Um Ihre Frage zu beantworten, können Sie unter GNU / Linux (genau wie in Windows und OSX, mir vertrauen) den Kernel ändern, nicht nur die Version, sondern die gesamte Architektur (Linux Kernel, vs HURD Kernel) und Solange der ABI nicht berührt wird, mache niemals eine einzige Veränderung in der Benutzerwelt ... Damals, als der echte Mann den Kernel aus Quellen bauen musste, könntest du mehrere Änderungen wie diese vornehmen, um ein Scheiß USB-Webcam zu arbeiten ... Nun, mit dem modularen Kernel, müssen Sie nur ein Modul installieren, und Sie werden eine brandneue Kernel-Welt, mit der ABI (manchmal) mit neuen Funktionen erweitert ...

>

Wieder dasselbe für den Benutzerbereich. Wenn Sie eine neue Anwendung, zum Beispiel ein Ubuntu-Repository, in 99% der Fälle installieren, ist Ihre größte Sorge die Kompatibilität der anderen Komponenten des Benutzerraums, nicht des eigentlichen Kernels. Es gibt Fälle, in denen die Kernel-Version (über ABI) den Umfang der Dinge vorschreibt, die im Userspace installiert werden können, aber das Ziel (zumindest für die Entwickler) ist es, dies wegzulassen ...

Eine andere Sache, über die Sie nachdenken sollten, ist, dass Sie (und es ist ziemlich einfach) Ihre eigene, spezielle, einzigartige GNU / Linux-Distribution erstellen können. Holen Sie sich einen Kernel, ein paar einfache Skripte, mehrere Apps und Sie sind fertig. Es ist einfach so (schauen Sie sich die OpenWRT GNU / Linux-Distributionen an, für Netzwerkgeräte passt die gesamte Distribution in 16 MB oder so).

    
rftghost 09.05.2017 12:21
1

Ich denke, sie werden getrennt gehalten, weil der Kernel ein kritischer Teil ist. Ein Kernel mit einer Regression oder nur einem fehlgeschlagenen Update könnte eine Menge Schaden anrichten. Vielleicht möchten Sie es weniger häufig aktualisieren; oder erst nach einiger Wartezeit, um sicherzugehen, dass niemand Bugs meldet.

Auch einige fortgeschrittene oder professionelle Benutzer kompilieren den Kernel neu, um sein Verhalten an seine Bedürfnisse anzupassen. In einem solchen Fall möchten Sie natürlich nicht jedes Mal, wenn Sie ein Upgrade durchführen, automatisch die Werkseinstellungen ersetzen.

    
Francesco Dondi 09.05.2017 13:54

Tags und Links