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

9

En ce qui concerne n'importe quel système d'exploitation Linux, y compris Ubuntu, les gens ont tendance à distinguer les termes noyau et système d'exploitation . C'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 avoir le système d'exploitation lui-même mis à jour? Ou vice versa? Si oui, comment cela peut-il être utile?

Le vent des rêves
la source
3
Simple: la liberté. La liberté de créer votre propre version de tout ce dont vous avez besoin. Noyau? Coquille? Bureau. Fonce.
Rinzwind
6
Parce qu'ils sont séparés? Même raison pour laquelle le gestionnaire de fenêtres est traité séparément du serveur X (car ils sont séparés) et pourquoi le shell est traité séparément de l'émulateur de terminal (car ils sont également séparés). Maintenant, si vous demandez pourquoi ils ont été conçus de cette façon ...
user253751
Ubuntu fonctionne désormais également au-dessus du noyau Windows 10, ce qui montre qu'il s'agit d'une véritable séparation. Bien sûr, Windows n'est pas livré avec un serveur X qui complique légèrement les choses, mais c'est normal lorsque des pièces manquent.
MSalters
@MSalters Le gestionnaire de fenêtres de Windows est un peu délicat, oui; cependant, si quelqu'un veut réellement exécuter X sur Windows, il existe de nombreuses façons de gérer cela. Le plus simple pour un étranger serait probablement un "émulateur" de serveur au-dessus du gestionnaire de fenêtres existant, bien que je ne sache pas dans quelle mesure cela pourrait mapper (la dernière fois que j'ai vu X internes, je n'étais pas très optimiste). Je ne retiendrais pas mon souffle - cela ne me semble pas comme si beaucoup de gens étaient intéressés à faire fonctionner X sur Windows.
Luaan

Réponses:

12

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 d'autres. Le module en question peut être un chargeur de démarrage, un noyau, un shell, une commande, un environnement de bureau, une application GUI, peu importe…

Bien sûr, c'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 à l'aide de la commande:

sudo apt install linux-image-<version>

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

Melebius
la source
Merci beaucoup, mais serait-ce cohérent? Disons, Ubuntu 14.04 LTS a la version 3.19.0 du noyau, et en cas de mise à jour du noyau, ce n'est plus le 14.04 LTS, non? Donc, si j'essaie de mettre à jour l'ensemble du système plus tard, ou si le mécanisme de mise à jour intégré (Software Updater) m'apporte la nouvelle version, sera-t-il au courant de la version mise à jour du noyau? Est-il capable de vérifier les modules séparément et d'apporter uniquement les modifications requises, sans que les modules déjà mis à jour soient affectés?
The Dreams Wind
1
Voir packages.ubuntu.com/search?keywords=linux-image pour la longue liste des versions du noyau prises en charge par chaque version d'Ubuntu. La version d'Ubuntu est déterminée par des choses différentes de la version du noyau mais je ne sais pas vraiment lesquelles… Si cela vous intéresse, vous pouvez commencer une autre question.
Melebius
1
@AleksandrMedvedev Beaucoup plus tard, je l'ai trouvé! La version Ubuntu est notée dans le fichier /etc/issuefourni par le base-filespaquet. Comme je l'ai déjà écrit, cela n'a aucun rapport avec la version du noyau.
Melebius
5

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.

Lorsque vous exécutez:

sudo apt-get upgrade

S'il y avait une mise à jour disponible pour le noyau, vous obtiendrez:

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

donc vous ne faites que mettre à jour votre espace utilisateur et quand vous exécutez quelque chose comme

sudo apt-get dist-upgrade

vous mettez à jour tout, y compris le noyau.

Pour mettre à niveau 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 des noyaux plus récents, puis installez-le en tant que nouveau package, par exemple:

