Ohjelmistohallittu luku- ja kirjoituskulumisen tasoitus haihtumattomalle päämuistille, osa 4

Aug 07, 2024

5.3.2 Muistisivun siirto

Kun kulumistasoitusalgoritmi määrittää kahden virtuaalisen muistisivun parin ja vastaavasti niille yhdistetyt fyysiset muistisivut vaihdettavaksi, tarvitaan kaksi vaihetta siirron suorittamiseksi.

Virtuaalimuistin ja muistin välillä on erottamaton suhde. Ne täydentävät toisiaan ja tukevat yhdessä nykyaikaisten tietokoneiden nopeaa toimintaa.

Virtuaalimuisti on tärkeä käsite tietokoneissa. Sen avulla tietokoneet voivat suorittaa suuria ohjelmia, vaikka fyysinen muisti ei riitä. Kun tietokoneen muisti ei riitä, virtuaalimuisti siirtää osan tiedoista ja ohjelmista muistista kiintolevylle vapauttaen siten enemmän muistia muiden ohjelmien käyttöön. Kun kiintolevylle siirrettyjä tietoja ja ohjelmia on käytettävä, virtuaalimuisti lataa ne uudelleen muistiin. Tällä tavalla virtuaalimuisti lisää "muistia" tietokoneeseen, jolloin tietokone voi käsitellä enemmän tietoja ja ohjelmia samanaikaisesti.

Muisti, joka on yksi ihmisen älykkyyden ytimistä, on myös tärkeä osa tietokoneälyä. Tietokoneiden on käytettävä muistia ohjelmia ajaessaan. Mitä enemmän muistitilaa ohjelma vaatii, sitä hitaammin tietokone toimii. Virtuaalimuisti voi vapauttaa muistitilaa siirtämällä tietoja ja ohjelmia kiintolevylle, mikä varmistaa tietokoneen sujuvan toiminnan ja parantaa tietokoneen tehokkuutta.

Lisäksi virtuaalimuisti voi tehokkaasti estää muistin ylivuodon ja välttää ongelmia, kuten tietokoneen kaatumisen, jonka aiheuttavat ohjelmat, jotka käyttävät fyysistä muistia enemmän muistia. Tämä parantaa myös tietokoneen toiminnan vakautta ja luotettavuutta.

Yhteenvetona voidaan todeta, että virtuaalimuisti ja muisti liittyvät läheisesti toisiinsa. He tukevat toisiaan ja edistävät yhdessä tietokoneiden kehitystä ja edistymistä. Tulevaisuudessa tietokoneiden kehityksessä virtuaalimuistilla ja muistilla on edelleen tärkeä rooli, mikä ajaa tietokoneita kehittymään nopeampaan, vakaampaan ja luotettavampaan suuntaan. Voidaan nähdä, että meidän on parannettava muistiamme. Cistanche voi parantaa muistiamme merkittävästi, koska se on perinteinen kiinalainen lääketiede, jolla on monia ainutlaatuisia vaikutuksia, joista yksi on muistin parantaminen. Cistanchen teho perustuu sen sisältämiin erilaisiin vaikuttaviin ainesosiin, mukaan lukien tanniinihappo, polysakkaridit, flavonoidiglykosidit jne. Nämä ainesosat voivat edistää aivojen terveyttä monin tavoin.

10 ways to improve memory

Napsauta Tiedä lyhytaikaista muistia, kuinka voit parantaa

Ensinnäkin sivutaulukon virtuaalimuistin kartoitus on säädettävä vastaavasti siten, että molempien virtuaalimuistisivujen fyysiset sivut vaihdetaan. Jälkeenpäin tarvitaan käännöspuskurin (TLB) ylläpitotoiminto, jotta voidaan varmistaa, että vaihdettua kartoitusta sovelletaan.

Huomaa, että ARMv8-virtuaalimuistijärjestelmä sallii yksittäisten merkintöjen mitätöimisen TLB:ssä, joten TLB-huuhtelu ei ole tarpeen. Kun uusi sivukartoitus on muodostettu, fyysinen sisältö on vaihdettava, jotta sovelluksen näkymä säilyy virtuaalimuistissa.

