Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 2494|Svare: 1

[Tips] To eller tre ting om delt minne

[Kopier lenke]
Publisert på 23.07.2024 14:50:48 | | | |
Å delta i flyttingen av et gammelt system, hvor delt minne brukes til å kommunisere på tvers av prosesser (f.eks. å kalle vindustjenesten ASP.NET), og tvinges til å forstå viktigheten av denne teknologien. NET-utvikleres upopulære teknologi, spesielle notater.

[Hva er delt minne?] 】
Det finnes et begrep for tverrprosesskommunikasjon, Interprocess Communictaion (IPC), som har følgende alternativer på Windows-plattformen: Referanse:Innloggingen med hyperkoblingen er synlig.

Utklippstavle
Program A limer inn innholdet i utklippstavlen, og Program B henter innholdet fra utklippstavlen.
COM
OLE Compound Document gjør det mulig å legge inn Word-filer i Excel-ark, og Excel kan åpnes for redigering med to klikk.
Datakopi
Program A sender WM_COPYDATA meldinger til Program B i det avtalte formatet
DDE
DDE er en kommunikasjonsprotokoll som tillater ulike applikasjoner å utveksle data i forskjellige formater, noe som kan betraktes som en utvidelse av utklippstavlen, og kan overføres kontinuerlig i tillegg til engangsoverføringer. (Relativt dårlig ytelse, anbefales ikke lenger)
Filkartlegging
Filkartlegging refererer til å simulere en fil som et minnestykke i en prosess, når flere applikasjoner utveksler data gjennom delt filkartlegging, kalt Named Shared Memory, som gir best ytelse blant ulike IPC-metoder, men må forhindres av synkroniseringsmekanismer som Mutex.
Postautomater
Enveiskommunikasjon, Mailslot-klienten sender meldinger til Mailslot Server, og meldingene slettes etter å ha blitt lest av serveren, noe som støtter overføring på tvers av maskiner, og kan også kringkastes én-til-mange. (Lengden på sendingsmeldingen er begrenset til 400 byte, og lengden på meldingen bestemmes av Mailslot-serveren når den etableres for én-til-én-overføring)
Rør
Toveis overføring er delt inn i Anonym Pipe og Named Pipe. Anonymous Pipe brukes vanligvis for standard input/output-orientering mellom foreldreprogrammet og barneprogrammet, og to pipes bør bygges for toveis kommunikasjon, som ikke kan være over nettverket og er begrenset til prosesser med avhengige relasjoner. Named Pipe kan brukes til å utveksle data mellom enhver prosess og støtte prosessoverføring på tvers av nettverk.
RPC
Remote Procedure Call (RPC) gjør det mulig for applikasjoner å kalle funksjoner levert av andre applikasjoner, og kan kalles på tvers av nettverk. Windows RPC følger ISO DCE-standarden og støtter integrasjon på tvers av operativsystemer.
Vindussokler
Abstrakt kommunikasjonsgrensesnitt basert på TCP/IP eller andre nettverksprotokoller, og datautveksling skjer via nettverkstilkoblinger på det nederste laget.
Delt minne er en vanlig datautvekslingsmetode brukt av C/C++-utviklere (Google kan finne mange eksempler på IPC implementert med delt minne på Linux), så C/C++-utviklere velger det ofte som kommunikasjonskanal på Windows-plattformen.

【Delt minneøvelse】
Selv om det er færre som bruker det, har .NET et innebygd System.IO.MemoryMappedFiles-navnerom, det er ikke vanskelig å spille Shared Memory, nesten som operativsystemer, så lenge du har erfaring med FileStream-relaterte operasjoner, kan du komme i gang raskt, se MSDN-eksempelet, jeg skrev en mini-programøvelse.Innloggingen med hyperkoblingen er synlig.

Jeg skrev to programmer, ProcessA, for å lage et område på 1024 byte med MemoryMappedFile.CreateNew() og øvde på passing and catching med den andre ProcessB. Siden 1024 bytes deles av to programmer, planlegger jeg at de første 512 skal være ProcessA-skrevet til ProcessB, og de siste 512 skal være ProcessB-skrevet til ProcessA-lesning, og programmet bruker CreateViewStream for å sende inn startadresse og lengde for å peke på sitt eget område. For å unngå lese-/skrivekonflikter når ProcessA og ProcessB får tilgang til MemoryMappedFile, bruker jeg Mutex-lås for å kontrollere at bare én prosess kan få tilgang til MemoryMappedFile om gangen. Testprosessen oppretter en MemoryMappedFile for ProcessA, skriver meldingsstrengen – > ProcessB leser meldingsstrengen og skriver svarstrengen – > ProcessA leser svarstrengen, og avslutter.

ProsessA-prosedyren er som følger:

ProsessB-prosedyren er som følger:

Testen var vellykket!



【Supplerende tips】

1. Hvordan ser jeg MemoryMappedFile som for øyeblikket er aktivert i Windows?

SystemInternals har et AccessChk-verktøy som lister opp alle filer, mapper, registre, objekter og Windows-tjenester som er tilgjengelige for Windows. MemoryMappedFile er et Windows-objekt, og du kan bruke følgende kommando for å liste opp alle objekter og arkivere dem
accesschk -osv > e:\objList.txt
Se etter navnet på MemoryMappedFile i den, og hvis det finnes, kan du se en post som ligner på følgende:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Type: Seksjon
  Middels obligatorisk nivå (Standard) [Ingen advarsel]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\Brukernavn
    SECTION_ALL_ACCESS
  RW DOMAIN\Brukernavn-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Nedlasting av AccessChk-verktøyet:Innloggingen med hyperkoblingen er synlig.

2. MemoryMappedFile-forhåndsinnstillingen er aktivert i brukerens sesjon, og forhåndsinnstillingen kan ikke brukes på tvers av økter. For eksempel, hvis to ASP.NET som tilhører forskjellige AppPools har forskjellige utførelsesidentiteter, selv om MemoryMappedFil-navnet er det samme, er det fortsatt én kopi av hver, så det er nødvendig å bekrefte at utførelsesidentiteten som brukes av begge parter er den samme.

3. For å kommunisere på tvers av ulike utførelsesidentiteter kan MemoryMappedFile kalles "Global\ Filename" (merk at tilfellet Global er annerledes, jeg tråkket på tordenen som feilaktig ble skrevet som GLOBAL path er ugyldig), slik at den kan nås på tvers av utførelsesidentiteter.
Det bør imidlertid bemerkes at prosesser andre enn Session 0 (Windows Service) må ha tillatelsen SeCreateGlobalPrivilege for å opprette en Global\... MemoryMappedFile。 (MSDN-fil)
For Session 0 kan du se denne artikkelen av MVP på den andre siden – Penetrating Session 0 Isolation (1) (Innloggingen med hyperkoblingen er synlig.Det er en veldig detaljert introduksjon i den.

Gjengitt fra:Innloggingen med hyperkoblingen er synlig.





Foregående:Angular 18-bilde statisk ressurslastingsproblem
Neste:Få en rask oversikt over Bootstrap 5s filinnholdsstruktur
 Vert| Publisert på 10.08.2024 21:36:57 |
.NET/C# implementerer programsingleton basert på Mutex og MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com