sudo apt install linux-image-4.10.0-14-generic
Ravexina
la source
Ce n'est certainement pas vrai.
mook765
Corrigez-moi;) donc j'apprends quelque chose de nouveau :)
Ravexina
3
sudo apt upgrademettra également à jour le noyau si de nouvelles versions sont disponibles. sudo apt full-upgradeenlèvera bien les fesses, ce qui asudo apt upgradene fera pas.
Soren A
Comme je passe maintenant à un nouveau noyau, c'est une sorte d'installation et lors de l'utilisation de la upgradesous-commande, il n'installera aucun nouveau paquet et ne supprimera aucun paquet, c'est pourquoi nous l'utilisons dist-upgrade. fonctionne au moins apt-getde cette façon;) j'ai donc mis à jour mes commandes pour éviter toute confusion.
Ravexina
1
Je suis plus expérimenté avec la aptcommande, après une courte recherche, il semble que votre réponse est correcte maintenant, aptet apt-getgérez la chose différemment, voir hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -commande /… . Donc quelques connaissances pour nous deux ...
mook765
3

Tout d'abord, quelques clarifications, car je sens que vous ne comprenez pas comment les systèmes GNU / Linux ont vu le jour. Soyez indulgent si ce n'est pas nouveau pour vous:

"Kernel" n'est pas seulement un autre programme qui s'exécute, mais c'est la partie du système d'exploitation fournissant 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 certaines opérations du système de fichiers pour le localiser et une certaine gestion des fichiers pour le lire), puis un "environnement de processus" est créé: la mémoire est attribuée, un numéro de processus est émis, etc., etc. Toutes les anciennes activités (FS, lecture depuis un 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 l'OS" et tout le reste n'est que décoration autour de lui.

"Linux" est en fait (seulement!) Un noyau sans aucune autre partie d'un OS autour. Linus Torvalds a commencé à l'écrire en prenant le noyau du système d'exploitation du modèle MINIX d'Andrew Tanenbaums et en le complétant pour qu'il devienne un noyau complet et réel. À ce jour, il y a Linus (et beaucoup d'autres qui contribuent / ont contribué) qui développent ce noyau. Ce noyau est toujours très similaire à UNIX, mais PAS à un noyau UNIX.

"GNU" a commencé comme une initiative pour "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 à un moment donné, ils avaient une collection de programmes utilitaires. Ils ont même commencé à développer leur propre noyau OS (HURD), qui était basé en grande partie sur UNIX, mais qui était définitivement différent. Mais à ce jour, HURD est à ses débuts et n'est guère une solution de travail. "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 avec l'intention de créer un successeur d'UNIX (encore une fois: je ne veux pas entrer dans la discussion s'ils ont réussi ou pas - je m'en fiche si c'est "mieux" ou "pire", mais c'est définitivement différent!).

Donc, avec un ensemble d'outils dépourvu de noyau et un noyau dépourvu de jeu d'outils, c'était un développement naturel de réunir ces deux: GNU / Linux a été créé.

Pourtant, pour avoir un système d'exploitation fonctionnel (et fonctionnel), vous avez besoin de plus qu'un simple noyau et un ensemble d'outils: vous avez besoin d'un système de gestion de packages, vous avez besoin de procédures d'installation, vous avez besoin de configurations de modèles, vous avez besoin ...

Plusieurs personnes différentes (ou des groupes de personnes) sont arrivées à cette conclusion et ont utilisé la combinaison GNU / Linux pour créer un système GNU / Linux de leur choix, en ajoutant exactement les choses dont j'ai parlé ci-dessus: elles ont créé un gestionnaire de paquets, un système d'emballage , les 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, il y a trois gestionnaires de paquets différents en place (apt pour Debian et les systèmes dérivés comme * ubuntu, rpm pour RedHat et les systèmes dérivés comme Fedora, CentOS et plus, pacman pour ArchLinux) mais tous ceux-ci ne font que gérer des paquets de logiciels qui sont (essentiellement) la même chose: ce qui est appelé lorsque vous émettez "ls" ou "df", etc.,

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 dont j'ai parlé plus haut.

Mais, et c'est un vrai gros MAIS: parce qu'il n'y a pas seulement le noyau et quelques logiciels supplémentaires mais beaucoup d'autres choses à garder à l'esprit, comme les outils de configuration du système (systemd, que certaines distributions utilisent et d'autres non), le réseau des outils de gestion comme NetworkManager, qui à son tour dépend de certaines versions de la bibliothèque GNOME, etc., etc. - une "distribution" est une chose assez complexe et il y a des chances que si vous essayez de mettre à jour le noyau, vous finissez par mettre à jour beaucoup de d'autres choses en raison des nombreuses interdépendances.

