Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 2494|Odgovoriti: 1

[Napitnine] Dve ali tri stvari o skupnem spominu

[Kopiraj povezavo]
Objavljeno na 23. 07. 2024 14:50:48 | | | |
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.





Prejšnji:Težava s statičnim nalaganjem virov na slikah Angular 18
Naslednji:Pridobite hiter pregled vsebinske strukture datoteke Bootstrap 5
 Najemodajalec| Objavljeno na 10. 08. 2024 21:36:57 |
.NET/C# implementira program singleton na osnovi Mutex in MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com