recherche
MaisonOpération et maintenanceexploitation et maintenance LinuxExplication détaillée des opérations sur les fichiers dans la programmation serveur

Tout sous le système Linux est un fichier. Toutes les couches sous-jacentes sont protégées via le mécanisme du système de fichiers virtuel (VFS). Les utilisateurs peuvent utiliser différents pilotes via une interface unifiée. Le descripteur de fichier est appliqué à ce moment. Le descripteur de fichier est similaire au handle sous Windows. La plupart des opérations sur le fichier sont effectuées via ce descripteur, comme la lecture et l'écriture. Pour chaque descripteur de fichier, le noyau utilise trois structures de données pour le gérer.

(1) Chaque processus a une entrée d'enregistrement dans la table des processus, et chaque entrée d'enregistrement a une table de descripteurs de fichiers ouverte, qui peut être traitée comme un vecteur , chaque descripteur occupe une entrée. À chaque descripteur de fichier est associé :

 (a) Indicateur de descripteur de fichier. (Actuellement, un seul indicateur de descripteur de fichier FD_CLOEXEC est défini)

 (b) Pointeur vers une entrée de table de fichiers.

(2) Le noyau maintient une table de fichiers pour tous les fichiers ouverts. Chaque entrée de la table de fichiers contient :

  (a) Indicateur d'état du fichier (lecture, écriture, ajout-écriture, synchronisation, non bloquant, etc.).

 (b) Déplacement actuel du fichier. (C'est-à-dire la valeur opérée par la fonction lseek)

 (c) Pointeur vers l'entrée du nœud v du fichier.

(3) Chaque fichier ouvert (ou périphérique) a une structure de nœuds v. Le nœud v contient le type de fichier et les informations de pointeur des fonctions qui effectuent diverses opérations sur ce fichier. Pour la plupart des fichiers, le nœud v contient également le nœud i (nœud d'index) du fichier. Ces informations sont lues du disque vers la mémoire lorsque le fichier est ouvert, de sorte que toutes les informations sur le fichier sont rapidement disponibles. Par exemple, l'i-node contient le propriétaire du fichier, la longueur du fichier, le périphérique sur lequel réside le fichier, un pointeur vers les blocs de données réels utilisés par le fichier sur le disque, etc.

Après l'encapsulation à trois couches du système de fichiers ci-dessus, chaque couche est responsable de différentes responsabilités, de haut en bas en bas, la première couche est utilisée pour identifier les fichiers, la deuxième couche est utilisée pour gérer les données indépendantes du processus et la troisième couche gère les métadonnées du système de fichiers et est directement associée à un fichier. L’un des avantages de cette idée en couches est que la couche supérieure peut réutiliser la structure de la couche inférieure. Il peut y avoir plusieurs entrées de descripteur de fichier pointant vers la même entrée de table de fichiers, et plusieurs entrées de table de fichiers pointant vers le même nœud V.

Si deux processus indépendants ouvrent le même fichier, chaque processus qui ouvre le fichier obtiendra une entrée de table de fichiers, mais les pointeurs de nœud V des deux entrées de table de fichiers pointent vers le même V nœud, cette disposition permet à chaque processus d'avoir son propre déplacement actuel du fichier et prend en charge différentes méthodes d'ouverture (O_RDONLY, O_WRONLY, ORDWR).

Lorsqu'un processus crée un processus enfant via fork, les descripteurs de fichiers dans les processus parent et enfant partagent la même entrée de table de fichiers, c'est-à-dire les descripteurs de fichiers du parent et processus enfants pointant dans la même direction. Généralement, nous fermerons le fd dont nous n'avons pas besoin après fork. Par exemple, lorsque les processus parent et enfant communiquent via un tube ou une paire de sockets, ils fermeront souvent la fin qu'ils n'ont pas besoin de lire (ou d'écrire). Ce n'est que lorsqu'il n'y a pas de descripteur de fichier faisant référence à l'entrée de fichier actuelle que l'opération de fermeture détruit en fait la structure de données de l'entrée de fichier actuelle, ce qui est quelque peu similaire à l'idée du comptage de références. C'est également la différence entre les fonctions de fermeture et d'arrêt dans la programmation réseau. La première ne se déconnecte véritablement que lorsque le dernier processus utilisant le handle de socket est fermé, tandis que la seconde déconnecte directement un côté de la connexion sans aucune discussion. Cependant, dans un environnement multithread, puisque les threads parent et enfant partagent l'espace d'adressage, les descripteurs de fichiers sont détenus conjointement et il n'y a qu'une seule copie, vous ne pouvez donc pas fermer le fd dont vous n'avez pas besoin dans le thread, sinon il entraînera la fermeture d'autres fichiers nécessitant la fermeture du fd. Les threads seront également affectés. Étant donné que les descripteurs de fichiers ouverts dans les processus parent et enfant partagent la même entrée de table de fichiers, dans la programmation serveur de certains systèmes, si le modèle preforking est utilisé (le serveur pré-dérive plusieurs processus enfants, et chaque processus enfant écoute listeningfd pour accepter la connexion) Cela entraînera l'apparition du phénomène de troupeau tonitruant. Plusieurs sous-processus dérivés du serveur acceptent chaque appel et sont donc mis en veille. Lorsque la première connexion client arrive, même si un seul processus obtient la connexion, tous les processus. sont réveillés, ce qui entraîne une baisse des performances. Voir UNP P657.

En même temps, si exec est appelé après fork, tous les descripteurs de fichiers continueront à rester ouverts. Cela peut être utilisé pour transmettre certains descripteurs de fichiers au programme après l'exécution. En même temps, l'indicateur de descripteur de fichier FD_CLOEXEC est une option utilisée pour conserver les descripteurs de fichiers ouverts lors de la fermeture de exec.

Vous pouvez également copier explicitement un descripteur de fichier via dup ou fcntl, et ils pointent vers la même entrée de table de fichiers. Copiez le descripteur de fichier à la valeur spécifiée via dup2.

Chaque processus possède une table de descripteurs de fichiers, qui est indépendante entre les processus. Il n'y a pas de relation directe entre les descripteurs de fichiers entre les deux processus, la description du fichier peut donc être transmise directement dans le fichier. process., mais il perd son sens s'il est transmis à travers les processus. Unix peut transmettre des descripteurs de fichiers spéciaux via sendmsg/recvmsg (voir UNP Section 15.7). Les trois premiers descripteurs de fichiers de chaque processus correspondent à l'entrée standard, à la sortie standard et à l'erreur standard. Cependant, il existe une limite au nombre de descripteurs de fichiers pouvant être ouverts par un processus. S'il y a trop de descripteurs de fichiers ouverts, le problème « Trop de fichiers ouverts » se produira. Sur le serveur réseau, lorsque accept est appelé via Listenfd, une erreur EMFILE est générée principalement parce que le descripteur de fichier est une ressource importante du système. Le système limite la valeur par défaut du descripteur de fichier. un seul processus. Il s'agit de 1024 et peut être visualisé à l'aide de la commande ulimit -n. Bien sûr, vous pouvez également augmenter le nombre de descripteurs de fichiers de processus, mais il s'agit d'une solution temporaire plutôt que permanente, car lorsqu'il s'agit de services à haute concurrence, les ressources du serveur sont limitées et l'épuisement des ressources est inévitable.

Lorsqu'il est combiné avec la méthode de déclenchement horizontal d'epoll pour écouter les connexions lisenfd, un grand nombre de connexions socket inonderont la file d'attente des connexions TCP si elles ne sont pas traitées, et Listenfd générera toujours des événements lisibles. Pour mettre le serveur en attente, Chen Shuo, l'auteur de la bibliothèque réseau open source C++ muduo, utilise la méthode de préparation d'un descripteur de fichier inactif à l'avance. Lorsqu'une erreur EMFILE se produit, il ferme d'abord le fichier inactif et obtient un. quota de descripteur de fichier, puis l'accepte. Le descripteur de fichier d'une connexion socket est ensuite fermé immédiatement, déconnectant ainsi gracieusement la connexion du client, et enfin rouvrir le fichier inactif pour combler le "trou" au cas où cette situation se reproduirait.

 1 //在程序开头先”占用”一个文件描述符 2  3 int idlefd = open("/dev/null", O_RDONLY | O_CLOEXEC); 4 ………… 5  6 //然后当出现EMFILE错误的时候处理这个错误 7  8 peerlen = sizeof(peeraddr); 9 connfd = accept4(listenfd,  (struct sockaddr*)&peeraddr, &peerlen, SOCK_NONBLOCK | SOCK_CLOEXEC);10 11 if (connfd == -1)12 {13     if (errno == EMFILE)14     {15         close(idlefd);16         idlefd = accept(listenfd, NULL, NULL);17         close(idlefd);18         idlefd = open("/dev/null", O_RDONLY | O_CLOEXEC);19         continue;20     }21     else22         ERR_EXIT("accept4");23 }

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
Composants essentiels de Linux: expliqués pour les débutantsComposants essentiels de Linux: expliqués pour les débutantsApr 17, 2025 am 12:08 AM

Les composants principaux de Linux incluent le noyau, le système de fichiers, le shell et les outils communs. 1. Le noyau gère les ressources matérielles et fournit des services de base. 2. Le système de fichiers organise et stocke les données. 3. Shell est l'interface permettant aux utilisateurs d'interagir avec le système. 4. Les outils courants aident à effectuer des tâches quotidiennes.

Linux: un regard sur sa structure fondamentaleLinux: un regard sur sa structure fondamentaleApr 16, 2025 am 12:01 AM

La structure de base de Linux comprend le noyau, le système de fichiers et le shell. 1) Ressources matérielles de gestion du noyau et utiliser uname-R pour afficher la version. 2) Le système de fichiers EXT4 prend en charge les fichiers volumineux et les journaux et est créé à l'aide de MKFS.EXT4. 3) Shell fournit une interaction de ligne de commande telle que Bash et répertorie les fichiers à l'aide de LS-L.

