Comment fonctionne un système Unix ou Linux? [fermé]

37

Je voudrais savoir comment le système d'exploitation fonctionne en quelques mots :

  • Les composants de base sur lesquels il est construit
  • Comment ces composants fonctionnent ensemble
  • Qu'est-ce qui fait qu'unix UNIX?
  • Ce qui le rend si différent des autres systèmes d'exploitation tels que Windows
Sander Versluys
la source
3
wow cette question prendrait si longtemps pour répondre de manière complète ... comme plusieurs livres. Il y a très peu de systèmes d'exploitation (à l'exception de l'espace intégré et de Windows, exception notable) qui ne sont pas Unix.
xenoterracide
2
ne sais pas s'il faut pleurer ou rire
zvolkov
27
Comment fonctionne un système Unix ou Linux? Très bien merci :-).
Gaurav
3
Aimer la question. C'est le genre qui fait que les utilisateurs expérimentés verbalisent leur propre compréhension et nous donne à tous une chance de comprendre l'univers d'Unix et de Linux.
Stein Åsmul
5
En bref, vous avez un shell, et en dessous, vous avez un noyau. C'est aussi comme ça que fonctionne Unix.
Tom Zych

Réponses:

74

Un système UNIX se compose de plusieurs parties, ou couches comme je les appelle.

Pour démarrer un système, un programme appelé chargeur de démarrage réside dans le premier secteur d’une partition de disque dur. Il est lancé par le système, puis il localise le noyau du système d'exploitation et le charge.

Superposition

  1. Le noyau. C'est le programme central qui est lancé par le chargeur de démarrage. Il effectue l'interaction matérielle de base pour le système (disque, mémoire, vidéo, son) et offre un environnement virtuel dans lequel il peut démarrer des programmes. Le noyau fournit également tous les pilotes qui traitent de toutes les petites différences entre les périphériques matériels. Pour le monde extérieur (les couches supérieures), chaque classe de périphériques semble se comporter exactement de la même manière, ce qui permet aux programmes de s’appuyer sur ceux-ci.

  2. Sous-systèmes de fond. Il y a juste des programmes réguliers, qui restent juste hors de votre chemin. Ils gèrent des tâches telles que la connexion à distance, fournissent un bus de messages central et effectuent des actions en fonction d'événements matériels / réseau. Par exemple, découverte Bluetooth, gestion wifi, etc. Tous les services de réseau (serveur de fichiers, serveur d'impression, serveur Web) sont également actifs à ce niveau. Sous UNIX, ce ne sont que des programmes normaux.

  3. Les outils de ligne de commande. Ce sont tous des petits programmes qui peuvent être lancés pour effectuer des tâches telles que l'édition de texte, le téléchargement de fichiers ou l'administration du système. À ce stade, un système UNIX est entièrement utilisable par les administrateurs système. Sous Windows, cette couche n'existe plus vraiment.

  4. L'interface utilisateur graphique. Ce ne sont également que des programmes, la seule différence est qu’ils dessinent des fenêtres à l’écran au lieu d’écrire du texte. Cela rend le système plus facile à utiliser pour les utilisateurs réguliers.

Tout service ou événement ira du bas au sommet.

Bibliothèques - la plate-forme commune

Les programmes font beaucoup de choses communes comme afficher une fenêtre, dessiner des choses à l'écran ou télécharger un fichier. Ces choses sont les mêmes pour plusieurs programmes, par conséquent, ce code est placé dans des fichiers "bibliothèque" distincts ( .sofichiers - ce qui signifie objet partagé). La bibliothèque peut être partagée entre tous les programmes.

Pour chaque chose imaginable, il y a une bibliothèque. Il y en a un pour lire / écrire des fichiers PNG. Il en existe un pour les fichiers JPEG, pour lire du XML, pour le cryptage, pour la lecture de vidéos, etc.

Sous Linux, les bibliothèques communes pour les développeurs d'applications sont Qt et Gtk. Ces bibliothèques utilisent en interne des bibliothèques de niveau inférieur pour leurs besoins spécifiques, tout en exposant leurs fonctionnalités de manière cohérente et concise afin que les développeurs d'applications puissent créer des applications encore plus rapidement.

Les bibliothèques fournissent la plate-forme d'applications sur laquelle les programmeurs peuvent créer des applications d'utilisateur final pour un système d'exploitation. Plus le système fournit de bibliothèques de haute qualité, moins le programmeur doit écrire pour créer un beau programme.

Certaines bibliothèques peuvent être utilisées sur différents systèmes d'exploitation (par exemple, Qt), d'autres sont spécifiquement liées à un système d'exploitation. Cela empêchera votre programme de ne pouvoir fonctionner que sur cette plate-forme.

Communication interprocessus