Pourtant, 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 fonctionnel de combinaisons de versions, en mettant en place un système de packaging (ou en utilisant l'une des existantes) ) - et ainsi de suite, jusqu'à ce que vous disposiez d'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 - juste beaucoup de travail complexe, donc en réalité la plupart des utilisateurs évitent cela et utilisent quelque chose qu'ils peuvent en étant prêts à l'emploi.

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

Bakunin
la source
GNU n'a pas commencé comme une initiative pour "améliorer" de nombreuses commandes UNIX courantes. GNU était un système d'exploitation dès le départ, dans le but de faire du logiciel libre en réponse à la propriété exclusive d'UNIX. Vous pouvez en lire plus sur leur site Web . Ils ont décidé de porter tous leurs logiciels sous Linux car au moment de la création de Linux, GNU n'avait toujours pas de noyau fonctionnel.
Ian Emnace
3

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

Le monde du noyau, où travaillent les développeurs de bas niveau, est un système à part entière. Il contient tout ce que vous trouverez normalement dans une application régulière. La seule différence est que l'utilisateur n'est pas la personne réelle qui utilise la machine, mais le monde de l'espace utilisateur. L '"application" du noyau est l'homme du milieu, le serveur qui utilise la machine - le fantôme dans le shell.

Maintenant, l'espace utilisateur est le monde normal sur lequel les utilisateurs et les développeurs de tous les jours jouent. Il a des API rigides, des règles, des fichiers et, le plus important, une image abstraite et enfantine de la machine sur laquelle il fonctionne. É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 le nommer Système d'exploitation. La bonne nomenclature est de l'appeler une distribution de logiciels, 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, croyez-moi), vous pouvez changer le noyau, pas seulement la version, mais l'architecture entière (Linux Kernel, vs HURD Kernel), et, tant que l'ABI n'est pas touché, ne faites jamais un seul changement dans le monde des utilisateurs ... À l'époque, quand le vrai homme devait construire le noyau à partir des sources, vous pouviez passer par plusieurs changements comme ceux-ci, pour obtenir une webcam USB merdique pour travailler ... Maintenant, avec le noyau modulaire, il vous suffit d'installer un module, et vous obtiendrez un tout nouveau monde de noyau, avec l'ABI (parfois) étendu avec de nouvelles fonctionnalités ...

Encore une fois, c'est la même chose pour l'espace utilisateur. Lorsque vous installez une nouvelle application, à partir, disons, d'un référentiel Ubuntu, 99% du temps, votre plus grande préoccupation est la compatibilité des autres composants de l'espace utilisateur, pas du noyau réel. Il y a des cas, où la version du noyau dicte (via ABI) la gamme de choses qui peuvent être installées dans l'espace utilisateur, mais le but (pour les développeurs, au moins) est de faire disparaître cela ...

Une autre chose à méditer, vous pouvez (et c'est assez facile) créer votre propre distribution GNU / Linux unique en son genre. Obtenez un noyau, quelques scripts simples, plusieurs applications et vous êtes prêt. C'est aussi simple que cela (jetez un oeil aux distributions OpenWRT GNU / Linux, pour les équipements réseau, la distribution entière tient comme 16 Mo, ou plus).

rftghost
la source
"une frontière nette (l'ABI)." Je pense que vous voulez dire l'API. L'ABI est, à défaut d'un meilleur terme, un code à interface matérielle. L'API, d'autre part, est une interface de code à code.
Sam
1

Je suppose qu'ils sont séparés car le noyau est un élément critique. Un noyau avec une régression, ou juste une mise à jour échouée, pourrait faire beaucoup de dégâts. Vous voudrez peut-être le mettre à jour moins fréquemment; ou seulement après avoir attendu un certain temps pour vous assurer que personne ne signale de bogues inquiétants.

Certains utilisateurs avancés ou professionnels recompilent également le noyau pour modifier son comportement afin de mieux répondre à leurs besoins. Dans ce cas, vous ne voudriez évidemment pas qu'il soit automatiquement remplacé par la version d'usine à chaque mise à niveau.

Francesco Dondi
la source