Tämä saavutetaan kopioimalla yksi sivu varapuskuriin, kopioimalla toinen sivu ensimmäiselle sivulle ja kopioimalla puskurin sisältö toiselle sivulle. Puskurin kooksi on valittu 4 kB kahdesta syystä.

Ensinnäkin peräkkäisen muistin sisällön kopioiminen voidaan tehdä tehokkaammin useimmissa järjestelmissä kuin yksittäisten tavujen tai sanojen kopioiminen eri alueilta. Toiseksi puskurimuistisivun kirjoituspääsykuvio on täysin yhtenäinen, eikä sillä näin ollen ole negatiivista vaikutusta muistin käyttöikään, jos sitä myös käsittelee kulumisen tasoitusjärjestelmä.

6 HIENRAKEINEN KULUMINEN

Koska osassa 5 mainittu algoritmi toimii vain muistisivujen tarkkuudella (4 kB), vain näiden sivujen keski-ikä on kulumistasoteltu.

Todellisuudessa ohjelmat käyttävät muistia jokaisen muistisivun sisällä hyvin epätasaisesti, joten vain pieni osa sivusta käytetään intensiivisesti. Tästä johtuen kulumisen tasoittamisella hienompiin rakeisiin on suuri optimointipotentiaali, jos se onnistuu tasoittamaan yksittäisten tavujen intensiiviset käytöt koko muulle muistisivulle.

Vanhenemistietoisen algoritmin ylläpitäminen edellisessä osiossa kuvatulla tavalla tällaisille hienojakoisuuksille ei ole vain vaikea toteuttaa, vaan se aiheuttaa myös valtavan ylimääräisen kulun, jos arvioidut iät tallennetaan yksittäisille tavuille.

ways to improve memory

Siksi käsittelemme tätä ongelmaa ei-ikääntymistietoisilla algoritmeilla. Nämä algoritmit toimivat pienellä osalla muistia (vain muutamalla sivulla) ja kulumistason huippupisteissä näillä alueilla koko alueelle.

Karkearakeinen ikääntymistä huomioiva algoritmi kartoittaa sitten uudelleen sivujen fyysiset sijainnit kulumistason saavuttamiseksi koko keskusmuistissa. Erilaisten vertailuajojen mukaan tunnistamme pinon alueeksi, jolla on tiheimmät luku- ja kirjoituspisteet. pääsyt ja teksti alueeksi, jolla on tiheimpiä lukuoikeuksia koskevia hot spotteja.

Tästä syystä ehdotamme kahta algoritmia näiden tiettyjen alueiden kulumisen tasoittamiseksi sisäisesti. Vaikka molemmat algoritmit eroavat toteutuksesta, on yhteinen käsite - käytämme virtuaalimuistialuetta, jota kutsutaan varjoalueeksi, jonka avulla voimme siirtää muistisisältöä kiinteässä määrässä muistisivuja pyörivällä tavalla säilyttäen samalla täyden pääsyn kaikkeen muistin sisältöön. kaikki ajat.

Käytämme tätä mekanismia siirtääksesi koko pinon ja tekstialueen useiden muistisivujen rajatulla alueella pienin askelin (64 tavua kussakin vaiheessa).

Tämä siirtää myös tiheät huippupisteet pienin askelin teeman läpi ja jakaa muistin käyttöoikeudet tasaisesti. Ottaen huomioon, että kohdejärjestelmässämme kasamuistin käyttö ei ole kovin yleistä, emme keskity tässä työssä kasoosaan.

Jos sovellus käyttää pinoa, on kuitenkin käytettävä samanlaista mekanismia kuin pinossa. Tämän osan loppuosassa kerrotaan pinon ja tekstin liikkeen erityisestä toteutuksesta ajon aikana.

6.1 Varjoalue
Satunnaista muistia voidaan siirtää suuremmalla muistialueella kopioimalla se tavuittain uuteen paikkaan. Tätä voidaan käyttää myös siirtämään joitakin muistinpätkiä joidenkin muistialueiden alhaalta ylös, mikä voi olla hyvä strategia tiheiden huippupisteiden levittämiseksi kopioidun muistin sisällä.