Un troisième élément fondamental d’un système d’exploitation est la façon dont les programmes peuvent communiquer entre eux. Ce sont des machanismes IPC (Inter Process Communication). Celles-ci existent sous plusieurs formes, par exemple une partie de la mémoire partagée ou un petit canal est créé entre deux programmes pour échanger des données. Il existe également un bus de messages central sur lequel chaque programme peut poster un message et recevoir une réponse. Ceci est utilisé pour la communication globale, où on ne sait pas quel programme peut répondre.

Des bibliothèques aux systèmes d'exploitation

Avec les bibliothèques, IPC et le noyau en place, les programmeurs peuvent créer toutes sortes d’applications pour les services système, la gestion des utilisateurs, la configuration, l’administration, le travail de bureau, le divertissement, etc. Ceci constitue la suite complète que les utilisateurs novices reconnaissent ".

Dans les systèmes UNIX / Linux, tous les services ne sont que des programmes. Tous les outils d'administration système ne sont que des programmes. Ils font tous leur travail et peuvent être enchaînés. J'ai résumé de nombreux programmes majeurs sur http://codingdomain.com/linux/sysadmin/


Pièces distinguables avec Windows

UNIX est principalement un système de programmes, de fichiers et d’autorisations restreintes. On évite beaucoup de complexités, ce qui en fait un système puissant alors qu'il semble avoir du travail facile à faire.

En détail, voici les principes qui peuvent être trouvés sur les systèmes UNIX / Linux:

  • Il y a des façons uniformes d'accéder à l'information. ("Tout n'est qu'un fichier"). Vous pouvez ouvrir un fichier, un socket réseau, un canal IPC, des paramètres de noyau et un périphérique en mode bloc. D'où l'apparition des systèmes de fichiers virtuels dans / dev, / sys et / proc. La seule API dont vous avez besoin est open, readet close.

  • Le système sous-jacent est transparent. Chaque programme fonctionne selon les mêmes règles. Contrairement à Windows, il n'y a pas de différence artificielle entre un "programme console", un "programme gui" et un "service d'arrière-plan". Ce ne sont que des programmes, qui ont des effets différents. Ils peuvent également tous être observés, analysés et corrigés de la même manière.

  • Les paramètres sont lisibles, modifiables et peuvent être annotés avec des commentaires. Ils ont généralement un format de style INI, mais peuvent utiliser un format personnalisé pour les besoins de cette application. Puisqu'ils ne sont que des fichiers, ils peuvent être copiés sur d'autres systèmes, archivés ou sauvegardés avec des outils standard.

  • Pas de grandes applications "tout faire en une fois". Le mantra est "fais une chose, fais-le bien". Les outils de ligne de commande peuvent être chaînés et, ensemble, être puissants. Des services distincts (par exemple, SMTP, IMAP et POP, et connexion) sont des sous-programmes distincts, évitant ainsi des problèmes complexes de code et de sécurité entrelacés. Les environnements de bureau complexes délèguent le travail difficile à des programmes individuels

  • fork(). Les nouveaux programmes sont lancés par un programme existant lui-même cloné. Le clone configure tout (par exemple, les descripteurs de fichier) et se remplace éventuellement avec le nouveau code de programme. Cela facilite vraiment l'application des mêmes paramètres de sécurité et restrictions à de nouveaux programmes, le partage de mémoire ou la configuration d'un mécanisme IPC. Le coût de démarrage d'un processus est également très bas.

  • Le système de fichiers est une arborescence dans laquelle d'autres partitions de disque et partages réseau peuvent être montés. Là encore, il existe un moyen universel d’accéder aux données. Les emplacements système communs (par exemple, /usrpeuvent facilement être montés en tant que partage réseau.

  • Le système est construit pour des privilèges d'utilisateur bas. Après la connexion, chaque utilisateur (sauf root) se voit limiter ses propres ressources, en exécutant uniquement des applications et des fichiers. Les services réseau réduisent leurs privilèges dès que possible. Il existe un moyen simple et clair d'obtenir davantage de privilèges ou de demander à quelqu'un d'exécuter un travail privilégié pour leur compte. Chaque autre appel est limité par les restrictions et limitations du programme.

  • Chaque programme stocke les paramètres dans un fichier / dossier caché du répertoire de base de l'utilisateur. Aucun programme n'essaie jamais d'écrire un fichier de réglage global.

  • Un avantage envers les mécanismes de communication décrits ouvertement par rapport aux mécanismes secrets ou spécifiques 1-à-1. Les autres fournisseurs et développeurs de logiciels sont encouragés à suivre les mêmes spécifications afin que les choses puissent être facilement connectées, échangées tout en restant couplées de manière lâche.

vdboor
la source
1
Belle réponse, je sais que c'est vraiment difficile à expliquer en bref! Merci! ;-)
Sander Versluys
1
oui monsieur, bien fait sur cette réponse.
Stefan
14
Où est le bouton +10 ???
EricSchaefer
1
Merci à tous pour les commentaires et les votes! Génial de savoir que la réponse est appréciée ce bien!
vdboor
1
@faif, il est assez standard (même les systèmes d'exploitation Microsoft l'ont), et la beauté est dans l'oeil du spectateur, je suppose. Le fait est que tout est un fichier, même des fichiers spéciaux.
Psusi
11

