Mis on vale jagamine?

Vale jagamine on olukord, mis võib tekkida arvutiprogrammis, kui kaks samaaegselt töötavat rakendust üritavad pääseda juurde teabele samas loogilises mälupiirkonnas, mille iga programm või protsess on oma vahemällu salvestanud. Iga rakenduse vahemälus olevad andmed kopeeritakse ühisest allikast, nii et ühe vahemälu muutmisel tuleb teine ​​allikast uuesti laadida. Jagamise vale aspekt ilmneb siis, kui ühe programmi vahemälu reale tehtud muudatused ei mõjuta tegelikult andmeid, mida teine ​​programm kasutab. Sel juhul on vahemälu uuesti laadimise sundimine süsteemiressursside raiskamine ja võib negatiivselt mõjutada. programmi jõudlust. Vale jagamise probleemi on raske tuvastada, kuna see ei tulene otseselt ühestki rakendustes sisalduvast koodist, kuigi vale jagamise vältimiseks on tõhusaid viise, nagu näiteks vahemällu salvestatud real olevate andmete teisaldamine eraldi reale. .

Üks peamisi põhjuseid, miks vale jagamine võib toimuda, peitub selles, kuidas operatsioonisüsteem või riistvara käsitleb andmete lugemist ja kirjutamist. Kui programm loeb või kirjutab teavet kõvakettalt või muust allikast, laaditakse see tavaliselt ajutisse vahemällu, et sellele saaks kiiresti juurde pääseda. Lähtekohast vahemällu salvestatud teabe hulka nimetatakse vahemälureaks ja see on loogiline mäluplokk, mis tavaliselt võib olla 2–256 baiti pikk. Mõne operatsioonisüsteemi või süsteemiarhitektuuri korral saavad programmid töötada samaaegselt, näiteks paralleeltöötluses. See tähendab, et kaks erinevat programmi võivad proovida juurdepääsu samas vahemälureal olevale teabele, nii et igal programmil on lähteandmetest oma koopia, mis võib põhjustada ühe vahemälu muudatuste mittekajastumist teises vahemälus, mis muudab vahemälu kehtetuks. andmed, mida see hoiab.

Olukorra lahendamiseks, kui kaks programmi üritavad pääseda samale vahemälureale, kasutatakse mitmeid mehhanisme, kuid kõige sagedamini on tulemuseks see, et üks programm on sunnitud oma vahemälu uuesti laadima koos teise programmi muudetud värskendatud teabega. Seda tüüpi juhtumeid nimetatakse valejagamiseks, kui vahemälureas olevad andmed, millele iga programm juurde pääseb, ei ole omavahel seotud, seega on ühe programmi vahemälu uuesti laadima sundimine töötlemisvõimsuse ja muude ressursside raiskamine. Kõige sagedamini on see probleem programmide puhul, mis ei muuda kunagi oma vahemälus olevat teavet, seega pole ohtu, et rakendus kirjutab üle teise protsessi tehtud muudatused.

Vale jagamise tagajärgede vältimiseks või leevendamiseks on kaks levinud viisi. Esimene on tühja teabe lisamine mälus olevate andmete ette või järele, sundides need sisuliselt eraldi vahemälu reale, millele teine ​​​​programm ei pääse juurde. Teine meetod on piirata lugemise ja kirjutamise sagedust vahemälu reale, et seda võimalikult vähe uuesti laadida. Keerulisemad lahendused hõlmavad vahemälutaseme haldamist või isegi muudatusi selles, kuidas operatsioonisüsteem jagamise käsitleb.