Tarkvaraga hallatav lugemis- ja kirjutamiskulumise tasandus püsimälu jaoks, 4. osa
Aug 07, 2024
5.3.2 Mälulehe ümberpaigutamine
Kui kulumise nivelleerimise algoritm määrab kahe virtuaalse mälu lehe paari ja vastavalt nende vastendatud füüsilise mälu leheküljed vahetamiseks, on ümberpaigutamiseks vaja kahte sammu.
Virtuaalmälu ja mälu vahel on lahutamatu suhe. Need täiendavad üksteist ja toetavad ühiselt kaasaegsete arvutite kiiret tööd.
Virtuaalmälu on arvutites oluline mõiste. See võimaldab arvutitel käitada suuri programme isegi siis, kui füüsilisest mälust ei piisa. Kui arvuti mälust ei piisa, teisaldab virtuaalmälu osa andmeid ja programme mälust kõvakettale, vabastades seega rohkem mäluruumi teiste programmide jaoks. Kui kõvakettale teisaldatud andmetele ja programmidele on vaja juurdepääsu, laadib virtuaalmälu need uuesti mällu. Nii lisab virtuaalmälu arvutile "mälu", võimaldades arvutil korraga töödelda rohkem andmeid ja programme.
Mälu kui inimese intelligentsuse üks tuumadest on ka arvutiintelligentsuse oluline osa. Arvutid peavad programmide käivitamisel kasutama mälu. Mida suurem on programmi jaoks vajalik mäluruum, seda aeglasemalt arvuti töötab. Virtuaalmälu võib vabastada mäluruumi, kandes kõvakettale mõningaid andmeid ja programme, tagades nii arvuti tõrgeteta töö ja parandades arvuti tööefektiivsust.
Lisaks saab virtuaalmälu tõhusalt ära hoida mälu ületäitumist ja vältida selliseid probleeme nagu arvutikrahhid, mille põhjustavad programmid, mis kasutavad füüsilisest mälumahust rohkem mälu. See parandab ka arvuti tööstabiilsust ja töökindlust.
Kokkuvõtteks võib öelda, et virtuaalmälu ja mälu on omavahel tihedalt seotud. Nad toetavad üksteist ja edendavad ühiselt arvutite arengut ja edenemist. Arvutite edaspidises arengus mängivad virtuaalmälu ja mälu jätkuvalt olulist rolli, mis sunnib arvuteid arenema kiiremas, stabiilsemas ja töökindlamas suunas. On näha, et me peame oma mälu parandama. Cistanche võib oluliselt parandada meie mälu, sest see on traditsiooniline Hiina meditsiin, millel on palju ainulaadseid toimeid, millest üks on mälu parandamine. Cistanche'i efektiivsus tuleneb selles sisalduvatest erinevatest toimeainetest, sealhulgas parkhape, polüsahhariidid, flavonoidglükosiidid jne. Need koostisosad võivad mitmel viisil edendada aju tervist.

Klõpsake käsul Tea lühiajalist mälu, kuidas parandada
Esiteks tuleb virtuaalse mälu vastendus lehetabelis vastavalt kohandada nii, et mõlema virtuaalse mälu lehe füüsilisi lehti vahetatakse. Pärast seda on vaja tõlkevälispuhvri (TLB) hooldustoimingut, et tagada vahetatud vastenduse rakendamine.
Pange tähele, et ARMv8 virtuaalmälusüsteem võimaldab TLB-s üksikuid kirjeid kehtetuks muuta ja seega pole TLB täielik loputamine vajalik. Pärast uue lehe vastendamise loomist tuleb füüsiline sisu vahetada, et säilitada rakenduse vaade virtuaalmälus.
See saavutatakse ühe lehe kopeerimisega varupuhvrisse, teise lehe kopeerimisega esimesele lehele ja puhvri sisu kopeerimisega teisele lehele. Puhvri suuruseks on valitud 4 kB kahel põhjusel.
Esiteks saab järjestikust mälusisu kopeerida enamikus süsteemides tõhusamalt kui üksikute baitide või sõnade kopeerimine erinevatest piirkondadest. Teiseks on puhvermälu lehele kirjutamise juurdepääsumuster täiesti ühtlane ja seega ei mõjuta see mälu eluiga negatiivselt, kui seda haldab ka kulumistaseme süsteem.
6 PEENTERALINE KULUMISE TASUTAMINE
Kuna ülalmainitud 5. peatükis toodud algoritm töötab ainult mälulehtede granulaarsusel (4 kB), on kulumistasemega seotud ainult nende lehtede keskmine vanus.
Tegelikkuses kasutavad programmid iga mälulehe mälu väga ebaühtlaselt ja seetõttu kasutatakse intensiivselt vaid väikest osa lehest. Järelikult on kulumise tasandamisel peenemate detailide osas suur optimeerimispotentsiaal, kui see suudab ühtlustada intensiivset juurdepääsu ühele baidile kogu ülejäänud mälulehele.
Vananemist arvestava algoritmi säilitamine, nagu on kirjeldatud eelmises jaotises selliste peente graanulite jaoks, ei ole mitte ainult raske realiseerida, vaid põhjustab ka tohutut lisakulu, kui hinnanguline vanus salvestatakse üksikute baitide jaoks.

