web-dev-qa-db-fra.com

Comment fonctionne un système Unix ou Linux?

J'aimerais savoir comment fonctionne le système d'exploitation en un mot:

  • Les composants de base qu'il repose sur
  • Comment ces composants fonctionnent ensemble
  • Qu'est-ce qui rend UNIX UNIX
  • Qu'est-ce qui le rend si différent des autres OSS comme Windows
37
Sander Versluys

Un système UNIX est composé de plusieurs parties ou de couches que je voudrais les appeler.

Pour démarrer un système, un programme appelé le chargeur de démarrage vit au premier secteur d'une partition de disque dur. Il est démarré par le système et, à son tour, il localise le noyau du système d'exploitation et le charger.

superposition

  1. Le noyau. Ceci est le programme central qui est démarré par le chargeur de démarrage. Il fait l'interaction matérielle de base du système (disque, mémoire, vidéo, son) et propose un environnement virtuel dans lequel il peut démarrer des programmes. Le noyau expédie également tous les pilotes qui traitent de toutes les petites différences entre les périphériques matériels. Au monde extérieur (les couches supérieures), chaque classe d'appareils semble se comporter exactement de la même manière cohérente - ce qui, à son tour, les programmes peuvent s'appuyer sur.

  2. Sous-systèmes de base. Il n'y a que des programmes réguliers, ce qui reste hors de votre chemin. Ils gèrent des objets comme la connexion à distance, fournissent un bus de messagerie centis et effectuent des actions basées sur des événements matériels/réseau. Par exemple, la découverte Bluetooth, la gestion WiFi, etc. Tous les services réseau (serveur de fichiers, serveur d'impression, serveur Web) vivent également à ce niveau. Dans les systèmes UNIX, ce sont tous des programmes normaux.

  3. Les outils de ligne de commande. Ce sont tous de petits programmes qui peuvent être commencés à faire des choses 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 pour les administrateurs d'administrateurs système. Sous Windows, cette couche n'existe plus vraiment.

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

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

Bibliothèques - La plate-forme commune

Les programmes font beaucoup de choses courantes telles que l'affichage d'une fenêtre, dessiner des choses à l'écran ou télécharger un fichier. Ces choses sont les mêmes pour plusieurs programmes, d'où ce code est mis dans des fichiers de "bibliothèque" séparés (.so fichiers - Signification objet partagé). La bibliothèque peut être partagée dans 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 y en a un pour les fichiers JPEG, pour lire XML, pour le cryptage, pour la lecture vidéo, etc.

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

Les bibliothèques fournissent la plate-forme d'application sur laquelle les programmeurs peuvent créer des applications utilisateur finales pour un système d'exploitation. Les bibliothèques de qualité supérieure à un système fournissent, moins le code d'un programmeur doit écrire pour créer un beau programme.

Certaines bibliothèques peuvent être utilisées à travers différents systèmes d'exploitation (par exemple, QT sont), certaines sont vraiment spécifiquement liées à un système d'exploitation. Cela limitera votre programme pour pouvoir fonctionner à cette plate-forme uniquement.

Communication Inter Process

Un troisième coin d'un système d'exploitation est la manière dont les programmes peuvent communiquer entre eux. Ce sont des mécanismes de communication entre les processus intervenant (IPC). Celles-ci existent dans plusieurs saveurs, par exemple Un morceau de mémoire partagée ou un petit canal est mis en place entre deux programmes pour échanger des données. Il existe également un bus de messagerie central sur lequel chaque programme peut poster un message et recevoir une réponse. Ceci est utilisé pour la communication mondiale, où il est inconnu que le programme peut répondre.

des bibliothèques aux systèmes d'exploitation

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

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 ils peuvent être enchaînés ensemble. J'ai résumé de nombreux programmes majeurs à http://codingdomain.com/linux/sysadmin/


Parties distinctes avec Windows

