Article de reference

Trampoline (informatique)

( Learn how and when to remove this message ) En programmation informatique , le mot trampoline a plusieurs significations et est généralement associé aux instructions de saut (...

(Learn how and when to remove this message)

En programmation informatique , le mot trampoline a plusieurs significations et est généralement associé aux instructions de saut (c'est-à-dire au déplacement vers différents chemins de code).

Programmation de bas niveau

Les trampolines (parfois appelés vecteurs de saut indirects ) sont des emplacements de mémoire contenant des adresses pointant vers des routines de service d'interruption , des routines d'E/S , etc. L'exécution saute dans le trampoline puis saute immédiatement, ou rebondit, d'où le terme trampoline . Ils ont de nombreuses utilisations :

  • Trampoline peut être utilisé pour surmonter les limitations imposées par une architecture d'unité centrale de traitement (CPU) qui s'attend à toujours trouver des vecteurs dans des emplacements fixes.
  • Lorsqu'un système d'exploitation est démarré sur une machine multiprocesseur symétrique (SMP), un seul processeur, le processeur d'amorçage, sera actif. Une fois que le système d'exploitation s'est configuré, il demandera aux autres processeurs de passer à un morceau de code trampoline qui initialisera les processeurs et attendra que le système d'exploitation commence à planifier les threads sur eux.

Programmation de haut niveau

  • Comme utilisé dans certaines implémentations Lisp , un trampoline est une boucle qui invoque de manière itérative des fonctions de retour de thunk ( style de passage de continuation ). Un seul trampoline suffit à exprimer tous les transferts de contrôle d'un programme ; un programme ainsi exprimé est trampoliné, ou dans le style trampoliné ; la conversion d'un programme en style trampoliné est trampoliné. Les programmeurs peuvent utiliser des fonctions trampolinées pour implémenter des appels de fonctions récursives de queue dans des langages de programmation orientés pile .
  • En Java , le trampoline fait référence à l'utilisation de la réflexion pour éviter d'utiliser des classes internes , par exemple dans les écouteurs d'événements. Le temps supplémentaire d'un appel de réflexion est échangé contre l'espace supplémentaire d'une classe interne. Les trampolines en Java impliquent généralement la création d'un GenericListener pour transmettre des événements à une classe externe.
  • Dans Mono Runtime , les trampolines sont de petits morceaux de code assembleur écrits à la main et utilisés pour effectuer diverses tâches.
  • Lors de l'interfaçage de morceaux de code avec des conventions d'appel incompatibles , un trampoline est utilisé pour convertir la convention de l'appelant en convention de l'appelé.
    • Dans les systèmes embarqués , les trampolines sont de courts extraits de code qui lancent d'autres extraits de code. Par exemple, plutôt que d'écrire des gestionnaires d'interruption entièrement en langage assembleur, une autre option consiste à écrire des gestionnaires d'interruption principalement en C et à utiliser un court trampoline pour convertir la convention d'appel d'interruption du langage assembleur en convention d'appel C.
    • Lors de la transmission d'un rappel à un système qui s'attend à appeler une fonction C , mais que l'on souhaite qu'il exécute la méthode d'une instance particulière d'une classe écrite en C++ , on utilise un court trampoline pour convertir la convention d'appel de fonction C en convention d'appel de méthode C++. Une façon d'écrire un tel trampoline est d'utiliser un thunk . Une autre méthode consiste à utiliser un listener générique .
  • En Objective-C , un trampoline est un objet renvoyé par une méthode qui capture et réifie tous les messages qui lui sont envoyés, puis « fait rebondir » ces messages sur un autre objet, par exemple dans la messagerie d'ordre supérieur .
  • Dans le compilateur GCC , trampoline fait référence à une technique d'implémentation de pointeurs vers des fonctions imbriquées lorsque l'option est activée. Le trampoline est un petit morceau de code qui est construit à la volée sur la pile lorsque l'adresse d'une fonction imbriquée est prise. Le trampoline met en place le pointeur de lien statique, qui permet à la fonction imbriquée d'accéder aux variables locales de la fonction englobante. Le pointeur de fonction est alors simplement l'adresse du trampoline. Cela évite d'avoir à utiliser des pointeurs de fonction « gros » pour les fonctions imbriquées qui portent à la fois l'adresse du code et le lien statique. Cela entre cependant en conflit avec le désir de rendre la pile non exécutable pour des raisons de sécurité.-ftrampolines
  • Dans le langage de programmation ésotérique Befunge , un trampoline est une instruction permettant de sauter la cellule suivante dans le flux de contrôle .

Piles sans exécution

Certaines implémentations de trampolines entraînent une perte de piles sans exécution (pile NX). Dans la collection de compilateurs GNU (GCC) en particulier, une fonction imbriquée construit un trampoline sur la pile au moment de l'exécution, puis appelle la fonction imbriquée via les données sur la pile. Le trampoline nécessite que la pile soit exécutable.

Les piles sans exécution et les fonctions imbriquées s'excluent mutuellement sous GCC. Si une fonction imbriquée est utilisée dans le développement d'un programme, la pile NX est silencieusement perdue. GCC propose un -Wtrampolinesavertissement pour signaler la condition.

Les logiciels conçus à l'aide d'un cycle de vie de développement sécurisé ne permettent souvent pas l'utilisation de fonctions imbriquées en raison de la perte des piles NX.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index