Mikä on muistilukko?

Historiallisesti kaikki tietokoneohjelmat on kirjoitettu täysin peräkkäin. Tämä on helppo lukea, kirjoittaa ja ymmärtää. Se on myös yksinkertainen tietokoneen suorittamiseen ja vaatii suhteellisen yksinkertaista laitteistoa. Tämän suunnitteluparadigman avulla ainoat kaksi tapaa lisätä järjestelmän suorituskykyä on kirjoittaa tehokkaampaa koodia ja lisätä suorittimen nopeutta. Koodin tehokkuuden lisääminen voi olla mahdollista, mutta se on yleensä monimutkainen prosessi, jonka tulokset ovat usein rajallisia.

Suorituskykyä voitiin heikentää vuosikymmeniä odottamalla uusia, tehokkaampia suorittimia. Kuten Mooren laissa kuvataan, suorittimien suorituskyky noin kaksinkertaistuu kahden tai kolmen vuoden välein. Valitettavasti suurin osa näistä suorituskyvyn lisäyksistä johtui yhä pienempien valmistussolmujen käytöstä. Moderni teknologia on kamppaillut pienentääkseen solmukokoa historiallisella nopeudella nanometrien mittakaavassa toimivien materiaalisten vaikeuksien ansiosta.

Tämän kiertämiseksi nykyaikaiset CPU-arkkitehdit ovat päättäneet lisätä suorittimiin useita prosessoriytimiä. Jokainen prosessorin ydin voi toimia itsenäisesti eri tehtävässä. Vaikka he eivät voi yhdistää samaa ongelmaa, he voivat käsitellä kahta asiaa samanaikaisesti. Tämä perustavanlaatuinen arkkitehtoninen muutos tarjoaa paljon lisäsuorituskykyä, mutta se ei hyödy suoraan yksittäisistä prosesseista, vaikka se vähentää kiistaa prosessoriajasta.

Jotta moniytimisistä prosessoreista voidaan hyötyä, koodi on kirjoitettava monisäikeisellä tavalla. Kutakin säiettä voidaan sitten ajaa samanaikaisesti, mikä skaalaa suorituskykyetua käytettävissä olevien säikeiden ja suoritinytimien lukumäärällä. Tämän tekeminen joutuu kuitenkin uuteen haasteeseen, "kilpaehtoon".

Huomautus: Jotkut tehtävät eivät voi olla monisäikeisiä, kun taas toiset voivat olla massiivisesti monisäikeisiä. Mahdolliset suoritusedut riippuvat tehdystä työstä.

Kilpailun ehdot

Monisäikeinen ohjelmisto voi hyödyntää useita ytimiä. Vaarat väijyvät näillä vesillä valmiina vangitsemaan kokemattoman ohjelmoijan. Kilpailutilanne voi ilmetä, kun kaksi eri säiettä ovat vuorovaikutuksessa saman muistibitin kanssa.

Yksinkertainen esimerkki voisi olla kaksi säiettä, jotka yrittävät tarkistaa ja kasvattaa muuttujaa samanaikaisesti. Oletetaan, että a=0 . Kaksi eri säiettä suorittaa sitten tehtävänsä ja jossain vaiheessa tarkistavat a ja lisäävät sitä yhdellä. Yleensä voit odottaa tulokseksi kaksi, kun kaksi säiettä lisäävät yhden nollaan. Useimmiten näin pitäisi olla. Voit saada erilaisen tuloksen, jos molemmat säikeet käyvät läpi kyseisen toiminnon juuri oikeaan aikaan.

Tässä tapauksessa ensimmäinen säie lukee a: n arvon . Ennen kuin ensimmäinen säie voi kasvattaa tosin arvoa , toinen säie lukee sen. Nyt ensimmäinen säie lisää yhden nollaan, mutta toinen säie jo uskoo arvon olevan nolla ja lisää yhden nollaan. Tämän seurauksena a:n lopullinen arvo on 1, ei 2.

