Dans les systèmes d'exploitation de type Unix, les appels système sont identifiés par des numéros uniques. Ceux-ci sont appelés numéros d'appel système. ou parfois simplement des numéros de système . Ce sont essentiellement des index dans une table d'appels système au sein du noyau. Lorsqu'un programme effectue un appel système (par exemple, « open », « read », « write », « fork »), il n'utilise pas directement le nom de la fonction; à la place, il utilise le numéro d'appel système correspondant. Le noyau utilise ensuite ce numéro pour rechercher la fonction correcte à exécuter.
Voici un aperçu de leur importance :
* Efficacité : L'utilisation de nombres est plus efficace que l'utilisation de chaînes (comme les noms de fonctions). Les recherches de numéros sont beaucoup plus rapides que les recherches de chaînes.
* Abstraction : Ils fournissent un niveau d’abstraction. L'interface d'appel système est cohérente quels que soient les détails d'implémentation spécifiques de chaque fonction d'appel système.
* Portabilité (avec mises en garde) : Bien que les *numéros* d'appel système eux-mêmes ne soient pas nécessairement portables sur différents systèmes de type Unix (par exemple, Linux, macOS, BSD), les *noms* des appels système le sont souvent (bien que leur comportement puisse présenter des différences subtiles). Les fichiers d'en-tête fournissent un mappage entre les noms symboliques et les numéros d'un système spécifique. Vous utiliserez généralement les noms symboliques dans votre code, en vous appuyant sur le compilateur et l'éditeur de liens pour les résoudre en numéros d'appel système corrects.
* Sécurité : L'utilisation directe des numéros d'appel système offre moins de protection que l'utilisation d'une bibliothèque ou d'une API bien vérifiée ; une utilisation incorrecte peut entraîner des pannes du système ou des failles de sécurité. Par conséquent, l’utilisation des noms symboliques est presque toujours préférable.
Comment ils sont utilisés : Un programme n'utilise généralement pas directement les numéros d'appel système. Au lieu de cela, il utilise une interface d'appel système (souvent fournie par une bibliothèque C), qui gère la traduction du nom de fonction en numéro. Les fichiers d'en-tête (comme « unistd.h » en C) définissent des constantes symboliques pour chaque appel système, permettant aux programmeurs d'écrire du code portable en utilisant ces noms symboliques. Le compilateur et l'éditeur de liens se chargent de mapper ces symboles aux numéros d'appel système appropriés lors de la compilation et de la liaison.
En résumé, les numéros d'appel système sont des identifiants de bas niveau utilisés par le noyau pour distribuer les appels système, offrant efficacité et couche d'abstraction aux programmeurs qui autrement auraient besoin de travailler directement avec les interfaces du noyau, une tâche généralement laissée aux rédacteurs de bibliothèques et au système d'exploitation lui-même.
|