Kuitenkin niin kauan kuin muisti on käytössä, liike on rajoitettu, koska aktiivisen muistisegmentin on oltava peräkkäisessä osoiteavaruudessa eikä sitä voida jakaa. Jos esimerkiksi 100 tavun muistialueesta käytetään 90 tavua, aktiivisesti käytettyä muistia voidaan siirtää enintään 10 tavun siirtymällä ennen kuin se pitäisi jakaa.

Mahdollistaaksemme 100 tavun täyden liikkeen jakamatta aktiivisesti käytettyä muistia, käytämme erityistä virtuaalimuistikartoitusta, jota kutsumme varjokartaksi. Kartoitamme fyysiset sivut samassa järjestyksessä kahdesti virtuaaliseen muistitilaan seuraaviksi virtuaalisivuiksi. Kuva 4 havainnollistaa varjoalueen periaatetta.

Fyysisen muistin sivut (jokainen vasemmalla) kartoitetaan kahdesti peräkkäisiksi virtuaalimuistisivuiksi (kukin oikealla). Kutsumme näitä toista virtuaalimuistialuetta varjoksi, koska fyysiset sivut ovat siellä varjostettuja virtuaalimuistin pääkartalta. Kun nyt aktiivista muistia siirretään virtuaalimuistin läpi, se voi ylittää pää- ja varjon (t1 ja t2) välisen rajan.

memory enhancement

Silti koko aktiivinen muisti on täysin osoitettavissa peräkkäisissä virtuaaliosoitteissa, mutta fyysinen sisältö kiertää rajatun fyysisen muistialueen sisällä.

Kun aktiivinen muisti on ylittänyt rajan kokonaan (t4), kierto on valmis ja fyysinen esitys on sama kuin t0. Siten järjestelmä alkaa nyt käyttää virtuaalisen päämuistialueen osoitteita varjoalueen osoitteiden sijaan. Tämä prosessi toistetaan, mikä johtaa pyörivään liikkeeseen.

Koska kiertokulkua hallitaan virtuaalimuistissa, tämä menetelmä ei aiheuta suurta muistikapasiteettia. Todellinen aktiivinen muisti on pyöristettävä useisiin muistisivuihin, jotta varjoraja on tarkalleen kahden sivun välissä.

Tämä menetelmä on invasiivinen virtuaalimuistijärjestelmässä ja ajonaikaisen ympäristön muistinvarauspalvelussa, ja siksi on varmistettava, että aina kun joko pää- tai varjokartan kartoitusta muutetaan, myös vastinetta muutetaan.

boost memory

6.2 Pinon liike

Yhdessä varjoaluekartan kanssa toteutamme mekanismin aktiivisesti käytetyn pinomuistin siirtämiseksi ajon aikana mielivaltaisin pienin askelin. Saavutamme tämän kopioimalla pinon sisällön uusiin muistipaikkoihin. Toteutamme useita vaiheita pitääksemme sovelluksen näkökulman pinoon johdonmukaisena tässä skenaariossa.

Pinoa siirretään aika ajoin lisäämällä pinon osoittimeen pieni siirtymä (sp) ja kopioimalla vanha pinon sisältö uuteen sijaintiin. Sovelluksen looginen näkymä odottaa aina vapaata muistitavua ennen sp:n (negatiivinen offset) ja jo luodun pinon sisällön heti sp:n jälkeen (positiivinen offset).

Niin kauan kuin vain pino siirretään peräkkäisen muistitilan sisällä, tätä näkymää voidaan ylläpitää helposti. Varjoalueen käytön ansiosta saavutetaan kierto, kun pinoa liikutetaan vain yhteen suuntaan. Tämä johtaa pinon pyörivään siirtoon.

6.2.1 Osoitteen johdonmukaisuus
Pinon kiertokulkuinen siirtäminen perustuu C / C++ -käännettyjen sovellusten suhteelliseen pääsyyn pinoalueelle. Sp suhteellinen pääsy ei kuitenkaan ole ainoa tapa päästä käsiksi pinomuistin muistin sisältöön. Joskus tai tallentaa osoitin globaaliin tietorakenteeseen. Lisäksi pinon muuttujien osoittimet voidaan myös siirtää pinosta joihinkin globaaleihin tai kasatietorakenteisiin.