Opérations Linux: Administration et maintenance du systèmeOpérations Linux: Administration et maintenance du systèmeApr 15, 2025 am 12:10 AM

Les étapes clés de la gestion et de la maintenance du système Linux incluent: 1) maîtriser les connaissances de base, telles que la structure du système de fichiers et la gestion des utilisateurs; 2) Effectuer la surveillance du système et la gestion des ressources, utilisez le haut, le HTOP et d'autres outils; 3) Utilisez des journaux système pour dépanner, utiliser JournalCTL et d'autres outils; 4) Rédiger des scripts automatisés et la planification des tâches, utilisez des outils CRON; 5) Implémentez la gestion et la protection de la sécurité, configurez les pare-feu via iptables; 6) Effectuer l'optimisation des performances et les meilleures pratiques, ajuster les paramètres du noyau et développer de bonnes habitudes.

Comprendre le mode de maintenance de Linux: l'essentielComprendre le mode de maintenance de Linux: l'essentielApr 14, 2025 am 12:04 AM

Le mode de maintenance Linux est entré en ajoutant init = / bin / bash ou paramètres uniques au démarrage. 1. Entrez le mode de maintenance: modifiez le menu Grub et ajoutez des paramètres de démarrage. 2. Remontez le système de fichiers en mode de lecture et d'écriture: Mount-Oremount, RW /. 3. Réparer le système de fichiers: utilisez la commande fsck, telle que FSCK / DEV / SDA1. 4. Sauvegardez les données et opérez avec prudence pour éviter la perte de données.

