See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 2494|Vastuse: 1

[Nõuanded] Kaks või kolm asja jagatud mälu kohta

[Kopeeri link]
Postitatud 23.07.2024 14:50:48 | | | |
Osalemine vana süsteemi ümberpaigutamises, kus jagatud mälu kasutatakse protsessidevaheliseks suhtlemiseks (nt Window Service ASP.NET kutsumine), ning sunnitakse mõistma selle tehnoloogia tähtsust. NET-arendajate ebapopulaarne tehnoloogia, erimärkused.

[Mis on jagatud mälu?] 】
Protsessidevahelise suhtluse kohta on olemas termin, protsessidevaheline kommunikatsioon (IPC), millel on Windowsi platvormil järgmised valikud: Viide:Hüperlingi sisselogimine on nähtav.

Lõikelaud
Programm A kleebib sisu lõikelauale ja programm B võtab sisu sealt tagasi.
COM
OLE Compound Document võimaldab Wordi faile Exceli töölehtedesse manustada ning Exceli saab kahe klikiga redigeerimiseks avada.
Andmete koopia
Programm A saadab WM_COPYDATA sõnumit Programmile B kokkulepitud formaadis
DDE
DDE on kommunikatsiooniprotokoll, mis võimaldab erinevatel rakendustel vahetada andmeid erinevates formaatides, mida võib pidada lõikelaua laienduseks ning mida saab pidevalt edastada lisaks ühekordsetele edastustele. (Suhteliselt kehv jõudlus, enam ei soovitata)
Failide kaardistamine
Failikaardistamine tähendab faili simuleerimist kui mäluosa protsessis, kus mitmed rakendused vahetavad andmeid jagatud failikaardistamise kaudu, mida nimetatakse nimetatud jagatud mäluks – see on parim tulemus erinevate IPC meetodite seas, kuid mida tuleb vältida sünkroniseerimismehhanismidega nagu Mutex.
Postipunktid
Ühesuunaline suhtlus – Mailslot Client saadab sõnumeid Mailslot Serverile ning sõnumid kustutatakse pärast serveri poolt lugemist, toetades masinatevahelist edastust ning neid saab edastada ka ühe-mitme vahel. (Edastatava sõnumi pikkus on piiratud 400 baitiga ning sõnumi pikkuse määrab Mailslot server, kui see on loodud ühe-ühele edastuseks)
Torud
Kahepoolne edastus jaguneb anonüümseks toruks ja nimetud toruks. Anonüümset toru kasutatakse tavaliselt standardse sisendi/väljundi suuna jaoks vanemprogrammi ja alamprogrammi vahel ning kahepoolseks suhtluseks tuleks ehitada kaks toru, mis ei saa toimuda võrgu kaudu ja on piiratud sõltuvate seostega protsessidega. Nimetatud toru saab kasutada andmete vahetamiseks mis tahes protsessi vahel ning toetab võrgutevahelist protsesside edastust.
RPC
Remote Procedure Call (RPC) võimaldab rakendustel kutsuda teiste rakenduste pakutavaid funktsioone ning neid saab kutsuda üle võrkude. Windows RPC vastab ISO DCE standardile ja toetab ristoperatsioonisüsteemide integreerimist.
Windowsi pistikud
Abstraktne suhtlusliides, mis põhineb TCP/IP või muudel võrguprotokollidel, ning andmevahetus toimub võrguühenduste kaudu alumisel kihil.
Jagatud mälu on levinud andmevahetusmeetod, mida kasutavad C/C++ arendajad (Google leiab palju näiteid IPC-st, mis on rakendatud jagatud mäluga Linuxis), seega valivad C/C++ arendajad selle sageli suhtluskanaliks Windowsi platvormil.

【Jagatud mälu praktiline harjutus】
Kuigi kasutajaid on vähem, on .NET-il sisseehitatud System.IO.MemoryMappedFiles nimeruum, jagatud mälu mängimine pole keeruline, peaaegu sama mis operatsioonifaile, kui sul on kogemusi FileStreamiga seotud operatsioonides, saad kiiresti alustada, vt MSDN näidet, kirjutasin mini-programmiharjutuse.Hüperlingi sisselogimine on nähtav.