Kilpaileminen pahimpaan skenaarioon

Vaikka yllä oleva esimerkki ei ehkä kuulosta erityisen pahalta, sillä voi olla dramaattisia vaikutuksia. Entä jos a:n arvo valitsee koneen toimintatavan? Entä jos kyseisen koneen tietyt toimintatavat voivat olla vaarallisia tai jopa hengenvaarallisia?

Kilpailuolosuhteiden ei myöskään tarvitse olla niin yksinkertaisia. Esimerkiksi voi olla mahdollista, että yksi säie lukee muistiosion samalla, kun toinen säie kirjoittaa siihen. Tässä tapauksessa lukusäie voi saada oudon yhdistelmän tietoja sekä ennen että jälkeen. Oletetaan, että tarkistus on yksinkertainen tosi/epätosi -tarkistus.

Jos muuttuja sanoi tosi lukemisen alussa, mutta sitä ollaan parhaillaan korvaamassa sanaksi false, lukutoiminnon tulos saattaa olla jotain "trlse". Tämä ei ole "tosi" tai "epätosi". Jos kumpaakaan vaihtoehtoa ei ole binäärivalinnassa, sovellus kaatuu lähes varmasti. Tämä muistin korruptio voi johtaa moniin tietoturvaongelmiin, kuten palvelun epäämiseen ja käyttöoikeuksien eskaloitumiseen.

Kilpailun sulkeminen

On tärkeää tietää, mitkä ohjelman muistibitit jaetaan eri säikeiden kesken, jotta estetään kilpailutilanne. Mitään ei tarvitse tehdä, jos muuttujaa ohjataan ja pääsee käsiksi vain yksi säie. Jos kahdella tai useammalla säikeellä on pääsy muuttujaan, sinun on varmistettava, että kaikki kyseisen muistiosan toiminnot suoritetaan toisistaan ​​riippumatta.

Tämä itsenäisyys saavutetaan lukon ansiosta. Ohjelman koodissa sinun on asetettava lukko, kun kirjoitat funktiota, joka toimii jaetulla muistilla. Tämä lukko estää muita säikeitä pääsemästä kyseiseen muistiin, kunnes lukko vapautetaan.

Lukko ei ole tyylikkäin ratkaisu. Ensinnäkin sillä on muistikustannuksia. Se voi myös pakottaa langan roikkumaan odottaen lukon vapautumista. Tilanteesta riippuen lukko ei välttämättä vapaudu kovin pitkään tai ei vapaudu ollenkaan. Pahimmassa tapauksessa lukon avaaminen voi riippua siitä, että jotain tapahtuu toisessa estyneessä säikeessä, mikä johtaa umpikujaan.

On välttämätöntä optimoida lukkojen käyttö. Voit hallita, kuinka rakeinen lukko on. Jos esimerkiksi muokkaat taulukon tietoja, voit lukita koko taulukon tai vain muokatun rivin. Koko pöydän lukitseminen olisi karkea rakeisuuslukko. Se minimoi liian monen lukituksen käyttöönoton aiheuttamat lisäkustannukset, mutta lisää todennäköisyyttä, että lukko estää toisen säikeen. Pelkän rivin lukitseminen olisi hienon tarkkuuden lukitus. Tämä on paljon vähemmän todennäköistä, että se häiritsee muita lankoja, mutta se tarkoittaa, että tarvitaan repeytyviä lukkoja, mikä lisää kokonaiskustannuksia.

Johtopäätös

Muistilukko on koodityökalu, jota käytetään varmistamaan muistin sisäiset atomitoiminnot monisäikeisessä ympäristössä. Lukitsemalla muistinpalan ennen sen käyttöä voit olla varma, ettei kilpailutilanteen vuoksi voi tapahtua odottamatonta toimintaa. Muistilukot sisältävät muistin yläpuolella, mutta ne voivat myös aiheuttaa lukituksen.