Comment Debian améliore la vitesse de traitement des données HadoopComment Debian améliore la vitesse de traitement des données HadoopApr 13, 2025 am 11:54 AM

Cet article examine comment améliorer l'efficacité du traitement des données Hadoop sur les systèmes Debian. Les stratégies d'optimisation couvrent les mises à niveau matérielle, les ajustements des paramètres du système d'exploitation, les modifications de configuration de Hadoop et l'utilisation d'algorithmes et d'outils efficaces. 1. Le renforcement des ressources matérielles garantit que tous les nœuds ont des configurations matérielles cohérentes, en particulier en faisant attention aux performances du CPU, de la mémoire et de l'équipement réseau. Le choix des composants matériels de haute performance est essentiel pour améliorer la vitesse de traitement globale. 2. Réglage des paramètres JVM: Ajustez dans le fichier hadoop-env.sh

Comment apprendre Debian SyslogComment apprendre Debian SyslogApr 13, 2025 am 11:51 AM

Ce guide vous guidera pour apprendre à utiliser Syslog dans Debian Systems. Syslog est un service clé dans les systèmes Linux pour les messages du système de journalisation et du journal d'application. Il aide les administrateurs à surveiller et à analyser l'activité du système pour identifier et résoudre rapidement les problèmes. 1. Connaissance de base de Syslog Les fonctions principales de Syslog comprennent: la collecte et la gestion des messages journaux de manière centralisée; Prise en charge de plusieurs formats de sortie de journal et des emplacements cibles (tels que les fichiers ou les réseaux); Fournir des fonctions de visualisation et de filtrage des journaux en temps réel. 2. Installer et configurer syslog (en utilisant RSYSLOG) Le système Debian utilise RSYSLOG par défaut. Vous pouvez l'installer avec la commande suivante: SudoaptupDatesud

Comment choisir la version Hadoop dans DebianComment choisir la version Hadoop dans DebianApr 13, 2025 am 11:48 AM

Lors du choix d'une version Hadoop adaptée au système Debian, les facteurs clés suivants doivent être pris en compte: 1. Stabilité et support à long terme: pour les utilisateurs qui poursuivent la stabilité et la sécurité, il est recommandé de choisir une version stable Debian, comme Debian11 (Bullseye). Cette version a été entièrement testée et a un cycle de support allant jusqu'à cinq ans, ce qui peut assurer le fonctionnement stable du système. 2. Package Mise à jour: Si vous avez besoin d'utiliser les dernières fonctionnalités et fonctionnalités Hadoop, vous pouvez considérer la version instable de Debian (SID). Cependant, il convient de noter que les versions instables peuvent avoir des problèmes de compatibilité et des risques de stabilité. 3. Soutien et ressources communautaires: Debian a un énorme soutien communautaire, qui peut fournir une documentation riche et

TiGervnc Partager Fichier Méthode sur DebianTiGervnc Partager Fichier Méthode sur DebianApr 13, 2025 am 11:45 AM

Cet article décrit comment utiliser TiGervnc pour partager des fichiers sur Debian Systems. Vous devez d'abord installer le serveur Tigervnc, puis le configurer. 1. Installez le serveur Tigervnc et ouvrez le terminal. Mettez à jour la liste des packages logiciels: SudoaptupDate pour installer le serveur TiGervnc: SudoaptInstallTiGervnc-standalone-servertigervnc-Common 2. Configurez le serveur TiGervnc pour définir le serveur VNC: VNCPasswd Démarrer le serveur VNC: VNCServer: 1-localHostNo

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP