qu'est-ce que le handle Linux

青灯夜游
青灯夜游original
2022-02-25 13:39:455973parcourir

Sous Linux, un handle est un identifiant, qui est un identifiant de référence géré par le système. Le noyau peut utiliser le handle pour calculer l'adresse de l'objet fichier dans le noyau. Les développeurs peuvent effectuer des opérations arbitraires sur l'objet ; ils obtiennent le manche de l'objet.

qu'est-ce que le handle Linux

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.

Qu'est-ce qu'un handle ? Un handle est un identifiant Tant que nous obtenons le handle de l'objet, nous pouvons effectuer n'importe quelle opération sur l'objet. Un handle n'est pas un pointeur. Le système d'exploitation peut utiliser un handle pour trouver un morceau de mémoire. Ce handle peut être un identifiant, une clé de carte ou un pointeur. Cela dépend de la façon dont le système d'exploitation le gère. fd peut être considéré comme remplaçant les handles dans une certaine mesure ; Linux a des mécanismes correspondants, mais il n'existe pas de type de handle unifié. Différents types de ressources système sont identifiés par leurs types respectifs et exploités par leurs interfaces respectives.

Au niveau du système d'exploitation, les opérations sur les fichiers ont également un concept similaire à FILE. Sous Linux, cela s'appelle un descripteur de fichier (File Descriptor), et sous Windows, cela s'appelle un handle (Handle) (ci-après collectivement dénommé lorsque il n'y a pas d'ambiguïté) comme poignée). L'utilisateur ouvre le fichier via une certaine fonction pour obtenir un handle, puis l'utilisateur manipule le fichier via le handle.

Explication approximative

windows est handle, liunx est similaire à fd, dans le premier livre de développement Windows, handle est traduit par "handle". Même si cela ne sonne pas bien, je pense personnellement que c'est assez expressif. Bien que vous ne teniez que la poignée, vous pouvez tirer toute la porte et vous n'avez pas à vous soucier de l'apparence de la porte

Si une porte a plusieurs poignées et qu'elles sont tenues par différentes personnes (processus) , la porte sera difficile de dire où aller. La raison de la conception d'un tel handle est que le handle peut empêcher les utilisateurs de lire et d'écrire à volonté des objets fichier dans le noyau du système d'exploitation. Qu'il s'agisse de Linux ou de Windows, le descripteur de fichier est toujours associé à l'objet fichier du noyau, mais les détails de la manière dont il est associé ne sont pas visibles pour l'utilisateur. Le noyau peut calculer l'adresse de l'objet fichier dans le noyau via le handle, mais cette capacité n'est pas ouverte aux utilisateurs.

Gérer dans Liunx

Dans la conception du système Linux, nous suivons le principe selon lequel tout est un fichier, c'est-à-dire les fichiers disque, les répertoires, les sockets réseau, les disques, les tuyaux, etc., ce sont tous des fichiers , dans notre Lors de l'ouverture, un fd sera renvoyé, qui est le descripteur de fichier. Si vous ouvrez fréquemment des fichiers ou ouvrez une prise réseau et oubliez de la libérer, la poignée fuira. Dans le système Linux, il existe une limite au nombre de descripteurs de fichiers qu'un processus peut appeler. Par défaut, le nombre maximum de descripteurs que chaque processus peut appeler est de 1024. Si cette limite est dépassée, le processus ne sera pas exécuté. En conséquence, de nouveaux fichiers ou sockets réseau ne peuvent pas être ouverts et un déni de service se produit pour les serveurs en ligne.

Ce qui suit est un exemple pratique. Sous Linux, fd avec les valeurs ​​0, 1 et 2 représentent respectivement l'entrée standard, la sortie standard et la sortie d'erreur standard. Le fd obtenu en ouvrant le fichier dans le programme commence à croître à partir de 3.

Qu'est-ce que fd exactement ?

Dans le noyau, chaque processus a une "table de fichiers ouverts" privée. Cette table est un tableau de pointeurs, et chaque élément pointe vers un objet fichier ouvert du noyau.

Et fd est l'indice de ce tableau. Lorsque l'utilisateur ouvre un fichier, le noyau génère en interne un objet fichier ouvert, trouve un élément vide dans cette table, laisse cet élément pointer vers l'objet fichier ouvert généré et renvoie l'indice de cet élément sous la forme fd.

Étant donné que cette table est dans le noyau et n'est pas accessible aux utilisateurs, même si l'utilisateur dispose de fd, il ne peut pas obtenir l'adresse de l'objet fichier ouvert et ne peut l'utiliser que via les fonctions fournies par le système.

En langage C, le canal de manipulation des fichiers est la structure FILE. Il n'est pas difficile d'imaginer que la structure FILE en langage C doit avoir une relation biunivoque avec fd. Chaque structure FILE enregistrera sa propre correspondance unique. fd.

En programmation, une poignée est un pointeur intelligent spécial. Lorsqu'une application souhaite référencer des blocs de mémoire ou des objets gérés par d'autres systèmes (tels que des bases de données et des systèmes d'exploitation), des handles sont utilisés.

La différence entre un handle et un pointeur ordinaire est que le pointeur contient l'adresse mémoire de l'objet référencé, tandis que le handle est un identifiant de référence géré par le système, qui peut être déplacé vers une adresse mémoire par le système. Ce mode d'accès indirect aux objets améliore le contrôle du système sur l'objet référencé.

Dans la gestion de la mémoire des systèmes d'exploitation (tels que Mac OS et Windows) dans les années 1980, les poignées étaient largement utilisées. Les descripteurs de fichiers dans les systèmes Unix sont essentiellement des descripteurs. Comme d'autres environnements de bureau, l'API Windows utilise largement des handles pour identifier les objets dans le système et pour établir des canaux de communication entre le système d'exploitation et l'espace utilisateur. Par exemple, un formulaire sur le bureau est identifié par un handle de type HWND.

Aujourd'hui, l'augmentation de la capacité de mémoire et les algorithmes de mémoire virtuelle ont rendu les pointeurs plus simples plus populaires, tandis que les poignées qui pointent vers un autre pointeur sont tombées en disgrâce. Malgré cela, de nombreux systèmes d'exploitation font encore référence à des pointeurs vers des objets privés et des index de tableau internes qu'un processus transmet au client en tant que descripteurs.

Recommandations associées : "Tutoriel vidéo Linux"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:qu'est-ce que Linux KVMArticle suivant:qu'est-ce que Linux KVM