Kirjutasin kaks programmi, ProcessA, mis loob 1024-baidise ruumi MemoryMappedFile.CreateNew() abil ja harjutasin teise ProcessB-ga läbimist ja püüdmist. Kuna 1024 baiti jagatakse kahe programmi vahel, plaanin, et esimene 512 oleks ProcessA kirjutatud ProcessB-le ja viimane 512 ProcessB-na, mis kirjutatakse ProcessA lugemisele, ning programm kasutab CreateViewStreami, et edastada algusaadress ja pikkus, et osutada oma alale. Et vältida lugemise/kirjutamise konflikte, kui ProcessA ja ProcessB pääsevad MemoryMappedFile'ile ligi, kasutan Mutex lock'i, et kontrollida, et ainult üks protsess pääseb korraga MemoryMappedFile'ile ligi. Testprotsess loob ProcessA jaoks MemoryMappedFile'i, kirjutab sõnumistringi – > ProcessB loeb sõnumistringi ja kirjutab vastusestringi – > ProcessA loeb vastusestringi ja lõpeb.

ProcessA protseduur on järgmine:

ProcessB protseduur on järgmine:

Test oli edukas!



【Täiendavad nõuanded】

1. Kuidas ma saan vaadata MemoryMappedFile'i, mis on praegu Windowsis lubatud?

SystemInternalsil on AccessChk tööriist, mis loetleb kõik failid, kaustad, registrid, objektid ja Windowsi teenused, mis on Windowsile ligipääsetavad. MemoryMappedFile on Windowsi objekt ning saad järgmist käsku kasutada kõigi objektide loetlemiseks ja arhiveerimiseks
accesschk -osv > e:\objList.txt
Otsi sealt MemoryMappedFile nime ja kui see eksisteerib, näed kirjet, mis on sarnane järgmisele:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Tüüp: Sektsioon
  Keskmine kohustuslik tase (vaikimisi) [Ilma kirjutamiseta]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

AccessChk tööriista allalaadimine:Hüperlingi sisselogimine on nähtav.

2. MemoryMappedFile eelseadistus on kasutaja sessioonis lubatud ja seda ei saa sessioonide vahel kasutada. Näiteks, kui kaks ASP.NET erinevatesse AppPoolidesse, omavad erinevaid täitmisidentiteete, siis isegi kui MemoryMappedFile nimi on sama, on see ikkagi üks koopia kummastki, seega on vaja kinnitada, et mõlema poole kasutatud täitmisidentiteet on sama.

3. Erinevate täitmisidentiteetide vahel suhtlemiseks saab MemoryMappedFile'i nimetada "Global\ Filename" (märkus: Global juhtum on erinev, astusin ekslikult kirjutatud äikese peale kui GLOBAL path on kehtetu), nii et sellele pääseb ligi läbi täitmisidentiteetide.
Siiski tuleb märkida, et protsessid peale Session 0 (Windowsi teenuse) peavad omama SeCreateGlobalPrivilege õigust Global\... MemoryMappedFile。 (MSDN fail)
Sessiooni 0 kohta võid vaadata MVP artiklit teisel pool – Penetrating Session 0 Isolation (1) (Hüperlingi sisselogimine on nähtav.Selles on väga põhjalik sissejuhatus.

Trükitud allikast:Hüperlingi sisselogimine on nähtav.





Eelmine:Angular 18 pildi staatilise ressursi laadimise probleem
Järgmine:Saad kiire ülevaate Bootstrap 5 faili sisustruktuurist
 Üürileandja| Postitatud 10.08.2024 21:36:57 |
.NET/C# rakendab programmi singleton, mis põhineb Mutexil ja MemoryMappedFile'il
https://www.itsvse.com/thread-10808-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com