Kuinka kloonata kiintolevy
Nykyaikaisella digitaalisella aikakaudella, jossa data on arvokasta omaisuutta, kiintolevyn kloonaus Windowsissa voi olla ratkaiseva prosessi monille. Tämä kattava opas
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.
Nykyaikaisella digitaalisella aikakaudella, jossa data on arvokasta omaisuutta, kiintolevyn kloonaus Windowsissa voi olla ratkaiseva prosessi monille. Tämä kattava opas
Näetkö tietokonetta käynnistettäessä virheilmoituksen, jonka mukaan ohjain WUDFRd ei latautunut tietokoneellesi?
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.
Tutustu SMPS:ään ja eri teholuokkien merkitykseen ennen kuin valitset SMPS:n tietokoneellesi.
Aikoivat syventyä aiheeseen, josta on tulossa yhä tärkeämpi kyberturvallisuuden maailmassa: eristykseen perustuva tietoturva. Tämä lähestymistapa
Tänään aioimme perehtyä työkaluun, joka voi automatisoida toistuvia napsautuksia Chromebookillasi: automaattiseen napsautuslaitteeseen. Tämä työkalu voi säästää aikaa ja
Korjaa ongelma, jossa Roomba-robottiimuri pysähtyy, tarttuu kiinni ja kääntyy jatkuvasti ympäri.
Saat vastauksia kysymykseen, miksi Chromebookini ei käynnisty? Tässä hyödyllisessä oppaassa Chromebookin käyttäjille.
Steam Deck tarjoaa vankan ja monipuolisen pelikokemuksen aivan sormiesi ulottuvilla. Kuitenkin optimoidaksesi pelaamisesi ja varmistaaksesi parhaan mahdollisen
Muuta Fitbit Versa 4:n kellotaulua saadaksesi kellosi erilaisen ilmeen joka päivä ilmaiseksi. Katso kuinka nopeaa ja helppoa se on.