Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 2494|Vastaus: 1

[Vinkkejä] Kaksi tai kolme asiaa Shared Memorystä

[Kopioi linkki]
Julkaistu 23.7.2024 14.50.48 | | | |
Osallistuminen vanhan järjestelmän siirtoon, jossa jaettua muistia käytetään prosessien väliseen viestintään (esim. Window Service ASP.NET kutsuminen), ja pakotetaan ymmärtämään tämän teknologian merkitys. NET-kehittäjien epäsuosittu teknologia, erityishuomautuksia.

[Mikä on jaettu muisti?] 】
Prosessien väliselle viestinnälle on olemassa termi, Interprocess Communictaion (IPC), jolla Windows-alustalla on seuraavat vaihtoehdot: Viite:Hyperlinkin kirjautuminen on näkyvissä.

Leikepöytä
Ohjelma A liittää sisällön lehtiöön, ja Ohjelma B hakee sisällön sieltä.
COM
OLE Compound Document mahdollistaa Word-tiedostojen upottamisen Excel-työarkistoihin, ja Exceliä voi avata muokkattavaksi kahdella klikkauksella.
Tietojen kopiointi
Ohjelma A lähettää WM_COPYDATA viestiä ohjelmalle B sovitussa muodossa
DDE
DDE on viestintäprotokolla, joka mahdollistaa eri sovellusten vaihtaa tietoja eri formaateissa, mikä voidaan nähdä leikelevyn jatkeena ja siirtää jatkuvasti kertaluonteisten siirtojen lisäksi. (Suhteellisen heikko suorituskyky, ei enää suositeltavaa)
Tiedostokartoitus
Tiedostokartoitus tarkoittaa tiedoston simulointia muistin osana prosessissa, jolloin useat sovellukset vaihtavat dataa jaetun tiedostokartoituksen, nimeltään nimetty jaettu muisti, kautta, joka on paras suorituskyky eri IPC-menetelmistä, mutta se on estettävä synkronointimekanismeilla, kuten Mutexillä.
Postipaikat
Yksisuuntainen viestintä, Mailslot Client lähettää viestejä Mailslot Serverille, ja viestit poistetaan palvelimen lukemisen jälkeen, mikä tukee koneiden välistä siirtoa, ja niitä voidaan myös lähettää yksittäin moniin. (Lähetysviestin pituus on rajoitettu 400 tavuun, ja viestin pituus määräytyy Mailslot-palvelimen toimesta, kun se on perustettu yksilölähetykseen)
Putket
Kaksisuuntainen lähetys on jaettu Anonymous Pipeen ja Named Pipeen. Anonyymi putki on yleensä käytössä tavanomaiseen syöttö-/lähtöorientaatioon emoohjelman ja lapsiohjelman välillä, ja kaksi putkea tulisi rakentaa kaksisuuntaiseen viestintään, joka ei voi tapahtua verkon yli ja rajoittuu prosesseihin, joilla on riippuvaisia suhteita. Nimettyä putkea voidaan käyttää tiedonsiirtoon minkä tahansa prosessin välillä ja se tukee verkkojen välistä prosessisiirtoa.
RPC
Remote Procedure Call (RPC) mahdollistaa sovellusten kutsua muiden sovellusten tarjoamia funktioita, joita voidaan kutsua verkkojen yli. Windows RPC noudattaa ISO DCE -standardia ja tukee ristikäyttöjärjestelmäintegraatiota.
Windows-liitännät
Abstrakti viestintärajapinta, joka perustuu TCP/IP:hen tai muihin verkkoprotokolliin, ja tiedonvaihto tapahtuu verkkoyhteyksien kautta alimmassa kerroksessa.
Jaettu muisti on yleinen tiedonvaihtomenetelmä, jota C/C++-kehittäjät käyttävät (Google löytää monia esimerkkejä IPC:stä, joka on toteutettu jaetulla muistilla Linuxissa), joten C/C++-kehittäjät valitsevat sen usein viestintäkanavaksi Windows-alustalla.

【Jaetun muistin käytännön harjoitus】
Vaikka käyttäjiä on vähemmän, .NET:ssä on sisäänrakennettu System.IO.MemoryMappedFiles -nimiavaruus, jaetun muistin pelaaminen ei ole vaikeaa, melkein sama kuin käyttötiedostoja, kunhan sinulla on kokemusta FileStreamiin liittyvistä toiminnoista, voit aloittaa nopeasti, katso MSDN-esimerkki, kirjoitin miniohjelmaharjoituksen.Hyperlinkin kirjautuminen on näkyvissä.