Seetõttu lahendame selle probleemi vananemist mitteteadvate algoritmidega. Need algoritmid töötavad väikesel osal mälust (ainult paar lehekülge) ja kulumistasemete tipppunktides nendes piirkondades kuni kogu piirkonnani.
Jämedateraline vananemist arvestav algoritm kaardistab seejärel lehtede füüsilised asukohad uuesti, et tagada nende kulumistaseme kogu põhimälu ulatuses. Erinevate võrdluskatsete kohaselt tuvastame virna piirkonnana, kus lugemise ja kirjutamise osas on kõige tihedamad kohad. juurdepääsud ja tekst on lugemisjuurdepääsuga kõige tihedamate punktidega piirkond.
Sellest tulenevalt pakume välja kaks algoritmi nende konkreetsete piirkondade sisemiseks kulumistasemeks. Kuigi mõlemad algoritmid erinevad teostuses, on olemas ühine kontseptsioon – me kasutame virtuaalset mälupiirkonda, mida nimetatakse varjupiirkonnaks, mis võimaldab liigutada mälusisu fikseeritud hulga mälulehtede sees pöörleval viisil, säilitades samal ajal täieliku juurdepääsu kogu mälu sisule. kogu aeg.
Kasutame seda mehhanismi kogu virna ja tekstipiirkonna liigutamiseks mitme mälulehega piiratud piirkonnas väikeste sammudega (igas etapis 64 baiti).
See liigutab ka väikeste sammudena läbi teema tihedad tipppunktid ja jaotab juurdepääsud mälule võrdselt. Arvestades, et meie sihtsüsteemi jaoks ei ole kuhjamälu kasutamine väga levinud, ei keskendu me selles töös hunniku jaotisele.
Kui rakendus aga kasutab hunnikut, tuleb kasutada sarnast mehhanismi nagu virna puhul. Ülejäänud selles jaotises kirjeldatakse konkreetset rakendust virna ja tekstide liikumise kohta käitusajal.
6.1 Varipiirkond
Suvalise mäluosa saab nihutada suuremas mälupiirkonnas, kopeerides selle baithaaval uude asukohta. Seda saab kasutada ka teatud mälutükkide teisaldamiseks mõne mälupiirkonna alt üles, mis võib olla hea strateegia tihedate tipppunktide levitamiseks kopeeritud mälus.
Kuid seni, kuni mälu on kasutusel, on liikumine piiratud, kuna aktiivne mälusegment peab asuma järjestikuses aadressiruumis ja seda ei saa poolitada. Näiteks kui 100-baidisest mälupiirkonnast kasutatakse 90 baiti, Aktiivselt kasutatavat mälu saab liigutada ainult maksimaalselt 10 baidise nihkega, enne kui see tuleb poolitada.
Et võimaldada 100 baiti täielikku liikumist ilma aktiivselt kasutatavat mälu tükeldamata, kasutame spetsiaalset virtuaalse mälu kaardistamist, mida nimetame varikaardiks. Me kaardistame samas jadas olevad füüsilised leheküljed kaks korda virtuaalsesse mäluruumi järgmisteks virtuaalseteks lehtedeks. Joonis 4 illustreerib varipiirkonna põhimõtet.
Füüsilise mälu lehed (igaüks vasakul) vastendatakse kaks korda järjestikusteks virtuaalse mälu lehtedeks (igaüks paremal). Nimetame seda teist virtuaalmälu piirkonda varjuks, kuna füüsilised leheküljed on seal varjutatud virtuaalse mälu põhikaardilt. Kui nüüd liigutatakse aktiivset mälusisu läbi virtuaalmälu, võib see ületada põhi- ja varimälu (t1 ja t2) piiri.

Sellegipoolest on kogu aktiivne mälu täielikult adresseeritav järjestikustel virtuaalaadressidel, kuid füüsiline sisu toimib piiritletud füüsilise mälu piirkonnas.
Kui aktiivne mälu on piiri täielikult ületanud (t4), on ümberminek lõppenud ja füüsiline esitus on sama, mis t0. Seega hakkab süsteem kasutama virtuaalse mälu põhipiirkonna aadresse, mitte varjupiirkonna aadresse. Seda protsessi korratakse, mis viib pöörleva liikumiseni.
Kuna ümberkujundamist hallatakse virtuaalmälus, ei too see meetod kaasa suurt mälumahtu. Tegelik aktiivne mälu tuleb ümardada mitmeks mäluleheküljeks, et varjupiir jääks täpselt kahe lehe vahele.
See meetod on invasiivne virtuaalmälusüsteemis ja käituskeskkonna mälujaotusteenuses ning seetõttu tuleb tagada, et kui põhi- või varikaardi kaardistamist muudetakse, muudetakse ka vastast.

