Maison >php教程 >PHP开发 >Mécanisme Device Mapper dans le noyau du système Linux (1) (3)

Mécanisme Device Mapper dans le noyau du système Linux (1) (3)

黄舟
黄舟original
2016-12-23 14:08:031541parcourir

3. La commande de l'espace utilisateur appelle la fonction table_load via ioctl. Cette fonction construit la table de mappage du périphérique mappé spécifié et du périphérique cible mappé en fonction des paramètres transmis depuis l'espace utilisateur. Cette fonction construit d'abord les structures dm_table et dm_target correspondantes, puis appelle la fonction dm_table_add_target dans dm-table.c pour initialiser ces structures en fonction des paramètres transmis par l'utilisateur, et appelle la fonction de construction ctr du type de cible correspondant en fonction du type de cible spécifié par les paramètres. Construisez la structure correspondant au périphérique cible dans la mémoire, puis mettez à jour le B-tree conservé dans dm_table en fonction de la structure dm_target établie. Une fois le processus ci-dessus terminé, ajoutez le dm_table créé à la structure hash_cell correspondant à la table de hachage globale du périphérique mappé.

4. Enfin, appelez la fonction do_resume via ioctl pour établir la relation de liaison entre le périphérique mappé et la table de mappage. En fait, le processus consiste à attribuer la valeur actuelle du pointeur de structure dm_table au champ de carte correspondant de. mapped_device via la fonction dm_swap_table, puis modifiez ensuite le champ mapped_device indiquant l'état actuel.

Grâce aux quatre étapes principales ci-dessus, le mappeur de périphériques crée un périphérique de bloc logique de périphérique mappé dans le noyau qui peut être fourni aux utilisateurs.

Flux IO

La fonction essentielle du mappeur de périphérique est de transmettre les requêtes IO du périphérique logique mappé au périphérique cible correspondant en fonction de la relation de mappage et des règles de traitement IO décrites par la cible. conducteur. Le mappeur de périphérique gère toutes les requêtes d'E/S de lecture et d'écriture de bloc dirigées vers le périphérique mappé à partir des interfaces generic_make_request et submit_bio du sous-système d'E/S au niveau bloc dans le noyau. Les demandes d'E/S sont traitées de haut en bas dans l'arborescence des périphériques du mappeur de périphériques via le transfert de demandes. Lorsqu'une demande biologique est transmise au périphérique mappé dans l'arborescence des périphériques, un ou plusieurs clones biologiques sont créés et envoyés au périphérique cible inférieur. Le même processus est ensuite répété à chaque niveau de l’arborescence des périphériques. Tant que l’arborescence des périphériques est suffisamment grande, ce processus de transfert peut théoriquement se poursuivre indéfiniment. À un certain niveau de l'arborescence des périphériques, une fois que le pilote cible a terminé une demande bio, il signale l'événement indiquant la fin de la demande bio à son périphérique mappé supérieur. Ce processus est effectué à chaque niveau jusqu'à ce que l'événement soit finalement téléchargé sur le périphérique mappé. Jusqu'à présent, le mappeur de périphérique met fin à la demande biologique d'origine sur le périphérique mappé racine et met fin à l'ensemble du processus de demande d'E/S.

Lorsque Bio transmet couche par couche dans l'arborescence des périphériques du mappeur de périphériques, il est finalement transmis à un ou plusieurs nœuds cibles feuilles et se termine. Étant donné qu'une requête bio ne peut pas s'étendre sur plusieurs périphériques cibles (c'est-à-dire des segments d'espace physique), à ​​chaque niveau, le mappeur de périphérique clone un ou plusieurs bios en fonction des informations de mappage cible du périphérique mappé notifiées à l'avance par l'utilisateur et désassemble le bios. bios. Après avoir été divisé, il est transmis au périphérique cible correspondant. Ces bios clonés sont d'abord transmis au pilote cible correspondant sur le périphérique mappé pour traitement. Les demandes d'E/S sont filtrées et traitées selon les règles de traitement d'E/S définies dans le pilote cible, puis soumises au périphérique cible pour achèvement. Le processus ci-dessus est terminé dans la fonction dm_request du fichier dm.c. Le pilote cible peut traiter ces bios comme suit :

1. Mettez ces bios en file d'attente dans le pilote pour un traitement ultérieur

2. Redirigez les bios vers un ou plusieurs appareils cibles ou différents secteurs sur chaque cible ; périphérique ;

3. Renvoie l'état d'erreur au mappeur de périphérique.

La requête IO est traitée couche par couche dans l'arborescence des périphériques illustrée à la figure 2 selon le processus décrit ci-dessus jusqu'à ce que la requête IO soit terminée.

Résumé

Le mappeur de périphériques fournit une architecture de mappage des périphériques logiques aux périphériques physiques dans le noyau. Tant que l'utilisateur formule la stratégie de mappage dans l'espace utilisateur, il peut écrire les détails du traitement en fonction. à ses propres besoins. Le plug-in du pilote cible pour les requêtes IO peut facilement implémenter un gestionnaire de volumes logique similaire à LVM. Le mappeur de périphérique fournit des interfaces externes sous la forme d'ioctl. Les utilisateurs utilisent la bibliothèque de mappeur de périphérique dans l'espace utilisateur pour envoyer des commandes ioctl au périphérique de caractères du mappeur de périphérique afin d'effectuer la communication entrante. Il fournit également un mécanisme de notification d'événements souhaités via ioctl, permettant au pilote cible de transmettre certains événements liés aux E/S à l'espace utilisateur.

Ce qui précède est le contenu du mécanisme Device Mapper (1) (3) dans le noyau du système Linux. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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