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
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.
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.
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.
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 ( .so
fichiers - 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
, read
et 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, /usr
peuvent 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.