6.2 Virna liikumine
Koos varjupiirkonna kaardiga rakendame mehhanismi, mis liigutab käitusajal aktiivselt kasutatavat pinumälu suvaliste väikeste sammudega. Me saavutame selle, kopeerides virna sisu uutesse mälukohtadesse. Rakendame mitmeid samme, et hoida selle stsenaariumi puhul rakenduse vaatenurk virna suhtes järjepidev.
Pinu paigutatakse aeg-ajalt ümber, lisades pinu osutile väikese nihke (sp) ja kopeerides vana virna sisu uude asukohta. Rakenduse loogiline vaade ootab alati vabu mälubaite enne (negatiivne nihe) sp ja juba loodud pinu sisu vahetult pärast (positiivne nihe) sp.
Kuni ainult virn on järjestikuses mäluruumis ümber paigutatud, saab seda vaadet hõlpsasti säilitada. Varjupiirkonna kasutamise tõttu saavutatakse ümberminek, samal ajal kui virna liigutatakse ainult ühes suunas. See viib virna pöörleva ümberpaigutamiseni.
6.2.1 Aadressi järjepidevus
Virna ringikujulise teisaldamise kontseptsioon põhineb C / C{0}} kompileeritud rakenduste suhtelisel juurdepääsul pinu piirkonnale. Kuid sp suhteline juurdepääs ei ole ainus viis pinumälus olevale mälu sisule juurde pääseda. Mõnikord või salvestada kursor globaalsesse andmestruktuuri. Lisaks võidakse pinus olevatele muutujatele osutavaid viiteid teisaldada ka virust välja teatud globaalsetesse või hunniku andmestruktuuridesse.
Viru ümberpaigutamise ajal muutub pinus olevate muutujate mäluaadress, samas kui osutite sisu jääb muutumatuks. See toob kaasa kehtetuid viiteid ja seega vale rakenduse käitumist.
Selle probleemi lahendamiseks varustame virna ümberpaigutamise süsteemi kahe kursori reguleerimise mehhanismiga, mis säilitavad kursori sisu õigsuse võrreldes virna ümberpaigutamistega.
Mehhanismi pakkumiseks virnasegmendis aegunud asukohtade viidete tuvastamiseks ja kohandamiseks rakendame lehepõhise kursori järjepidevuse mehhanismi.
Iga kord, kui pinusegmenti liigutatakse väikese nihke d võrra (nt 64 baiti), asendatakse kogu virtuaalmälu asukoht. Arvestades, et pinusegment eraldab n mälulehte, kulutab häälestus (kaasa arvatud vari) 2 virtuaalmälu lehekülge. Selle asemel, et endisest baasaadressist b asukohta b + d ümber paigutada, paigutame virna ümber virtuaalsele aadressile b + d +(2n ·4096).
Tänu sellele saame virtuaalse mälukaardi kehtetuks muuta virna vana asukohaga. Iga kord, kui rakendusel on nüüd aegunud aadress ja see proovib sellele juurde pääseda, kerkib lõks üles ja operatsioonisüsteem tegeleb sellega.
Lõksu põhjustav register kohandatakse virusegmendi kehtivale asukohale ja täitmine võib jätkuda. Vananenud asukohtadesse viivate filiaalide püüniseid käsitletakse sarnaselt (jaotis 6.3). Selle mehhanismi puuduseks on see, et virtuaalmälu aadressiruum kulub aeglaselt ja seda ei saa uuesti kasutada. Kuid lihtne arvutus näitab, et see on endiselt kasulik: virtuaalse aadressi suurus on 48 bitti (nt paljude ARMv{4}}põhiste protsessorite jaoks) ja süsteemi jaoks on eraldatud 512 MiB (st seda ei saa järjepidevuse tõttu kasutada mehhanism), 2,8 · 1011 lehekülge on saadaval.
Kui ümberpaigutamine toimub iga sekund ja virna suurus on n=8 mälulehte, võib ümberpaigutamist jätkata 136 aastat, kuni süsteemi virtuaalmälu lehed saavad otsa. See võib ületada enamiku manustatud süsteemide eluea.
6.3 Teksti liikumine
Teine peeneteralise kulumise tasandamise mehhanism selles töös on mehhanism kompileeritud binaarkoodi (st tekstisegmendi) liigutamiseks. See mehhanism kasutab jällegi varjupiirkonda (jaotis 6.1), et võimaldada kogu tekstilõigu pöörlevat liikumist.
Erinevalt virna teisaldamisest (jaotis 6.2) tuleb programmi täitmise ajal korrektsuse säilitamiseks läbi viia mitmeid erinevaid samme. Põhikontseptsioon on jällegi liigutada tekstisegmenti väikeste sammudega (nt 64 baiti) läbi mälulehtede alamhulga, et jaotada nendel lehtedel ebaühtlased lugemispääsud.
Selle saavutamiseks muudame töötavat rakendust, et võimaldada binaarprogrammi koodi liikumist täitmise ajal.
6.3.1 Binaarne ettevalmistus.
Esimese sammuna käivitamise ajal liigutatava binaarprogrammi koodi poole muudame kogu programmikoodi positsiooni sõltumatuks nii, et see muutub sõltumatuks tekstisegmendi absoluutaadressist. Seda saab saavutada gcc suvandi -fPIC abil, mis genereerib positsioonist sõltumatu koodi [16].
Saadud kompileeritud kahendkood sooritab harusid ja funktsioonikutseid alati programmiloenduri suhtes (st hetkel täidetava käsu asukoha suhtes). Juurdepääsu globaalsetele andmestruktuuridele (andmed ja BSS), aga ka väliseid funktsioonikutseid haldavad globaalne nihketabel (GOT) ja protseduuride sidumistabel (PLT). Nendele tabelitele pääseb juurde programmiloenduri suhtelise adresseerimisega.
Tabelid täidetakse käitamise ajal operatsioonisüsteemi (st dünaamilise linkeri) vastavate absoluutaadressidega. PLT sisaldab ka sisemiste funktsioonide (mitte väliste teegi funktsioonide) kirjeid, kuna mõnikord kasutatakse edasiseks aadressi arvutamiseks absoluutaadresse.
Vältimaks nende kirjete mahasurumist kompilaatori poolt, kompileerime rakenduse jagatud teegina ja laadime selle käitamise ajal operatsioonisüsteemi. See nõuab osalist linkimist, kus GOT-is ja PLT-s on viited välistele funktsioonidele ja andmestruktuuridele.

