web-dev-qa-db-fra.com

Pourquoi le système d'exploitation et le noyau sont-ils traités séparément sous Linux?

Quel que soit le système d'exploitation Linux utilisé, y compris Ubuntu, les gens ont tendance à distinguer les termes noya et système d'exploitation. Ceci est correct pour Windows et la famille OS X, mais pourquoi est-il si répandu dans la communauté Linux? Existe-t-il un moyen de mettre à jour le noyau du système d'exploitation sans mettre à jour le système d'exploitation lui-même? Ou vice versa? Si oui, comment cela peut-il être utile?

9
The Dreams Wind

L'ensemble du système GNU/Linux est construit en utilisant l'approche modulaire. Vous pouvez principalement mettre à niveau ( remplacer en général) un seul module sans en toucher les autres. Le module en question peut être un chargeur de démarrage, un noyau, un shell, une commande, un environnement de bureau, une application graphique, etc.

Bien sûr, cela est vrai tant que vous êtes capable de gérer correctement les dépendances. Dans l'ensemble des distributions autour d'Ubuntu, APT est utilisé pour résoudre automatiquement les dépendances.

Vous pouvez installer une autre version du noyau en utilisant la commande suivante:

Sudo apt install linux-image-<version>

Tant que APT le permet, vous devriez pouvoir redémarrer et utiliser la version sélectionnée du noyau, qu'il soit générique, lowlatency, etc. Ou vous construisez vous-même une version du noyau, par exemple. Linux temps réel , et utilisez-le avec votre système actuel.

12
Melebius

Comme vous le savez, le noyau est une partie importante du système d'exploitation. Dans les distributions GNU/Linux, vous pouvez facilement mettre à jour le noyau sans toucher à une autre partie du système d'exploitation. Cependant, nous mettons simplement à jour une partie de notre système d'exploitation.

Un système d'exploitation est composé de deux parties: l'espace noyau et l'espace utilisateur.

Alors oui, vous pouvez mettre à jour votre espace noyau sans toucher à votre espace utilisateur si seule la nouvelle version est compatible avec votre espace utilisateur actuel.

Et à propos de la mise à jour des outils de l'espace utilisateur, c'est un autre oui.

Quand tu cours:

Sudo apt-get upgrade

Si une mise à jour était disponible pour le noyau, vous obtiendrez:

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

de sorte que vous ne faites que mettre à jour votre espace utilisateur et lorsque vous exécutez quelque chose comme

Sudo apt-get dist-upgrade

vous mettez à jour tout, y compris le noyau.

Pour mettre à jour uniquement votre noyau vers une version plus récente, utilisez quelque chose comme:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | 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

pour trouver une liste de nouveaux noyaux, puis installez-le en tant que nouveau paquet, par exemple:

Sudo apt install linux-image-4.10.0-14-generic
5
Ravexina

La réponse la plus simple n'a rien à voir avec Ubuntu; cela est lié à la façon dont GNU/Linux est construit. Si vous essayez de regarder cela en tant que développeur système, vous verrez deux mondes séparés par une bordure nette (ABI).

Le monde du noyau, où travaillent les développeurs de bas niveau, est un système à lui seul. Il contient tout ce que vous trouverez normalement dans une application normale. La seule différence est que l'utilisateur n'est pas la personne qui utilise la machine, mais le monde de l'utilisateur. Le noyau "application" est l’intermédiaire, le serveur qui utilise la machine - le fantôme dans le shell.

Désormais, l’espace utilisateur est le monde normal dans lequel jouent tous les jours les utilisateurs et les développeurs. Il a des API rigides, des règles, des fichiers et, surtout, une image abstraite et enfantine de la machine sur laquelle il tourne. Étant donné que l'utilisateur ne voit que cette partie et que cela représente 99% de la taille de la distribution, il est facile de lui attribuer un nom incorrect Système d'exploitation. La bonne nomenclature est de l'appeler une distribution logicielle, créée par une entité (Canonical, Fedora, etc.), utilisant un noyau (Linux, HURD, BSD, etc.) et construite à l'aide d'un ensemble d'outils (généralement fournis par GNU). ).

