Sodeluje pri preselitvi starega sistema, kjer se uporablja skupni pomnilnik za komunikacijo med procesi (npr. klic Window Service ASP.NET), in je prisiljen razumeti pomen te tehnologije. Nepriljubljena tehnologija razvijalcev NET, posebne opombe.
[Kaj je skupni spomin?] 】 Obstaja izraz za medprocesno komunikacijo, Interprocess Communication (IPC), ki ima na platformi Windows naslednje možnosti: Referenca:Prijava do hiperpovezave je vidna.
Odložišče Program A prilepi vsebino v odložišče, Program B pa pridobi vsebino iz odložišča. COM OLE Compound Document omogoča vgradnjo Wordovih datotek v Excelove delovne liste, Excel pa je mogoče poklicati za urejanje z dvema klikoma. Kopija podatkov Program A pošlje WM_COPYDATA sporočila programu B v dogovorjenem formatu DDE DDE je komunikacijski protokol, ki omogoča različnim aplikacijam izmenjavo podatkov v različnih formatih, kar lahko štejemo za razširitev odložišča in se lahko prenaša neprekinjeno poleg enkratnih prenosov. (Relativno slaba zmogljivost, ni več priporočljivo) Preslikava datotek Preslikava datotek se nanaša na simulacijo datoteke kot kosa pomnilnika v procesu, ko več aplikacij izmenjuje podatke preko skupnega preslikavanja datotek, imenovanega imenovani skupni pomnilnik, ki je najboljša zmogljivost med različnimi IPC metodami, vendar ga morajo preprečiti sinhronizacijski mehanizmi, kot je Mutex. Poštne reže Enosmerna komunikacija, Mailslot odjemalec pošilja sporočila strežniku Mailslot Server, ki se po branju na strežniku izbrišejo, kar podpira prenos med računalniki in jih je mogoče tudi oddajati eno-na-več. (Dolžina oddajnega sporočila je omejena na 400 bajtov, dolžino sporočila pa določi strežnik Mailslot ob vzpostavitvi za prenos ena na ena) Cevi Dvosmerni prenos je razdeljen na anonimno cev in imenovano cev. Anonimna cev se običajno uporablja za standardno vhodno/izhodno orientacijo med nadrejenim in podrejenim programom, pri čemer je treba zgraditi dve cevi za dvosmerno komunikacijo, ki ne more potekati čez omrežje in je omejena na procese z odvisnimi odnosi. Imenovana cev se lahko uporablja za izmenjavo podatkov med katerimkoli procesom in podpira prenos procesov med omrežji. RPC Oddaljeni klic postopka (RPC) omogoča aplikacijam, da kličejo funkcije, ki jih zagotavljajo druge aplikacije, in jih je mogoče klicati prek omrežij. Windows RPC je skladen s standardom ISO DCE in podpira integracijo med različnimi operacijskimi sistemi. Windows vtičnice Abstraktni komunikacijski vmesnik, ki temelji na TCP/IP ali drugih omrežnih protokolih, izmenjava podatkov pa poteka preko omrežnih povezav na spodnji plasti. Deljeni pomnilnik je pogosta metoda izmenjave podatkov, ki jo uporabljajo razvijalci C/C++ (Google lahko najde veliko primerov IPC, implementiranih z deljeno pomnilniško na Linuxu), zato ga razvijalci C/C++ pogosto izberejo kot komunikacijski kanal na platformi Windows.
【Praktična vaja skupnega spomina】 Čeprav ga uporablja manj ljudi, ima .NET vgrajen imenski prostor System.IO.MemoryMappedFiles, ni težko igrati Shared Memory, skoraj enako kot operacijske datoteke, dokler imate izkušnje z operacijami, povezanimi z FileStream, lahko hitro začnete, glejte primer MSDN, napisal sem mini programsko vajo.Prijava do hiperpovezave je vidna.
Napisal sem dva programa, ProcessA, da ustvarim prostor 1024 bajtov z MemoryMappedFile.CreateNew() in vadim passing in catching z drugim ProcessB. Ker si 1024 bajtov delita dva programa, načrtujem, da bo prvih 512 ProcessA zapisanih v ProcessB, zadnjih 512 pa ProcessB, zapisanih v ProcessA ProcessA, program pa uporabi CreateViewStream za prenos začetnega naslova in dolžine, da kaže na svoje območje. Da se izognem konfliktom branja/pisanja, ko ProcessA in ProcessB dostopata do MemoryMappedFile, uporabljam Mutex lock za nadzor, da lahko do MemoryMappedFile hkrati dostopa le en proces. Testni proces ustvari datoteko MemoryMappedFile za ProcesA, zapiše niz sporočil – > ProcesB prebere niz sporočila in zapiše niz odziva – > ProcesA prebere niz odziva in zaključi.
Postopek ProcessA je naslednji:
Postopek ProcessB je naslednji:
Test je bil uspešen!
【Dopolnilni nasveti】
1. Kako lahko vidim MemoryMappedFile, ki je trenutno omogočen v Windows?
SystemInternals ima orodje AccessChk, ki prikazuje vse datoteke, mape, registre, objekte in Windows storitve, dostopne v Windows. MemoryMappedFile je Windows objekt in z naslednjim ukazom lahko navedete vse objekte in jih arhivirate accesschk -osv > e:\objList.txt Poiščite ime MemoryMappedFile v njem, in če obstaja, lahko vidite zapis, podoben naslednjemu: \Sessions\1\BaseNamedObjects\DARKTHREAD Tip: Sekcija Srednja obvezna raven (privzeto) [Brez zapisa] RW NT AUTHORITY\SYSTEM SECTION_ALL_ACCESS RW DOMENA\Uporabniško Ime SECTION_ALL_ACCESS RW DOMAIN\UserName-S-1-5-5-0-954410 SECTION_ALL_ACCESS
Prenos orodja AccessChk:Prijava do hiperpovezave je vidna.
2. Prednastavitev MemoryMappedFile je omogočena v uporabnikovi seji in je ni mogoče uporabljati med sejami. Na primer, če imata dve ASP.NET, ki pripadata različnim AppPoolom, različne izvedbene identitete, tudi če je ime MemoryMappedFile enako, je to še vedno ena kopija vsakega, zato je treba potrditi, da je identiteta izvajanja, ki jo uporabljata obe strani, enaka.
3. Za komunikacijo med različnimi izvedbenimi identitetami lahko MemoryMappedFile poimenujemo "Global\ Filename" (opomba: primer Global je drugačen, stopil sem na grom, ki je bil pomotoma zapisan kot GLOBAL path je neveljaven), tako da je dostopen preko različnih izvršilnih identitet. Vendar pa je treba poudariti, da morajo procesi, ki niso Session 0 (Windows storitev), imeti dovoljenje SeCreateGlobalPrivilege za ustvarjanje Global\... MemoryMappedFile。 (MSDN datoteka) Za sejo 0 si lahko ogledate ta članek MVP na drugi strani - Penetrating Session 0 Isolation (1) (Prijava do hiperpovezave je vidna.V njej je zelo podroben uvod.
Ponatisnjeno iz:Prijava do hiperpovezave je vidna.
|