Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 2494|Répondre: 1

[Pourboires] Deux ou trois choses à propos de Shared Memory

[Copié le lien]
Publié sur 23/07/2024 14:50:48 | | | |
Participer au déplacement d’un ancien système, où la mémoire partagée est utilisée pour communiquer entre processus (par exemple, appeler le service fenêtre, ASP.NET), et il est contraint de comprendre l’importance de cette technologie. Technologie impopulaire des développeurs NET, notes spéciales.

[Qu’est-ce que la mémoire partagée ?] 】
Il existe un terme pour la communication interprocessus, Interprocess Communictaion (IPC), qui propose les options suivantes sur la plateforme Windows : Référence :La connexion hyperlientérée est visible.

Presse-papiers
Le programme A colle le contenu dans le clipboard, et le programme B récupère le contenu depuis le clipboard.
COM
OLE Compound Document permet d’intégrer des fichiers Word dans des feuilles Excel, et Excel peut être appelé pour modification en deux clics.
Copie des données
Le programme A envoie WM_COPYDATA messages au programme B dans le format convenu
DDE
DDE est un protocole de communication qui permet à différentes applications d’échanger des données sous différents formats, ce qui peut être considéré comme une extension du presse-presse, et peut être transféré en continu en plus des transferts ponctuels. (Performance relativement médiocre, plus recommandée)
Cartographie des fichiers
La correspondance de fichiers fait référence à la simulation d’un fichier comme un morceau de mémoire dans un processus, lorsque plusieurs applications échangent des données via un mappage de fichiers partagé, appelé mémoire partagée nommée, qui est la meilleure performance parmi les différentes méthodes IPC, mais doit être empêchée par des mécanismes de synchronisation tels que Mutex.
Emplacements de courrier
Communication unidirectionnelle, le client Mailslot envoie des messages au serveur Mails, et les messages sont supprimés après avoir été lus par le serveur, ce qui permet la transmission intermachine, et peuvent également être diffusés un-à-plusieurs. (La longueur du message diffusé est limitée à 400 octets, et la longueur du message est déterminée par le serveur Mailslot lorsqu’il est établi pour une transmission un à un)
Tuyaux
La transmission bidirectionnelle est divisée en tuyau anonyme et tuyau nommé. Anonymous Pipe est généralement utilisé pour l’orientation standard entrée/sortie entre le programme parent et le programme enfant, et deux pipes doivent être construites pour la communication bidirectionnelle, qui ne peut pas se faire à travers le réseau et est limitée aux processus ayant des relations dépendantes. Named Pipe peut être utilisé pour échanger des données entre n’importe quel processus et supporter le transfert de processus interréseau.
RPC
L’appel de procédure à distance (RPC) permet aux applications d’appeler des fonctions fournies par d’autres applications et peut être appelé à travers des réseaux. Windows RPC est conforme à la norme ISO DCE et supporte l’intégration inter-systèmes d’exploitation.
Prises Windows
Interface de communication abstraite basée sur TCP/IP ou d’autres protocoles réseau, et l’échange de données s’effectue via des connexions réseau à la couche inférieure.
La mémoire partagée est une méthode d’échange de données courante utilisée par les développeurs C/C++ (Google peut trouver de nombreux exemples d’IPC implémentés avec la mémoire partagée sous Linux), c’est pourquoi les développeurs C/C++ la choisissent souvent comme canal de communication sur la plateforme Windows.

【Exercice pratique de mémoire partagée】
Bien qu’il y ait moins de personnes qui l’utilisent, .NET possède un espace de noms intégré System.IO.MemoryMappedFiles, il n’est pas difficile de jouer à la Shared Memory, presque comme les fichiers d’exploitation, tant que vous avez de l’expérience dans les opérations liées au FileStream, vous pouvez commencer rapidement, consultez l’exemple MSDN, j’ai écrit un mini-exercice de programme.La connexion hyperlientérée est visible.

J’ai écrit deux programmes, ProcessA, pour créer un espace de 1024 octets avec MemoryMappedFile.CreateNew() et m’entraîner à passer et à attraper avec l’autre ProcessB. Comme 1024 octets sont partagés entre deux programmes, je prévois que les premiers 512 soient écrits par ProcessA sur ProcessB et les 512 derniers par ProcessB pour ProcessB lu par ProcessA, et le programme utilise CreateViewStream pour transmettre l’adresse de départ et la longueur afin de pointer vers sa propre zone. Pour éviter les conflits de lecture/écriture lorsque ProcessA et ProcessB accèdent au MemoryMappedFile, j’utilise le verrou Mutex pour contrôler qu’un seul Processus peut accéder au MemoryMappedFile à la fois. Le processus de test crée un fichier MemoryMappedFile pour ProcessA, écrit la chaîne de messages – > ProcessB lit la chaîne de messages et écrit la chaîne de réponse – > ProcessA lit la chaîne de réponse et se termine.

La procédure ProcessA est la suivante :

La procédure ProcessB est la suivante :

Le test a été un succès !



【Conseils complémentaires】

1. Comment puis-je visualiser le fichier MemoryMappedFile actuellement activé sous Windows ?

SystemInternals dispose d’un outil AccessChk qui liste tous les fichiers, dossiers, registres, objets et services Windows accessibles à Windows. MemoryMappedFile est un objet Windows, et vous pouvez utiliser la commande suivante pour lister tous les objets et les archiver
accesschk -osv > e :\objList.txt
Cherchez le nom de MemoryMappedFile dedans, et s’il existe, vous pouvez voir un enregistrement similaire à ce qui suit :
\Sessions\1\BaseNamedObjects\FIL SOMBRE
  Type : Section
  Niveau moyen obligatoire (par défaut) [Sans réponse]
  RW NT/AUTORITÉ/SYSTÈME
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Téléchargement de l’outil AccessChk :La connexion hyperlientérée est visible.

2. Le préréglage MemoryMappedFile est activé dans la session de l’utilisateur, et le préréglage ne peut pas être utilisé entre les sessions. Par exemple, si deux ASP.NET appartenant à des AppPools différents ont des identités d’exécution différentes, même si le nom MemoryMappedFile est identique, il s’agit tout de même d’une copie de chaque, il est donc nécessaire de confirmer que l’identité d’exécution utilisée par les deux parties est la même.

3. Pour communiquer entre différentes identités d’exécution, le MemoryMappedFile peut être nommé « Global\ Filename » (notez que le cas de Global est différent, j’ai marché sur le tonnerre qui a été erronément écrit comme GLOBAL path est invalide), afin qu’il puisse être consulté entre les identités d’exécution.
Cependant, il convient de noter que les processus autres que la Session 0 (Windows Service) doivent avoir la permission SeCreateGlobalPrivilege pour créer un Global\... MemoryMappedFile。 (Fichier MSDN)
Pour la Session 0, vous pouvez vous référer à cet article de MVP de l’autre côté - Penetrating Session 0 Isolation (1) (La connexion hyperlientérée est visible.Il y a une introduction très détaillée.

Réimprimé depuis :La connexion hyperlientérée est visible.





Précédent:Problème de chargement statique des ressources d’image Angular 18
Prochain:Obtenez un aperçu rapide de la structure du contenu des fichiers Bootstrap 5
 Propriétaire| Publié sur 10/08/2024 21:36:57 |
.NET/C# implémente un single de programme basé sur Mutex et MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com