UNIX est un système d’exploitation puissant, bâti sur une conception sonore qui a fait ses preuves depuis plus de 40 ans (une éternité en informatique). La technologie centrale est basée sur le langage C et sur une myriade de petits programmes: les commandes UNIX. McIlroy a résumé la philosophie de base:

Ecrivez des programmes qui font une chose et le font bien. Écrire des programmes pour travailler ensemble. Ecrivez des programmes pour gérer les flux de texte, car c'est une interface universelle.

ESRaymond «L’art de la programmation UNIX» contient d’autres informations sur la philosophie UNIX.

Didier Trosset
la source
2
+1 pour "L'art de la programmation UNIX". Cependant, bien que l'API soit défini autour de C, il n'y a pas de problème technique à mettre en œuvre un système complet en Haskell (avec des morceaux d'assemblage;)) ou quelque chose comme ça.
Maciej Piechotka
3
Les bits de l'assemblage peuvent également être écrits en Haskell. Jetez un coup d'œil à Potential
Phil Miller
10

Il y a d'excellentes réponses ici. Cependant, une chose a été laissée de côté, c’est la * * différence de nix par rapport aux autres systèmes d’exploitation, notamment Microsoft Windows.

Le concept fondamental déjà traité ci-dessus "faire une chose, bien le faire" est si central aux systèmes d'exploitation * nix qu'il peut parfois être négligé. Pourtant, c’est cette philosophie de conception qui rend Linux si flexible et si puissant.

Par exemple, l'interface graphique de MS Windows est étroitement liée au système d'exploitation. Il est pratiquement impossible d'installer un système d'exploitation MS sans l'interface graphique. Sous Linux, vous pouvez facilement faire apparaître un serveur ou un système intégré ne comportant aucun composant graphique. Il peut être entièrement piloté par la ligne de commande tout en restant un serveur complet.

La conception modulaire de Linux permet également à un administrateur système de supprimer un service, de le mettre à niveau et de le restaurer sans redémarrer le système d'exploitation. En fait, vous ne devez redémarrer un système d'exploitation Linux que lorsque le noyau lui-même est en cours de modification ou de mise à niveau.

Par exemple, vous pouvez installer un nouveau gestionnaire de fenêtres (gnome, kde, selon le cas) sous Linux et un utilisateur actuellement connecté au système peut ne jamais s'en rendre compte.

Sous Windows, les modifications les plus simples du système nécessitent souvent un redémarrage, bien qu'il s'agisse parfois d'un problème de sécurité plutôt que d'une exigence technique réelle. Je soutiens que c'est l'un des défauts fondamentaux des systèmes d'exploitation MS. Sous Linux, vous pouvez mettre à niveau de nombreux modules de pilotes et avoir peu ou pas d'impact sur les utilisateurs. Sous Windows, il vous sera peut-être demandé de redémarrer toute la boîte si vous installez simplement une nouvelle application.

Cette conception modulaire donne également à Linux une flexibilité extraordinaire. Chaque système Linux peut être personnalisé pour la tâche spécifique que vous devez accomplir, avec le moins de surcharge de ressources possible. Avec Windows, vous ne pouvez pas désactiver l'interface graphique pour exécuter un serveur HTTP simple. Windows suppose une empreinte mémoire qui crée une barrière en dessous de laquelle votre matériel ne peut pas aller. C’est la raison principale pour laquelle Linux est devenu le système d’exploitation de choix pour de nombreuses applications mobiles et embarquées.

Je pourrais continuer encore et encore, mais j'espère que ces exemples aideront à expliquer pourquoi Linux est devenu si populaire et en quoi il diffère vraiment de cet autre système d'exploitation.

OldTimer
la source
2

Je vous recommande de lire la programmation avancée dans un environnement Unix 2e pour en apprendre davantage sur les API Single Unix Standard (SUS) et POSIX, qui vous donneront une idée de ce qui fait Unix Unix et du fonctionnement des composants.

Cependant, c'est un livre très lourd et plus qu'un manuel de référence. Si vous avez un problème d'insomnie, emmenez-le au lit avec vous. Cela dit, si vous êtes un programmeur Unix C, c'est un must.

xénoterracide
la source
2

Dans l’esprit des deux recommandations précédentes du livre, je recommanderais également

L'interface de programmation LINUX par M. Kerrisk

qui, même s’agissant de la programmation système UNIX / Linux, fournit de nombreuses informations détaillées sur le fonctionnement des systèmes Linux et UNIX du point de vue du programmeur / utilisateur. Il approfondit en détail la plupart des points mentionnés dans la réponse de vdboor et révèle suffisamment de détails de manière compréhensible et lisible pour donner une idée / un aperçu des concepts fondamentaux d'UNIX et de leurs fondements.

Darbehdar
la source