9
votes

Pourquoi devrais-je minimiser l'utilisation de l'appel du système dans mon code?

Je voulais savoir s'il y a une raison quelconque de minimiser l'utilisation de l'appel du système dans le code et de l'alternative de n'utiliser pas l'appel du système, on dirait utiliser API mais API à tour d'objet Utilisez un appel système

est-ce vrai ??


0 commentaires

4 Réponses :


18
votes

Étant donné que la plupart des appels système ont une surcharge inhérente. Un appel système est un moyen de tarauder dans le noyau, une passerelle contrôlée vers l'obtention d'un service.

Lorsque vous effectuez un appel système, certaines actions sont prises (avertissement, c'est une simplification):

  • Vous invoquez une fonction de bibliothèque (wrapper)
  • La fonction met les arguments où ils sont attendus. De plus, la fonction met le numéro de l'appel du système dans eAx
  • La fonction appelle un piège ( int 0x80 ou autre)
  • Le processeur est basculé en mode noyau
  • Le noyau invoque certains system_call routine
  • Les registres sont enregistrés sur la pile du noyau
  • Les arguments sont vérifiés pour être valides
  • l'action est effectuée
  • Les registres sont restaurés de la pile de noyau
  • Le processeur est renvoyé en mode utilisateur
  • la fonction (enfin ...) retourne

    Et j'ai probablement oublié certaines des étapes. Cela ne semble-t-il pas comme beaucoup de travail ? Tout ce que vous vouliez, c'est la partie audacieuse. Le reste est au-dessus de la tête.


3 commentaires

Mais que se passe-t-il quand une API est appelée, nous devons travailler plus ??


Une autre chose si nous omettons que l'utilisation de l'appel système serait complètement capable de faire tout travail ??


@Amit quand une fonction normale est appelée le noyau n'est pas nécessaire d'être impliqué. Vous pouvez simplement considérer que seule la partie audacieuse est effectuée. Par exemple, si vous avez une fonction qui ajoute deux chiffres, il n'y a aucune raison de piéger en mode noyau.



1
votes

a appel système exige que le système passe du mode utilisateur sur mode du noyau . Cela rend les appels de systèmes coûteux.

Un article pour mieux comprendre cela:

  1. Comprendre le mode utilisateur et le noyau - Jeff Atwood

0 commentaires

0
votes

Premièrement, si vous utilisez un cadre ou des API (par exemple en utilisant WxWidgets au lieu de rendre les fenêtres manuellement, ou la bibliothèque GNU C), votre code est portable entre différents systèmes d'exploitation.

Deuxièmement, vous utilisez des API, vous n'aurez pas de problèmes si le fabricant modifie la manière dont le système d'exploitation fonctionne sous la hotte, car les API (doivent) être les mêmes qu'auparavant.


0 commentaires

0
votes

La seule raison pour laquelle les cames à mon esprit sont les problèmes de portabilité. Si vous utilisez des appels système, votre code ne fonctionnera que sur ce système d'exploitation. Et si vous devez compiler la même source à un autre système d'exploitation, vous aurez des problèmes, l'API peut être complètement différente.


0 commentaires