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ä.
|