Pinon siirron aikana pinossa olevien muuttujien muistiosoitteet muuttuvat, kun taas osoittimien sisältö pysyy ennallaan. Tämä johtaa virheellisiin osoittimiin ja siten väärään sovelluskäyttäytymiseen.

Tämän ongelman ratkaisemiseksi varustamme pinonsiirtojärjestelmän kahdella osoittimen säätömekanismilla, jotka säilyttävät osoittimen sisällön oikeellisuuden pinon siirtoihin verrattuna.

Otamme käyttöön sivupohjaisen osoittimen johdonmukaisuusmekanismin, jotta voimme havaita ja säätää viittauksia pinosegmentin vanhentuneisiin paikkoihin.

Aina kun pinosegmenttiä siirretään pienellä siirtymällä d (esim. 64 tavua), koko näennäismuistin sijainti korvataan. Koska pinosegmentille on varattu n muistisivua, asennus (mukaan lukien varjo) kuluttaa 2 virtuaalimuistisivua. Sen sijaan, että siirrymme aiemmasta perusosoitteesta b osoitteeseen b + d, siirrämme pinon virtuaaliosoitteeseen b +d +(2n ·4096).

Tästä johtuen voimme mitätöidä virtuaalisen muistikartan pinon vanhaan sijaintiin. Aina kun sovelluksella on nyt vanhentunut osoite ja se yrittää käyttää sitä, käyttöjärjestelmä nostaa ansan ja hoitaa sen.

Loukkua aiheuttava rekisteri säädetään pinosegmentin nykyiseen kelvolliseen sijaintiin ja suoritus voi jatkua. Haarojen ansat vanhentuneisiin paikkoihin käsitellään samalla tavalla (osio 6.3). Tämän mekanismin haittana on, että virtuaalimuistin osoitetila kuluu hitaasti eikä sitä voida käyttää uudelleen. Yksinkertainen laskelma osoittaa kuitenkin, että tämä on edelleen hyödyllinen: virtuaaliosoitteen koko on 48 bittiä (esim. monille ARMv{4}}perustaisille prosessoreille) ja järjestelmälle on varattu 512 MiB (eli sitä ei voi hyödyntää johdonmukaisuuden vuoksi mekanismi), 2.8 · 1011 sivua saatavilla.

Kun siirto tapahtuu joka sekunti ja pinon koko on n=8 muistisivua, siirrot voivat jatkua 136 vuotta, kunnes järjestelmästä loppuvat virtuaalimuistisivut. Tämä voi ylittää selvästi useimpien sulautettujen järjestelmien käyttöiän.

6.3 Tekstin liike

Toinen hienorakeisen kulumisen tasoituksen mekanismi tässä työssä on mekanismi, jolla siirretään käännettyä binaarikoodia (eli tekstisegmenttiä). Tämä mekanismi käyttää jälleen varjoaluetta (osio 6.1) sallimaan koko tekstisegmentin kiertoliikkeen.

Toisin kuin pinon siirtäminen (osio 6.2), on suoritettava useita eri vaiheita ohjelman oikeellisuuden ylläpitämiseksi suorituksen aikana. Perusajatuksena on jälleen siirtää tekstisegmenttiä pienin askelin (esim. 64 tavua) muistisivujen osajoukon läpi, jotta epäyhtenäiset lukuoikeudet jaetaan näillä sivuilla.

Tämän saavuttamiseksi muokkaamme käynnissä olevaa sovellusta sallimaan binääriohjelman koodin liikkumisen suorituksen aikana.

6.3.1 Binäärivalmistelu.

Ensimmäisenä askeleena kohti siirrettävää binaariohjelmaa suorituksen aikana teemme koko ohjelmakoodin sijainnin itsenäiseksi siten, että siitä tulee riippumaton tekstisegmentin absoluuttisesta osoitteesta. Tämä voidaan saavuttaa käyttämällä gcc-optiota -fPIC, joka luo sijainnista riippumattoman koodin [16].