Pour répondre à votre question, dans GNU/Linux (comme dans Windows et OSX, faites-moi confiance), vous pouvez changer le noyau, pas seulement la version, mais l’architecture tout entière (Linux Kernel, vs HURD Kernel), et tant que l’ABI n’est pas touché, n’apportez jamais un seul changement dans le monde des utilisateurs ... À l’époque, quand le vrai homme devait construire le noyau à partir de sources, vous pouviez passer par plusieurs changements comme celui-ci, pour obtenir une webcam USB de merde pour travailler ... Maintenant, avec le noyau modulaire, il vous suffit d'installer un module et vous obtiendrez un tout nouveau monde du noyau, avec ABI (parfois) étendu avec de nouvelles fonctionnalités ...

Encore une fois, la même chose pour l'espace utilisateur. Lorsque vous installez une nouvelle application, à partir d’un référentiel Ubuntu par exemple, votre principale préoccupation est la compatibilité des autres composants de l’espace utilisateur, et non du noyau lui-même. Il y a des cas où la version du noyau dicte (via ABI) la gamme de choses pouvant être installées dans l'espace utilisateur, mais l'objectif (pour les développeurs, au moins) est de faire en sorte que cela disparaisse ...

Autre chose à considérer: vous pouvez (et c'est assez facile) créer votre propre distribution GNU/Linux spéciale et unique. Obtenez un noyau, des scripts simples, plusieurs applications et vous êtes prêt. C’est aussi simple que cela (jetez un coup d’œil aux distributions OpenWRT GNU/Linux, pour les équipements réseau, toute la distribution s’intègre comme 16Mo environ).

3
rftghost

Tout d’abord, quelques précisions, car j’ai l’impression que vous ne comprenez pas comment les systèmes GNU/Linux ont vu le jour. Ours avec moi si ce n'est pas nouveau pour vous:

"Kernel" n'est pas simplement un autre programme qui fonctionne, mais c'est la partie du système d'exploitation qui fournit les fonctions de base: si vous voulez démarrer un programme (par exemple, vous tapez "ls" sur la ligne de commande), le binaire doit être chargé. à partir du disque (qui inclut des opérations de système de fichiers pour le localiser et une manipulation de fichiers pour le lire), un "environnement de processus" est créé: une mémoire est attribuée, un numéro de processus est émis, etc. Toutes les activités précédentes (FS, lecture de fichier, ...) sont gérés par les bibliothèques système, mais ces dernières sont des fonctions du noyau. Dans un certain sens, le noyau "est le système d'exploitation" et tout le reste est simplement décoratif.

"Linux" est en fait (seulement!) Un noyau ne contenant aucune autre partie d'un système d'exploitation. Linus Torvalds a commencé à l'écrire en prenant le noyau du modèle OS de template MINIX d'Andrew Tanenbaums et en le complétant pour qu'il devienne un véritable noyau exploitable. À ce jour, Linus (et beaucoup d’autres qui ont contribué/ont contribué) ont développé ce noyau. Ce noyau est toujours très similaire à UNIX, mais PAS à un noyau UNIX.

"GNU" est une initiative visant à "améliorer" de nombreuses commandes UNIX courantes. Je ne discuterai pas s'ils ont réussi ou non, mais ils ont certainement écrit beaucoup de logiciels et avaient à un moment donné une collection de programmes utilitaires. Ils ont même commencé à développer leur propre noyau d’exploitation (HURD), basé en grande partie sur UNIX, mais qui était nettement différent. Mais à ce jour, HURD en est à ses débuts et n’est guère une solution efficace. "GNU" btw. est l'abréviation de "GNU (is) Not UNIX" - ils ont essayé de surmonter certaines limitations (perçues ou réelles) d'UNIX dans le but de créer un successeur d'UNIX (encore une fois: je ne veux pas participer à la discussion s'ils ont réussi ou non - je me moque de savoir si c'est "meilleur" ou "pire", mais c'est vraiment différent!).

Ainsi, avec un ensemble d’outils dépourvus de noyau et un noyau dépourvu d’ensemble d’outils, il était tout à fait naturel de réunir ces deux éléments: GNU/Linux a été créé.

Néanmoins, pour avoir un système d’exploitation fonctionnel (et exploitable), vous avez besoin de plus que d’un noyau et d’un ensemble d’outils: vous avez besoin d’un système de gestion de paquets, de procédures d’installation, de configurations de modèles, de ....

Plusieurs personnes (ou groupes de personnes) sont parvenues à cette conclusion et ont utilisé la combinaison GNU/Linux pour créer un système GNU/Linux à leur convenance, en ajoutant exactement ce dont j'ai parlé ci-dessus: ils ont créé un gestionnaire de paquets, un système de paquets. , procédures d'installation et quoi de plus. Ces différents groupes (respectivement les résultats de leurs efforts) sont ce que sont les différentes distributions. Aujourd'hui, trois gestionnaires de paquets différents sont en place (apt pour Debian et les systèmes dérivés tels que * ubuntu, rpm pour RedHat et les systèmes dérivés tels que Fedora, CentOS et autres, pacman pour ArchLinux), mais tous ne gèrent que des packages de logiciels qui sont (essentiellement) le même: ce qui est appelé quand vous lancez "ls" ou "df", etc., sur un système Debian ou un système RHEL provient de paquets différents, mais il s'agit essentiellement de la version GNU du "ls" - (" df "-) programme, juste emballé différemment.

Donc, "en principe", vous pouvez mettre à jour le noyau seul, comme l'ont fait les personnes qui ont créé une distribution à partir de différentes versions de tous les logiciels que j'ai cités plus haut.

Mais c’est un très gros MAIS: car il n’ya pas que le noyau et quelques logiciels supplémentaires, mais aussi beaucoup d’autres choses à garder à l’esprit, telles que les outils de configuration système (systemd, que certaines distributions utilisent et d’autres pas), le réseau des outils de gestion comme NetworkManager, qui dépendent à leur tour de certaines versions de la bibliothèque GNOME, etc., etc. - une "distribution" est une chose assez complexe et il y a de fortes chances que si vous essayez de mettre à jour le noyau, vous finissez par mettre à jour beaucoup de choses. autres choses à cause des nombreuses interdépendances.

Toujours et aussi "en principe", comme ci-dessus: vous pouvez également créer votre propre distribution en téléchargeant toutes les sources, en les compilant, en trouvant un ensemble de combinaisons de versions utilisable, en mettant en place un système de conditionnement (ou en utilisant l’un des existants). ) - et ainsi de suite, jusqu'à ce que vous ayez un système distribuable, installable et configurable. C’est ce que font les créateurs de distributions comme Ubuntu et ce n’est pas un miracle, mais beaucoup de travail complexe. En réalité, la plupart des utilisateurs hésitent à le faire et utilisent quelque chose de prêt à être utilisé.

J'espère que cela répond à votre question.

3
bakunin

Je suppose qu’ils sont séparés car le noyau est une partie critique. Un noyau avec une régression, ou juste une mise à jour ayant échoué, pourrait faire beaucoup de dégâts. Vous voudrez peut-être le mettre à jour moins souvent; ou seulement après avoir attendu quelque temps pour s'assurer que personne ne rapporte de bogues préoccupants.

De plus, certains utilisateurs avancés ou professionnels recompilent le noyau pour modifier son comportement afin de mieux répondre à leurs besoins. Dans ce cas, vous ne voudriez évidemment pas qu’elle soit automatiquement remplacée par la version usine à chaque mise à niveau.

1
Francesco Dondi