Unix est principalement un système de programmes, de fichiers et d'autorisations restreintes. Beaucoup de complexités sont évitées, ce qui en fait un système puissant pendant qu'il semble qu'il ait un travail facile de le faire.

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

  • Il existe des moyens uniformes d'accéder à des informations. ("Tout est juste un fichier"). Vous pouvez ouvrir un fichier, une prise réseau, la chaîne IPC, les paramètres de noyau et le périphérique de bloc en tant que fichier. D'où l'apparition des systèmes de fichiers virtuels dans/dev,/SYS et/PROC. La seule API que vous avez déjà besoin est open, read et close.

  • Le système sous-jacent est transparent. Chaque programme fonctionne dans les mêmes règles. Contrairement à Windows, il n'existe aucune différence artificielle entre un "programme de console", "programme d'interface graphique" ou "service de base". Ce sont tous des programmes que cela fait des choses différentes. Ils peuvent également tous être observés, analysés et débogué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 d'ini-style, mais peuvent utiliser un format personnalisé pour répondre aux besoins de cette application. Parce qu'ils ne sont que des fichiers, ils peuvent être copiés à d'autres systèmes, archivés ou sauvegardés avec des outils standard.

  • Aucun gros "faire tout cela en une fois". Le mantra est "faire une chose, le fais bien". Les outils de ligne de commande peuvent être chaînés et ensemble être puissants. SERVICES SERVES (E.G. SMTP, IMAP et POP, et Connexion) sont des sous-programmes distincts, évitant ainsi les problèmes complexes de code et de sécurité entrelacés. Les environnements de bureau complexes déléguent un travail acharné à des programmes individuels.

  • fork(). Les nouveaux programmes sont démarrés par un programme existant clonant lui-même. Le clone établit tout (par exemple les poignées de fichier) et se remplace éventuellement avec le nouveau code de programme. Cela rend vraiment facile d'appliquer les mêmes paramètres de sécurité et les mêmes restrictions à de nouveaux programmes, partager la mémoire ou configurer un mécanisme IPC. Le coût du démarrage d'un processus est également très faible.

  • Le système de fichiers est un arborescence, dans lequel d'autres partitions de disque et actions réseau peuvent être montées. Il y a encore une manière universelle d'accéder à des données. Emplacements système communs (par exemple /usr peut facilement être monté en tant que part réseau.

  • Le système est conçu pour les privilèges d'utilisateur faible. Après la connexion, chaque utilisateur (sauf la racine) est confinée ses propres ressources, exécutant uniquement des applications et des fichiers. Les services réseau réduisent leurs privilèges dès que possible. Il existe une seule façon claire d'obtenir plus de privilèges ou de demander à quelqu'un d'exécuter un emploi privilégié en leur nom. Tous les autres appels sont limités par les restrictions et les limitations du programme.

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

  • Une faveur vers des mécanismes de communication décrits ouvertement sur des mécanismes secrets ou des mécanismes spécifiques de 1 à 1. D'autres fournisseurs et développeurs de logiciels sont encouragés à suivre la même spécification, afin que les choses puissent être facilement connectées, échantillonnées et pourtant rester suffisamment couplées.

74
vdboor

UNIX est un système d'exploitation solide, construit sur une conception sonore qui s'est avérée fructueuse depuis plus de 40 ans (c'est presque l'éternité en informatique). La technologie centrale est basée sur la langue C et une myriade de petits programmes: les commandes UNIX. La philosophie de base a été résumée par McIlroy:

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

Plus d'informations sur la philosophie UNIX se trouve dans E.S.Raymond "L'art de la programmation UNIX".

11
Didier Trosset

Il y a d'excellentes réponses ici. Cependant, une chose que je pense a été laissée de côté est de savoir comment * NIX diffère d'autres systèmes d'exploitation, en particulier de Microsoft Windows.

Le concept fondamental déjà couvert ci-dessus "Faites une chose, faites-le bien" est si central pour * Nix Systems d'exploitation qu'il peut parfois être négligé. Pourtant, c'est cette philosophie de conception qui rend Linux si flexible et puissant.

Par exemple, l'interface utilisateur graphique (GUI) pour 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. À Linux, vous pouvez facilement faire apparaître un serveur ou un système intégré sans composant graphique. Il peut être entièrement piloté de ligne de commande et est toujours un serveur complet.

La conception modulaire de Linux permet également à un administrateur système de réduire un service, de la mettre à niveau et de la ramener sans redémarrer le système d'exploitation. En fait, la seule fois que vous devez redémarrer un système d'exploitation Linux est lorsque le noyau lui-même est modifié ou mis à niveau.

Par exemple, vous pouvez installer un nouveau gestionnaire Windows (GNOME, KDE, que) sur Linux et qu'un utilisateur actuellement connecté au système pourrait ne jamais être conscient.

Sous Windows, souvent les modifications les plus simples du système nécessitent un redémarrage, bien que cela soit parfois plus un problème de sécurité que d'une exigence technique réelle. Je soutiendrais qu'il s'agit d'un des défauts de base des systèmes d'exploitation de la SP. Sur Linux, vous pouvez mettre à niveau plusieurs des modules de pilote et avoir un impact faible ou non sur les utilisateurs. Sous Windows, vous devrez peut-être redémarrer la boîte entière si vous installez simplement une nouvelle application.

Cette conception modulaire donne également une flexibilité extraordinaire Linux. Chaque système Linux peut être adapté à la tâche spécifique dont vous avez besoin pour accomplir, avec aussi peu de frais de ressources que possible. Avec Windows, vous ne pouvez pas désactiver l'interface GUI pour exécuter un simple serveur HTTP. Il existe une empreinte mémoire que Windows suppose qui crée une barrière ci-dessous laquelle votre matériel ne peut pas aller. C'est une raison principale que Linux est devenu le système d'exploitation de choix pour de nombreuses applications mobiles et intégrées.

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

10
OldTimer
3
Hemant

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

l'interface de programmation Linux de M. Kerrisk

lequel, même ciblant le sujet de la programmation du système UNIX/Linux, révèle des tonnes d'informations détaillées sur la manière dont les systèmes Linux et plus généralement Unix fonctionnent à partir du point de vue du programmeur/de l'utilisateur. Il approfondit en détail dans la plupart des balles mentionnées dans la réponse de Vdboor et révèle suffisamment de détails de manière compréhensible et lisible pour avoir une sensation/image des concepts UNIX fondamentaux et de leurs fondements.

2
darbehdar

Je recommanderais de lire Programmation avancée dans un environnement UNIX 2E Pour en savoir plus sur l'API UNIX UNIX (SUS) API et POSIX, qui vous donnera une idée de ce qui rend UNIX UNIX et comment les composants fonctionnent et travailler ensemble.

Cependant, il s'agit d'un livre lourd très important et d'un manuel de référence. Si vous avez un problème avec Insomnia, prenez-le au lit avec vous. Cela de côté si vous êtes un programmeur UNIX C, c'est un must.

2
xenoterracide