Kirjoitin kaksi ohjelmaa, ProcessA:n, joka loi 1024 tavun tilan MemoryMappedFile.CreateNew():lla, ja harjoittelin läpäisemistä ja kiinniottoa toisella ProcessB:llä. Koska 1024 tavua jakaa kaksi ohjelmaa, suunnittelen ensimmäisen 512:n olevan ProcessA, joka kirjoitetaan ProcessB:lle, ja viimeinen 512 ProcessB:lle, joka kirjoitetaan ProcessA:lle, ja ohjelma käyttää CreateViewStreamia syöttääkseen aloitusosoitteen ja pituuden osoittaakseen omalle alueelleen. Välttääkseni luku- ja kirjoitusristiriitoja, kun ProcessA ja ProcessB käyttävät MemoryMappedFilea, käytän Mutex Lockia hallitakseni, että vain yksi prosessi voi käyttää MemoryMappedFilea samanaikaisesti. Testiprosessi luo MemoryMappedFile-tiedoston ProcessA:lle, kirjoittaa viestijonon – > ProcessB lukee viestijonon ja kirjoittaa vastausjonon – > ProcessA lukee vastausjonon ja päättyy.

ProcessA-menettely on seuraava:

ProsessiB-menettely on seuraava:

Testi onnistui!



【Lisävinkit】

1. Miten näen Windowsissa tällä hetkellä käytössä olevan MemoryMappedFile-tiedoston?

SystemInternalsilla on AccessChk-työkalu, joka listaa kaikki tiedostot, kansiot, rekisterit, objektit ja Windows-palvelut, jotka ovat Windowsin käytettävissä. MemoryMappedFile on Windows-objekti, ja voit käyttää seuraavaa komentoa listataksesi kaikki objektit ja arkistoidaksesi ne
accesschk -osv > e:\objList.txt
Etsi siitä MemoryMappedFile-nimi, ja jos sellainen on olemassa, näet seuraavan kaltaisen tietueen:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Tyyppi: Osio
  Keskimääräinen pakollinen taso (oletus) [ei kirjoitusta]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\Käyttäjänimi
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

AccessChk-työkalun lataus:Hyperlinkin kirjautuminen on näkyvissä.

2. MemoryMappedFile-esiasetus on käytössä käyttäjän istunnossa, eikä esiasetusta voi käyttää istuntojen välillä. Esimerkiksi, jos kahdella eri AppPooliin kuuluvalla ASP.NET:llä on erilaiset suoritusidentiteetit, vaikka MemoryMappedFile-nimi olisi sama, se on silti yksi kopio kummastakin, joten on varmistettava, että molempien osapuolten käyttämä suoritusidentiteetti on sama.

3. Eri suoritusidentiteettien välillä kommunikoida MemoryMappedFile voidaan nimetä "Global\ Filename" (huomaa, että Globalin tapaus on erilainen, astuin vahingossa kirjoitettuun UKKOSEEN, jossa GLOBAL path on virheellinen), jotta sitä voidaan käyttää suoritusidentiteettien välillä.
On kuitenkin huomioitava, että muilla prosesseilla kuin Session 0 (Windows-palvelu) tulee olla SeCreateGlobalPrivilege-oikeus luodakseen Global\... MemoryMappedFile。 (MSDN-tiedosto)
Session 0 osalta voit katsoa MVP:n artikkelia toisella puolella - Penetrating Session 0 Isolation (1) (Hyperlinkin kirjautuminen on näkyvissä.Siinä on hyvin yksityiskohtainen johdanto.

Uudelleenpainettu lähteestä:Hyperlinkin kirjautuminen on näkyvissä.





Edellinen:Angular 18 -kuvan staattinen resurssilatausongelma
Seuraava:Saat nopean yleiskatsauksen Bootstrap 5 -tiedoston sisältörakenteesta
 Vuokraisäntä| Julkaistu 10.8.2024 21.36.57 |
.NET/C# toteuttaa ohjelman singleton, joka perustuu Mutex- ja MemoryMappedFile-tiedostoihin
https://www.itsvse.com/thread-10808-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com