Dans divers endroits , on peut voir le « peu collante » accusé d'être aujourd'hui un abus de langage complet, que sa fonctionnalité de nos jours est d'affecter les droits d'écriture sur les répertoires et agir en tant que suppression restreint drapeau.
Dans une réponse à AskUbuntu, le répondeur a écrit qu ' "un bit collant s'applique généralement aux répertoires" . J’ai observé que les systèmes modernes semblaient en pratique ne jamais l’appliquer à des fichiers, mais qu’il y a longtemps, il était d’ habitude de l’appliquer à des fichiers (programmes exécutables) plutôt qu’à des répertoires. (En ce qui concerne la rareté de l’utilisation moderne des fichiers, il existe une question connexe à la question suivante : le bit persistant n’est-il pas utilisé dans les systèmes de fichiers actuels ?)
Cela a suscité la question:
Qu'est - ce qu'un bit collant appliqué à un exécutable a fait? Était-ce alors comme setuid?
Notez le passé. Ce n'est pas Comment fonctionne le bit collant? maintenant. C'est comme ça que ça fonctionnait alors.
Réponses:
Non, le bit collant ne ressemblait pas aux indicateurs set-UID ou set-GID. Cela n'a eu aucune incidence sur le traitement des informations d'identification.
Le problème était de rendre le texte du programme "collant". Ce n'était pas un abus de langage, à l'origine.
arrière-plan: sections d'image de programme et texte partagé
Essentiellement, sans entrer trop dans les détails des formats de fichiers exécutables (qui peuvent et ont des livres pleins): les parties des fichiers d’image de programme qui sont directement chargées en mémoire pour exécuter des programmes comprennent le code valeurs de variables (non initialisées à zéro) et (sous une forme ou une autre) des espaces pour les variables initialisées à zéro et non initialisées.
Celles-ci sont regroupées dans des collections appelées "sections" et portent des noms conventionnels. Le code machine et (parfois) les constantes forment ce qu'on appelle souvent la section "texte" d'une image de programme. Les variables non initialisées à zéro sont, de même, la section "data"; et les variables initialisées à zéro et non initialisées sont "bss" (un nom qui a lui-même toute une histoire folklorique).
Lorsqu'un processus contient un fichier image exécutable du programme, les différentes parties - texte, données et bss - sont initialisées à partir du contenu du fichier image.
La particularité de la section "texte" est que le code machine (et les constantes) n'est presque toujours pas écrit. Il a le potentiel d'être partagé sur les images de mémoire virtuelle de tous les processus en cours d'exécution contenant ce fichier image exécutable. Le scénario exact dans lequel le texte du programme peut être partagé est hors de portée pour cette réponse et implique des éléments tels que l'idempotence de la correction du chargeur et l'identité de la présentation de l'espace d'adressage. Les gens peuvent et ont écrit des livres sur ce sujet aussi. ☺
Le texte partagé est une optimisation employée par le noyau. Il supprime la nécessité pour chaque instance d'une image de programme en cours d'exécution d'avoir sa propre image de mémoire, consommant ainsi une mémoire physique précieuse avec plusieurs copies du même code machine (et des mêmes constantes).
texte collant
Mais on peut faire mieux encore que le texte partagé. Évidemment, si au moins un processus en cours d'exécution utilise une image de programme de texte partagé particulière, le noyau doit simplement attacher l'espace de mémoire virtuelle des nouveaux processus au segment de texte partagé existant lorsqu'une nouvelle instance du programme est exécutée. Il y a presque toujours une instance de (disons)
/bin/login
ou/bin/sh
fonctionnant quelque part sur un système de taille moyenne, de sorte que les nouvelles instances du programme de connexion ou le shell par défaut peuvent simplement se connecter aux copies chargées de leurs segments de texte que le noyau a déjà chargées en mémoire.Sticky text étend cette idée à la programmation d'images qu'aucun processus n'est en cours d'exécution . Si un fichier image exécutable est marqué comme texte collant, le noyau conserve son segment de texte après le dernier processus d'utilisation; en espérant qu'une autre instance du programme s'exécutera bientôt et pourra simplement se rattacher au segment.
Au début de Unices, les segments de texte collants chargés étaient échangés en stockage d'échange lorsqu'aucun processus n'y était associé. (Les Unices ultérieurs ont arrêté d'utiliser swap pour cela.) Vous avez peut-être aussi entendu parler de cela sous le nom texte enregistré .
Bien sûr, il est important de définir le bit de texte collant sur une image de programme avec précaution. Les programmes qui en bénéficient dépendent de l’utilisation généralement faite de la machine. Et les segments de texte actuellement non attachés utilisent les ressources du noyau, ce qui signifie qu'il y a une limite pratique au nombre de personnes pouvant en avoir dans n'importe quel système. C'est donc généralement une opération qui nécessite des privilèges de superutilisateur.
désuétude
Il y a toute une série d'hypothèses qui sous-tendent le fonctionnement du texte persistant, qui ne sont tout simplement plus vraies. La lecture d'un segment prédéfini à partir d'un stockage d'échange n'est pas nécessairement plus rapide qu'une simple pagination à la demande à partir du fichier image exécutable réel. Les formats de système de fichiers sont devenus meilleurs pour les modes de lecture aléatoires (par opposition aux modes de lecture séquentiels). L'avènement de la pagination à la demande elle-même change les choses, tout comme des tâches telles que les caches unifiés, les corrections externes non idempotentes résultant de différences dans la recherche de bibliothèque partagée et la randomisation de la disposition des espaces d'adressage.
L'époque des bits de texte collants pour les images de programmes exécutables est révolue. Un indicateur de marqueur de texte collant explicite pour des images de programme exécutables a été considéré comme obsolète par les auteurs de 4.3BSD au milieu des années 1980, par exemple.
Lectures complémentaires
la source
TSR
le nom de DOS: "terminer et rester résident". Cependant, c'était généralement pour des choses comme les pilotes de périphériques que d'autres processus exécutés plus tard ont besoin d'appeler, et probablement obsolète lorsque le monde est passé à un système d'exploitation multi-thread / multi-processus.bss
?CODE
segments (et sur les segments OS / 2 en lecture seuleDATA
) des fichiers EXE et DLL sont (généralement) partagés par tous les programmes en cours d'exécution. Il n’existe pas d’équivalent réel de "rigidité", en partie parce que les modes 32 bits OS / 2 version 2.x et 386 en mode étendu remplaçaient la permutation de segments par la mémoire virtuelle paginée à la demande, comme l’avait déjà fait le monde Unix plusieurs années auparavant, dans les deux domaines du besoin de coller de segmentation de la même manière.