cours/content/progsys/1-introduction/index.md

3.8 KiB

title date tags categories
Programmation Système : Appels systèmes 2018-09-04
programmation
système
appels système
Programmation système
Cours

Qu'est ce que c'est?

C'est créer des programmes plutôt bas niveau qui s'interfacent avec le noyau et/ou les librairies du système. Il faut donc une bonne connaissance du fonctionnement du système et être en mesure d'identifier d'éventuels problèmes de performance.

Le système d'exploitation

C'est un ensemble de logiciels fournissant les services nécessaires à l'exécution de programmes pour l'utilisateur final :

  • exécution de programmes
  • accès aux matériels
  • accès au(x) système(s) de fichier(s)
  • accès mémoire
  • accès réseau

POSIX et IEEE

La norme POSIX, standard IEEE, définie les interfaces utilisateurs et logiciels, la ligne de commande standard et son interface de scripts, les entrées / sorties de base. les attributs de fichiers (permissions)

La norme SUS Single Unix Specification est une norme plus récente et moins contraignante. elle est basée sur les travaux de l'IEEE et de l'Open Group.

[SUS][https://fr.wikipedia.org/wiki/Single_UNIX_Specification] et [POSIX][https://fr.wikipedia.org/wiki/POSIX] sur Wikipedia

LSB

LSB ou Linux Standard Base définie l'agencement général du système GNU / Linux
librairies standard, commandes POSIX étendues, hiérarchie du système de fichiers, les runlevels etc.

LSB sur Wikipédia.

Architecture des systèmes "modernes"

Ils sont organisés en couches un peu à la façon du modèle OSI :

  1. le matériel
  2. l'assemblage (assembleur)
  3. système (applications système)
  4. Application
  5. (couche N) Les applications / machines virtuelles (capables de traverser les couches pour atteindre le matériel)

Plus la couche est basse, plus la programmation est efficace du point de vue des performances mais plus difficile est la portabilité (un code assembleurs et moins portable qu'un script Python)

Les systèmes modernes possèdent deux espaces d'exécutions :

  • l'espace utilisateur user-space ou user-land
  • l'espace noyau kernel-space ou kernel-land

La libc

La libc est la librairie standard des système GNU/ Linux, elle implémente les fonctionnalités de base pour la plupart des programmes. C'est une API pour accéder aux services du noyau :

  • entrées /sorties
  • allocation fine de la mémoire
  • gestion du temps
  • encapsulation des appels noyau et en dehors du noyau (user-land)

Programme et processus

Un programme est un fichier exécutable stocké sur un disque (mémoire morte). Un processus et un programme mais en mémoire (et donc en cours d'exécution). Un processus est défini par son identifiant (PID) et accède à un espace d'adressage en mémoire vive (pour la pile, les données ...)

Descripteurs de fichiers

Un descripteur de fichier pour file descriptor (abrégé fd) est un entier positif affecté par le noyau pour référencer un fichier utilisé par un processus. Il est bon de préciser que dans la philosophie Unix, tout est fichier, le fd se retrouve donc pour les fichiers, sockets, tubes, périphériques etc.

Les appels système

Ils permettent de demander au noyau de réaliser une action précise et se font au travers de la libc. Voici comment cela se passe :

  • Préparer les arguments en les positionnant dans des registres spécifiques pour le noyau
  • placer le numéro d'appel système dans un registre spécifique invoquer
  • l'instruction trap qui bascule le processeur en mode noyau

Le noyau invoque system_call après validation des arguments et retourne le résultat à la libc :

  • en cas d'erreur la libc invoque errno avec en résultat le code erreur
  • sinon le résultat