web-dev-qa-db-fra.com

Quelle est la différence entre Shell, Kernel et API

Je veux comprendre comment cela s'applique à un système d'exploitation et aussi à ces choses qui ne sont pas en fait des systèmes d'exploitation. Je ne peux pas comprendre la différence entre les trois et leur essence. L'API est les fonctions que nous pouvons appeler mais qu'est-ce que Shell? Si nous avons une API, quel est exactement le noyau du système d'exploitation? Je comprends qu'un système d'exploitation a un noyau qui ne changera pas et ce noyau fait le travail fondamental d'un système d'exploitation typique alors que nous pouvons avoir différentes interfaces utilisateur comme l'interface graphique ou la ligne de commande avec le même noyau. Donc, le problème est que je ne comprends pas comment ces choses sont différentes. Aaaaaaarhg!

Les fonctions comme printf et fopen en C peuvent-elles être appelées appels API?

19
quantum231
  • A Shell est un interpréteur de commandes, c'est-à-dire le programme qui traite la commande que vous entrez dans votre émulateur de terminal (mode interactif) ou traite les scripts Shell (fichiers texte contenant des commandes) (mode batch). Au début d'Unix, c'était le moyen unique pour les utilisateurs d'interagir avec leurs machines. De nos jours, les environnements graphiques remplacent le Shell pour la plupart des utilisateurs occasionnels.

  • A kernel est un programme de bas niveau s'interfaçant avec le matériel (CPU, RAM, disques, réseau, ...) au dessus duquel s'exécutent les applications. Il s'agit du programme de niveau le plus bas exécuté sur les ordinateurs, mais avec la virtualisation, vous pouvez avoir plusieurs noyaux exécutés sur des machines virtuelles qui s'exécutent elles-mêmes sur un autre système d'exploitation.

  • Un API est un terme générique définissant l'interface que les développeurs doivent utiliser lors de l'écriture de code à l'aide de bibliothèques et d'un langage de programmation. Les noyaux n'ont pas d'API car ils ne sont pas des bibliothèques. Ils ont un ABI , qui, au-delà d'autres choses, définit comment les applications interagissent avec elles via les appels système. Les développeurs d'applications Unix utilisent la bibliothèque C standard (par exemple: libc, glibc) pour créer des binaires conformes à ABI. printf(3) et fopen(3) ne sont pas des wrappers pour les appels système mais des fonctionnalités standard de (g)libc. Les appels système de bas niveau qu'ils utilisent finalement sont write(2) et open(2) et peut-être d'autres comme brk, mmap. Le nombre entre parenthèses est une convention pour indiquer dans quel manuel la commande doit être trouvée.

Le premier volume des pages de manuel Unix contient les commandes Shell.

Le second contient l'appel système wrappers comme write et open. Ils forment l'interface avec le noya.

La troisième contient la bibliothèque standard (y compris la norme Unix [[# ~] api [~ # ~]) fonctions (à l'exclusion des appels système) comme fopen et printf. Ce sont pas des wrappers pour des appels système spécifiques mais juste du code en utilisant des appels système lorsque cela est nécessaire.

27
jlliagre

Le shell est le moyen de communiquer avec le système d'exploitation et le noyau par ligne de commande. Le Shell le fait en appelant également l'API. Le noyau est en effet le cœur de l'OS et gère la mémoire, la planification des tâches, les manipulations avec les systèmes de fichiers, la gestion des E/S, ... Toutes les choses que le noyau fait, peuvent en quelque sorte être invoquées par l'API fournie par l'OS.

printf et fopen sont enroulés autour des appels système (API) fournis par le système d'exploitation et le noyau

6
hamon

Shell: C'est comme une interface de ligne de commande pour votre système d'exploitation. Des commandes telles que ls, ps, kill et bien d'autres peuvent être utilisées pour demander de terminer l'opération spécifique au système d'exploitation. C'est comme "cmd" sur windows.

Noyau: c'est le code principal de tout système d'exploitation. Toute demande que vous faites sur Shell ou via l'interface graphique (comme l'allocation de mémoire, l'ouverture d'un fichier, etc.) est finalement satisfaite par le noyau.

Et oui, les appels que vous avez mentionnés sont considérés comme des appels API. La demande de ces appels est également gérée par Kernel. Veuillez cliquer sur le lien ci-dessous pour trouver les appels d'API sous Unix. http://www.mkssoftware.com/docs/api_index.asp

C'est l'image globale dans un os unix:

Applications => (Shell + routines de bibliothèque) => appels système => noyau

regardez le dernier gestionnaire de requêtes est le noyau. THX!

4
rahul

Prenons un exemple, vous regardez le film sur Shell et le processus réellement effectué sur le matériel est le noya. Shell fonctionne approximativement comme celui de l'OS pour l'interface utilisateur et le logiciel et noya fonctionne comme celui de l'OS pour le logiciel et le matériel.

1
Sanket