Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 2494|Svar: 1

[Tips] To eller tre ting om delt hukommelse

[Kopier link]
Opslået på 23/07/2024 14.50.48 | | | |
Deltagelse i flytning af et gammelt system, hvor delt hukommelse bruges til at kommunikere på tværs af processer (f.eks. kalde Window Service ASP.NET), og tvinges til at forstå vigtigheden af denne teknologi. NET-udvikleres upopulære teknologi, særlige bemærkninger.

[Hvad er delt hukommelse?] 】
Der findes et udtryk for tværproceskommunikation, Interprocess Communictaion (IPC), som har følgende muligheder på Windows-platformen: Reference:Hyperlink-login er synlig.

Udklipsholder
Program A indsætter indholdet i udklipsholderen, og Program B henter indholdet fra udklipsholderen.
COM
OLE Compound Document tillader Word-filer at blive indlejret i Excel-arbejdsark, og Excel kan åbnes til redigering med to klik.
Datakopi
Program A sender WM_COPYDATA beskeder til Program B i det aftalte format
DDE
DDE er en kommunikationsprotokol, der tillader forskellige applikationer at udveksle data i forskellige formater, hvilket kan betragtes som en udvidelse af udklipsholderen og kan overføres kontinuerligt ud over engangsoverførsler. (Relativt dårlig ydeevne, ikke længere anbefalet)
Filkortlægning
Filmapping refererer til simulering af en fil som et stykke hukommelse i en proces, når flere applikationer udveksler data gennem delt filmapping, kaldet Named Shared Memory, hvilket er den bedste ydelse blandt forskellige IPC-metoder, men skal forhindres af synkroniseringsmekanismer som Mutex.
Postslots
Envejskommunikation, Mailslot-klienten sender beskeder til Mailslot Server, og beskederne slettes efter at være blevet læst af serveren, hvilket understøtter overførsel på tværs af maskiner og kan også sendes én-til-mange. (Længden af broadcast-beskeden er begrænset til 400 bytes, og længden af beskeden bestemmes af Mailslot-serveren, når den etableres til én-til-én transmission)
Rør
Tovejstransmission er opdelt i Anonym Pipe og Named Pipe. Anonymous Pipe bruges generelt til den standard input/output-orientering mellem forældreprogrammet og underprogrammet, og to pipes bør bygges til tovejskommunikation, som ikke kan være på tværs af netværket og er begrænset til processer med afhængige relationer. Named Pipe kan bruges til at udveksle data mellem enhver proces og understøtte overførsel på tværs af netværk.
RPC
Remote Procedure Call (RPC) gør det muligt for applikationer at kalde funktioner leveret af andre applikationer og kan kaldes på tværs af netværk. Windows RPC overholder ISO DCE-standarden og understøtter integration på tværs af operativsystemer.
Windows sockets
Abstrakt kommunikationsgrænseflade baseret på TCP/IP eller andre netværksprotokoller, og dataudveksling foregår via netværksforbindelser i bundlaget.
Shared Memory er en almindelig dataudvekslingsmetode, der bruges af C/C++-udviklere (Google kan finde mange eksempler på IPC implementeret med Shared Memory på Linux), så C/C++-udviklere vælger det ofte som kommunikationskanal på Windows-platformen.

【Delt hukommelse Praktisk Øvelse】
Selvom der er færre, der bruger det, har .NET et indbygget System.IO.MemoryMappedFiles-navnerum, det er ikke svært at spille Shared Memory, næsten som at styre filer, så længe du har erfaring med FileStream-relaterede operationer, kan du komme hurtigt i gang, se MSDN-eksemplet, jeg skrev en mini-programøvelse.Hyperlink-login er synlig.

Jeg skrev to programmer, ProcessA, for at skabe et rum på 1024 bytes med MemoryMappedFile.CreateNew() og øve passing and catching med den anden ProcessB. Da 1024 bytes deles af to programmer, planlægger jeg, at de første 512 skal være ProcessA-skrevet til ProcessB, og de sidste 512 skal være ProcessB-skrevet til ProcessA-læsning, og programmet bruger CreateViewStream til at sende startadresse og længde for at pege på sit eget område. For at undgå læse-/skrivekonflikter, når ProcessA og ProcessB tilgår MemoryMappedFile, bruger jeg Mutex lock til at kontrollere, at kun én proces kan tilgå MemoryMappedFile ad gangen. Testprocessen opretter en MemoryMappedFile for ProcessA, skriver beskedstrengen – > ProcessB læser beskedstrengen og skriver svarstrengen – > ProcessA læser svarstrengen og afslutter.

ProcessA-proceduren er som følger:

ProcessB-proceduren er som følger:

Testen var en succes!



【Supplerende tips】

1. Hvordan ser jeg MemoryMappedFile, der aktuelt er aktiveret i Windows?

SystemInternals har et AccessChk-værktøj, der lister alle filer, mapper, registre, objekter og Windows-tjenester, der er tilgængelige for Windows. MemoryMappedFile er et Windows-objekt, og du kan bruge følgende kommando til at liste alle objekter og arkivere dem
accesschk -osv > e:\objList.txt
Søg efter navnet på MemoryMappedFile i den, og hvis det findes, kan du se en post, der ligner følgende:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Type: Sektion
  Mellemniveau obligatorisk (Standard) [Ingen advarsel]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\Brugernavn
    SECTION_ALL_ACCESS
  RW DOMAIN\Brugernavn-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Download af AccessChk-værktøjet:Hyperlink-login er synlig.

2. MemoryMappedFile-forudindstillingen er aktiveret i brugerens session, og forudindstillingen kan ikke bruges på tværs af sessioner. For eksempel, hvis to ASP.NET tilhørende forskellige AppPools har forskellige eksekveringsidentiteter, er det stadig én kopi af hver, selvom MemoryMappedFil-navnet er det samme, så det er nødvendigt at bekræfte, at eksekveringsidentiteten brugt af begge parter er den samme.

3. For at kommunikere på tværs af forskellige eksekveringsidentiteter kan MemoryMappedFile hedde "Global\ Filename" (bemærk at tilfældet med Global er anderledes, jeg trådte på tordenvejret, der fejlagtigt blev skrevet som GLOBAL path er ugyldig), så den kan tilgås på tværs af eksekveringsidentiteter.
Det skal dog bemærkes, at processer andre end Session 0 (Windows Service) skal have SeCreateGlobalPrivilege-tilladelsen for at oprette en Global\... MemoryMappedFile。 (MSDN-fil)
For Session 0 kan du henvise til denne artikel af MVP på den anden side - Penetrating Session 0 Isolation (1) (Hyperlink-login er synlig.Der er en meget detaljeret introduktion i den.

Genoptrykt fra:Hyperlink-login er synlig.





Tidligere:Angular 18-billede statisk ressourceindlæsningsproblem
Næste:Få et hurtigt overblik over Bootstrap 5's filindholdsstruktur
 Udlejer| Opslået på 10/08/2024 21.36.57 |
.NET/C# implementerer program singleton baseret på Mutex og MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com