6.3.2 Ümberpaigutamise rutiin. Tekstisegmendi tegelik liikumine väikeste vahemaade tagant (nt 64 baiti) nõuab järgmisi samme:
(1) Kahendteksti sõnaline koopia
(2) Lehepõhise adresseerimise kohandamine
(3) Aadressi järjepidevuse säilitamine
(4) GOT/PLT hooldus
(5) Arvuti ümberpaigutamine.
Kui samm (1) on üksikute sõnade lihtne koopia uutesse mälukohtadesse, siis järgnevad hooldusetapid nõuavad erilist pingutust. Nagu eelnevalt mainitud, kasutame positsioonist sõltumatut koodi, et säilitada teksti absoluutaadressi sõltumatus.
ARMv8 puhul on kompilaatori lisad selleks otstarbeks (st GOT ja PLT adresseerimiseks) juhised, mis arvutavad praeguse programmiloenduri 4-KiB lehe suhtes aadressi.
Seega, kui selline käsk liigub ühelt 4-KiB lehelt teisele, kirjutame juhise sammus (2) ümber ja vähendame vahetut nihet 1 võrra, et säilitada nihke arvutamine sihtmärgini. Kuna GOT- ja PLT-aadressid määratakse alati nende adrp-juhiste järgi, jätame GOT- ja PLT-aadressid tekstisegmendi liikumisest välja. Etapp (3) kasutab sama aadressi järjepidevuse mehhanismi, mida on kirjeldatud varem (jaotis 6.2.1).
Etapp (4) kohandab eneseviiteid rakenduse enda funktsioonidele ja andmeelementidele, et rakendus saaks ikkagi nende jaoks õigeid viiteid genereerida (nt funktsiooninäitajad).
Lõpuks seadsime programmi loenduri uude positsiooni ja jätkasime täitmist. Üldiselt pakume kahte spetsiaalset mehhanismi virna ja teksti liigutamiseks väikeste sammudega läbi põhimälu.
Koos meie varjupiirkonna seadistusega muutub see liikumine pöörlevaks liikumiseks, mis levitab tihedaid juurdepääsupunkte üle piiratud mälupiirkonna.
See varjuseadistus toimib täielikult virtuaalses mäluruumis ja kaardistatud füüsilisi lehekülgi saab endiselt vahetada jämedateralise vananemist arvestava mehhanismi abil.
Ainult teostust muudetakse nii, et varjulehtede kahekordne vastendamine oleks järjepidev. Seega saavutatakse üldvananemist arvestav kulumise tasandamine.
For more information:1950477648nn@gmail.com