Estäminen on kohtaa, jossa toinen säie yrittää toimia lukitussa pemoryssa. Lanka istuu siinä, tukossa, kunnes lukko vapautetaan. Tämä voi aiheuttaa ongelmia, jos lukon vapauttaminen vaatii toisen säikeen tekemään jotain, koska se voi tukkeutua ennen kuin se voi suorittaa sen estävän lukon vapauttamisen edellytyksen. Muistin lukitukset voidaan välttää kirjoittamalla ei-estokoodeja. Sen tekeminen voi kuitenkin olla monimutkaista ja vähemmän tehokasta kuin lukkojen käyttäminen. Älä unohda jättää kommenttisi alle.


Leave a Comment

3D Tulostuksen Perusteet: Huoltopäivitykset 3D-tulostimellesi

3D Tulostuksen Perusteet: Huoltopäivitykset 3D-tulostimellesi

3D-tulostimien ylläpito on erittäin tärkeää parhaiden tulosten saavuttamiseksi. Tässä on joitakin tärkeitä vinkkejä, jotka kannattaa pitää mielessä.

Kuinka yhdistää Windows 11 kannettava projektoriin/TV:hen

Kuinka yhdistää Windows 11 kannettava projektoriin/TV:hen

Lue tämä artikkeli oppiaksesi yksinkertaisen vaiheittaisen prosessin yhdistää kannettava tietokone projektoriin tai televisioon Windows 11 ja Windows 10 käyttöjärjestelmillä.

Canon Pixma MG5220: Skannaa Ilman Mustetta

Canon Pixma MG5220: Skannaa Ilman Mustetta

Kuinka käyttää skannaustoimintoa Canon Pixma MG5220:ssä, kun muste on loppu.

Kameran suljinäänen kytkeminen pois päältä – Galaxy S 21 Plus

Kameran suljinäänen kytkeminen pois päältä – Galaxy S 21 Plus

Ota kuvia kuin ninja ja hiljennä suljinääni Galaxy S21 Plus -laitteellasi. Katso myös, mitä voit tehdä, jos sinulla ei ole tätä vaihtoehtoa.

Kuinka kloonata kiintolevy

Kuinka kloonata kiintolevy

Nykyaikaisella digitaalisella aikakaudella, jossa data on arvokasta omaisuutta, kiintolevyn kloonaus Windowsissa voi olla ratkaiseva prosessi monille. Tämä kattava opas

Kuinka korjata WUDFRd-ohjain ei latautunut Windows 10:ssä?

Kuinka korjata WUDFRd-ohjain ei latautunut Windows 10:ssä?

Näetkö tietokonetta käynnistettäessä virheilmoituksen, jonka mukaan ohjain WUDFRd ei latautunut tietokoneellesi?

NVIDIA GeForce Experience -virhekoodin 0x0003 korjaaminen

NVIDIA GeForce Experience -virhekoodin 0x0003 korjaaminen

Onko työpöydälläsi NVIDIA GeForce -kokemusvirhekoodi 0x0003? Jos kyllä, lue blogi nähdäksesi kuinka korjata tämä virhe nopeasti ja helposti.

Mikä on SMPS?

Mikä on SMPS?

Tutustu SMPS:ään ja eri teholuokkien merkitykseen ennen kuin valitset SMPS:n tietokoneellesi.

Mitä on eristykseen perustuva turvallisuus?

Mitä on eristykseen perustuva turvallisuus?

Aikoivat syventyä aiheeseen, josta on tulossa yhä tärkeämpi kyberturvallisuuden maailmassa: eristykseen perustuva tietoturva. Tämä lähestymistapa

Automaattisen napsautuksen käyttäminen Chromebookille

Automaattisen napsautuksen käyttäminen Chromebookille

Tänään aioimme perehtyä työkaluun, joka voi automatisoida toistuvia napsautuksia Chromebookillasi: automaattiseen napsautuslaitteeseen. Tämä työkalu voi säästää aikaa ja