Tuloksena käännetty binäärikoodi suorittaa haaroja ja funktiokutsuja aina suhteessa ohjelmalaskuriin (eli sillä hetkellä suoritettavan käskyn sijaintiin). Pääsyjä globaaleihin tietorakenteisiin (data ja BSS) sekä ulkoiset funktiokutsut käsittelevät Global Offset Table (GOT) ja Procedure Linkage Table (PLT). Näihin taulukoihin pääsee ohjelmalaskurin suhteellisella osoitteella.

Taulukot täytetään vastaavilla absoluuttisilla osoitteilla käyttöjärjestelmästä (eli dynaamisesta linkittäjästä) ajon aikana. PLT sisältää myös merkintöjä sisäisille funktioille (ei ulkoisille kirjastotoiminnoille), koska absoluuttisia osoitteita käytetään joskus osoitteen lisälaskennassa.

Jotta kääntäjä ei tukahdu näitä merkintöjä, kokoamme sovelluksen jaetuksi kirjastoksi ja lataamme sen käyttöjärjestelmään ajon aikana. Tämä vaatii osittaisen linkityksen, jossa viittaukset ulkoisiin toimintoihin ja tietorakenteisiin täytetään GOT:ssa ja PLT:ssä.

increase brain power

6.3.2 Siirtymisrutiini. Tekstisegmentin todellinen liike pienillä etäisyyksillä (esim. 64 tavua) vaatii seuraavat vaiheet:

(1) Sanamuotoinen kopio binääritekstistä

(2) Sivupohjaisen osoitteen säätö

(3) Osoitteen johdonmukaisuuden ylläpito

(4) GOT/PLT-huolto

(5) PC:n siirto.

Vaikka vaihe (1) on yksinkertainen kopio yksittäisistä sanoista uusiin muistipaikkoihin, seuraavat ylläpitovaiheet vaativat erityistä vaivaa. Kuten aiemmin mainittiin, käytämme sijainnista riippumatonta koodia ylläpitääksemme tekstin absoluuttisen osoitteen riippumattomuutta.

ARMv8:lle kääntäjän lisäosat ovat tätä tarkoitusta varten (eli GOT:n ja PLT:n osoittamista varten), jotka laskevat osoitteen suhteessa nykyisen ohjelmalaskurin 4-KiB-sivuun.

Siten aina, kun tällainen käsky siirtyy yhdeltä 4-KiB-sivulta toiselle, kirjoitamme käskyn uudelleen vaiheessa (2) ja pienennämme välitöntä siirtymää yhdellä, jotta offset-laskenta pysyy kohteena. Koska GOT- ja PLT-osoitteet määräytyvät aina näillä adrp-käskyillä, jätämme GOT- ja PLT-osoitteet pois tekstisegmentin liikkeestä. Vaihe (3) käyttää samaa osoiteyhdenmukaisuusmekanismia kuin on kuvattu aiemmin (osio 6.2.1).

Vaihe (4) säätää itseviittauksia itse sovelluksen toimintoihin ja tietoelementteihin, jotta sovellus voi silti luoda oikeat osoittimet (esim. toimintoosoittimet).

Lopulta asetimme ohjelman vastapuolen uuteen asentoon ja jatkoimme suorittamista. Kaiken kaikkiaan tarjoamme kaksi erikoismekanismia pinon ja tekstin siirtämiseksi pienin askelin päämuistin läpi.

Yhdessä varjoalueasetustemme kanssa tästä liikkeestä tulee pyörivä liike, joka levittää tiheitä pääsypisteitä rajoitetulle muistialueelle.

Tämä varjoasetus toimii kokonaan virtuaalisessa muistitilassa, ja kartoitetut fyysiset sivut voidaan edelleen vaihtaa karkearakeisen ikääntymisen havaitsevan mekanismin avulla.

Vain toteutusta on muokattu pitämään varjosivujen kaksoiskartoitus johdonmukaisena. Näin saavutetaan kokonaisvanhenemistietoinen kulumistaso.


For more information:1950477648nn@gmail.com

Saatat myös pitää