Softverski upravljano čitanje i pisanje, izravnavanje istrošenosti za nepromjenjivu glavnu memoriju, dio 4

Aug 07, 2024

5.3.2 Premještanje memorijske stranice

Nakon što algoritam za izravnavanje istrošenosti odredi par od dvije stranice virtualne memorije, odnosno njihove mapirane stranice fizičke memorije, za zamjenu, potrebna su dva koraka za izvođenje premještanja.

Između virtualne memorije i memorije postoji neodvojiv odnos. Oni se nadopunjuju i zajednički podržavaju brzi rad modernih računala.

Virtualna memorija je važan koncept u računalima. Omogućuje računalima pokretanje velikih programa čak i kada nema dovoljno fizičke memorije. Kada memorija računala nije dovoljna, virtualna memorija će premjestiti neke podatke i programe iz memorije na tvrdi disk, oslobađajući tako više memorijskog prostora za druge programe. Kada treba pristupiti podacima i programima premještenim na tvrdi disk, virtualna memorija će ih ponovno učitati u memoriju. Na taj način virtualna memorija dodaje "memoriju" računalu, omogućujući računalu da istovremeno obrađuje više podataka i programa.

Pamćenje, kao jedna od srži ljudske inteligencije, također je važan dio računalne inteligencije. Računala moraju koristiti memoriju kada izvode programe. Što je veći memorijski prostor potreban programu, to računalo radi sporije. Virtualna memorija može osloboditi memorijski prostor prijenosom nekih podataka i programa na tvrdi disk, čime se osigurava nesmetan rad računala i poboljšava radna učinkovitost računala.

Osim toga, virtualna memorija može učinkovito spriječiti prelijevanje memorije i izbjeći probleme kao što su padovi računala uzrokovani programima koji koriste više memorije od veličine fizičke memorije. Ovo također poboljšava radnu stabilnost i pouzdanost računala.

Ukratko, virtualna memorija i memorija blisko su povezane. Međusobno se podupiru i zajednički potiču razvoj i napredak računala. U budućem razvoju računala, virtualna memorija i memorija i dalje će igrati važnu ulogu, gurajući računala da se razvijaju u bržem, stabilnijem i pouzdanijem smjeru. Vidi se da moramo poboljšati pamćenje. Cistanche može značajno poboljšati naše pamćenje jer je tradicionalni kineski lijek s brojnim jedinstvenim učincima, a jedan od njih je poboljšanje pamćenja. Djelotvornost Cistanche dolazi od različitih aktivnih sastojaka koje sadrži, uključujući taninsku kiselinu, polisaharide, flavonoidne glikozide itd. Ovi sastojci mogu promicati zdravlje mozga na mnogo načina.

10 ways to improve memory

Kliknite Znajte kako poboljšati kratkoročno pamćenje

Prvo, mapiranje virtualne memorije u tablici stranica mora se prilagoditi u skladu s tim tako da se fizičke stranice obje stranice virtualne memorije razmjenjuju. Poslije je potrebna operacija održavanja međuspremnika za gledanje prijevoda (TLB) kako bi se osiguralo da se razmijenjeno mapiranje primjenjuje.

Imajte na umu da sustav virtualne memorije ARMv8 dopušta da pojedinačni unosi budu poništeni u TLB-u, pa stoga potpuno ispiranje TLB-a nije potrebno. Nakon što se uspostavi novo mapiranje stranice, fizički sadržaj mora se razmijeniti kako bi se održao pogled aplikacije na virtualnu memoriju.

To se postiže kopiranjem jedne stranice u rezervni međuspremnik, kopiranjem druge stranice na prvu stranicu i kopiranjem sadržaja međuspremnika na drugu stranicu. Veličina međuspremnika odabrana je na 4 kB iz dva razloga.

Prvo, kopiranje sekvencijalnog memorijskog sadržaja može se učiniti učinkovitije u većini sustava nego kopiranje pojedinačnih bajtova ili riječi iz različitih regija. Drugo, uzorak pristupa pisanju stranici međuspremnika potpuno je ujednačen i stoga nema negativan utjecaj na životni vijek memorije ako njime upravlja i sustav za izravnavanje trošenja.

6 SINOZRNATO IZRAVNAVANJE TROŠENJA

Budući da prethodno spomenuti algoritam u Odjeljku 5 radi samo na granularnosti memorijskih stranica (4 kB), samo je prosječna starost ovih stranica određena na razini istrošenosti.

U stvarnosti, programi koriste memoriju unutar svake memorijske stranice vrlo neujednačeno, pa se stoga samo mali dio stranice koristi intenzivno. Posljedično, izravnavanje istrošenosti na finijim granularnostima ima veliki potencijal optimizacije ako uspije ujednačiti istrošenost intenzivnih pristupa pojedinačnim bajtovima cijelom ostatku memorijske stranice.

Održavanje algoritma koji je svjestan starenja kao što je opisano u prethodnom odjeljku za takve sitne granularnosti ne samo da je teško realizirati, već također uzrokuje goleme troškove ako se procijenjena starost pohranjuje za pojedinačne bajtove.

ways to improve memory

Stoga se ovim problemom bavimo algoritmima koji nisu svjesni starenja. Ovi algoritmi rade na malom dijelu memorije (samo nekoliko stranica) i trošenju vršnih vrućih točaka unutar ovih regija na cijelu regiju.

Grubo zrnati algoritam svjestan starenja tada još uvijek ponovno mapira fizičke lokacije stranica kako bi ih iznio na razinu istrošenosti u cijeloj glavnoj memoriji. Prema različitim referentnim vrijednostima, identificirali smo stog kao regiju s najgušćim vrućim točkama u pogledu čitanja i pisanja pristupe i tekst kao područje s najgušćim vrućim točkama u pogledu pristupa čitanju.

Slijedom toga, predlažemo dva algoritma za interno određivanje razine trošenja ovih specifičnih regija. Iako se oba algoritma razlikuju u implementaciji, postoji zajednički koncept - koristimo područje virtualne memorije, nazvano područje sjene, koje nam omogućuje premještanje memorijskog sadržaja unutar fiksne količine memorijskih stranica na rotacijski način, zadržavajući puni pristup svim memorijskim sadržajima na sva vremena.

Koristimo ovaj mehanizam za premještanje cijelog stoga i tekstualne regije unutar ograničene regije višestrukih memorijskih stranica u malim koracima (64 bajta u svakom koraku).

Ovo također pomiče guste vršne vruće točke u malim koracima kroz memoriju i ravnomjerno raspoređuje pristupe memoriji. Uzimajući u obzir da za naš ciljni sustav upotreba heap memorije nije baš uobičajena, u ovom se radu ne fokusiramo na odjeljak hrpe.

Međutim, ako aplikacija koristi hrpu, mora se primijeniti sličan mehanizam kao za stog. Ostatak ovog odjeljka detaljno opisuje specifičnu implementaciju za kretanje hrpe i teksta tijekom izvođenja.

6.1 Područje sjene
Proizvoljni dio memorije može se pomaknuti unutar veće memorijske regije kopiranjem po bajtovima na novu lokaciju. Ovo se također može koristiti za premještanje nekih dijelova memorije s dna na vrh nekih memorijskih područja, što može biti dobra strategija za širenje gustih vršnih vrućih točaka unutar kopirane memorije.

Međutim, sve dok je memorija u upotrebi, kretanje je ograničeno jer segment aktivne memorije mora biti u uzastopnom adresnom prostoru i ne može se podijeliti. Na primjer, ako se koristi 90 bajtova iz područja memorije od 100 bajtova, aktivno korištena memorija može se pomaknuti samo za pomak od najviše 10 bajtova prije nego što se mora podijeliti.

Kako bismo omogućili puno kretanje od 100 bajtova bez dijeljenja aktivno korištene memorije, koristimo posebno preslikavanje virtualne memorije, koje nazivamo kartom sjene. Fizičke stranice u istom slijedu dvaput preslikavamo u prostor virtualne memorije u sljedeće virtualne stranice. Slika 4 ilustrira princip područja sjene.

Stranice fizičke memorije (svaka na lijevoj strani) mapiraju se dva puta u uzastopne stranice virtualne memorije (svaka na desnoj strani). Ovo drugo područje virtualne memorije nazivamo sjenom jer su fizičke stranice ondje zasjenjene s mape glavne virtualne memorije. Kada se sadržaj aktivne memorije sada pomiče kroz virtualnu memoriju, može prijeći granicu između glavne i sjene (t1 i t2).

memory enhancement

Ipak, cijela aktivna memorija može se u potpunosti adresirati na uzastopnim virtualnim adresama, ali fizički sadržaj izvodi awraparound unutar ograničenog područja fizičke memorije.

Nakon što aktivna memorija u cijelosti prijeđe granicu (t4), omotavanje je dovršeno i fizički prikaz je isti kao u t0. Dakle, sustav sada počinje koristiti adrese iz regije glavne virtualne memorije umjesto adresa iz regije u sjeni. Ovaj proces se ponavlja, što dovodi do rotacijskog kretanja.

Kako se wraparoundom upravlja u virtualnoj memoriji, ova metoda ne uvodi veliko opterećenje memorijskog kapaciteta. Stvarna aktivna memorija mora se zaokružiti na više memorijskih stranica, kako bi se osiguralo da se granica sjene nalazi točno između dvije stranice.

Ova metoda je invazivna u sustavu virtualne memorije i servisu dodjele memorije okruženja vremena izvođenja, te stoga mora biti osigurano da kad god se modificira mapiranje glavne ili mape sjene, mijenja se i suprotni dio.

boost memory

6.2 Kretanje snopa

U kombinaciji s mapom regije u sjeni implementiramo mehanizam za premještanje aktivno korištene memorije steka tijekom izvođenja u proizvoljnim malim koracima. To postižemo kopiranjem sadržaja hrpe na nove memorijske lokacije. Implementiramo nekoliko koraka kako bismo održali perspektivu aplikacije o stogu dosljednom u ovom scenariju.

Stog se s vremena na vrijeme premješta dodavanjem malog pomaka pokazivaču stoga (sp) i kopiranjem starog sadržaja stoga na novu lokaciju. Logički prikaz aplikacije uvijek očekuje bajtove slobodne memorije prije (negativni pomak) sp-a i već stvoreni sadržaj hrpe neposredno nakon (pozitivni pomak) sp-a.

Sve dok se samo stog premješta unutar uzastopnog memorijskog prostora, ovaj se pogled može lako održavati. Zbog korištenja područja sjene, postiže se omotač dok se hrpa pomiče samo u jednom smjeru. To dovodi do rotacijskog premještanja hrpe.

6.2.1 Dosljednost adrese
Koncept cirkularnog pomicanja stoga temelji se na relativnom pristupu regiji stoga od strane C / C++ kompiliranih aplikacija. Međutim, sp relativeaccess nije jedini način pristupa memorijskom sadržaju unutar memorije steka. Ponekad ili za pohranu pokazivača u globalnu strukturu podataka. Nadalje, pokazivači na varijable na stogu također se mogu premjestiti izvan stoga u neke globalne ili heap strukture podataka.

Tijekom premještanja stoga mijenja se memorijska adresa varijabli na stogu, dok sadržaj pokazivača ostaje nepromijenjen. To dovodi do nevažećih pokazivača i stoga pogrešnog ponašanja aplikacije.

Kako bismo prevladali ovaj problem, opremili smo sustav za premještanje stoga s dva mehanizma za podešavanje pokazivača, koji održavaju ispravnost sadržaja pokazivača preko premještanja stoga.

Kako bismo osigurali mehanizam za otkrivanje i prilagodbu referenci na zastarjele lokacije unutar segmenta hrpe, implementiramo mehanizam dosljednosti pokazivača koji se temelji na stranici.

Kad god se segment stoga pomakne za mali pomak d (npr. 64 bajta), cijela virtualna memorijska lokacija se zamjenjuje. S obzirom da segment stoga dodjeljuje n memorijskih stranica, postava (uključujući sjenu) troši 2 stranice virtualne memorije. Umjesto premještanja s prijašnje bazne adrese b na b + d, premještamo stog na virtualnu adresu b +d +(2n ·4096).

Zbog toga možemo poništiti virtualnu memorijsku mapu na staru lokaciju stoga. Kad god aplikacija sada ima zastarjelu adresu i pokuša joj pristupiti, pokreće se zamka kojom upravlja operativni sustav.

Registar koji uzrokuje zamku je podešen na trenutnu važeću poziciju segmenta stoga i izvođenje se može nastaviti. Zamke za ogranke prema zastarjelim lokacijama postupaju na sličan način (odjeljak 6.3). Nedostatak ovog mehanizma je da se adresni prostor virtualne memorije polako troši i ne može se ponovno koristiti. Međutim, jednostavan izračun pokazuje da je ovo još uvijek korisno: s veličinom virtualne adrese od 48 bita (npr. za mnoge CPU-ove koji se temelje na ARMv8-) i 512 MiB koji se dodjeljuju sustavu (tj. ne može se iskoristiti dosljednošću mehanizam), 2,8 · dostupno je 1011 stranica.

Kada se premještanje događa svake sekunde, a veličina hrpe iznosi n=8 memorijskih stranica, premještanja se mogu nastaviti 136 godina dok sustav ne ostane bez stranica virtualne memorije. To može daleko premašiti životni vijek većine ugrađenih sustava.

6.3 Kretanje teksta

Drugi mehanizam za fino izravnavanje istrošenosti u ovom radu je mehanizam za premještanje kompajliranog binarnog koda (tj. tekstualnog segmenta). Ovaj mehanizam ponovno koristi područje sjene (odjeljak 6.1) kako bi omogućio rotacijsko kretanje cijelog segmenta teksta.

Za razliku od pomicanja stoga (odjeljak 6.2), potrebno je izvesti nekoliko različitih koraka kako bi se održala ispravnost programa tijekom izvođenja. Osnovni koncept je ponovno pomicanje tekstualnog segmenta u malim koracima (npr. 64 bajta) kroz podskup memorijskih stranica, kako bi se raspodijelili nejednaki pristupi čitanju unutar ovih stranica.

Da bismo to postigli, modificiramo pokrenutu aplikaciju kako bismo omogućili kretanje koda binarnog programa tijekom izvođenja.

6.3.1 Binarna priprema.

Kao prvi korak prema pomičnom binarnom programskom kodu tijekom izvođenja, cijeli položaj programskog koda činimo neovisnim tako da postaje neovisan o apsolutnoj adresi tekstualnog segmenta. To se može postići korištenjem gcc opcije -fPIC, koja generira kod neovisan o poziciji [16].

Rezultirajući kompajlirani binarni kod izvodi grananja i pozive funkcija uvijek u odnosu na programski brojač (tj. na poziciju trenutno izvršene instrukcije). Pristupima globalnim strukturama podataka (podacima i BSS-u), kao i pozivima vanjskih funkcija, upravlja Globalna offset tablica (GOT) i Procedure Linkage Table (PLT). Ovim se tablicama može pristupiti s relativnim adresiranjem programskog brojača.

Tablice se popunjavaju odgovarajućim apsolutnim adresama iz operativnog sustava (tj. iz dinamičkog povezivača) u vrijeme izvođenja. PLT također sadrži unose za interne funkcije (ne eksterne funkcije knjižnice), budući da se apsolutne adrese ponekad koriste za daljnji izračun adrese.

Kako bismo izbjegli bilo kakvo potiskivanje ovih unosa od strane prevodioca, kompiliramo aplikaciju kao zajedničku biblioteku i učitavamo je u operativni sustav tijekom izvođenja. Ovo zahtijeva djelomično povezivanje, gdje se reference na vanjske funkcije i strukture podataka popunjavaju u GOT i PLT.

increase brain power

6.3.2 Rutina premještanja. Stvarno kretanje segmenta teksta na malim udaljenostima (npr. 64 bajta) zahtijeva sljedeće korake:

(1) Riječna kopija binarnog teksta

(2) Prilagodba adresiranja na temelju stranice

(3) Održavanje dosljednosti adrese

(4) GOT/PLT održavanje

(5) Premještanje računala.

Dok je korak (1) izravna kopija pojedinačnih riječi na nove memorijske lokacije, sljedeći koraci održavanja zahtijevaju poseban napor. Kao što je prije spomenuto, koristimo kod neovisan o poziciji kako bismo održali neovisnost apsolutne adrese teksta.

Za ARMv8, umetci prevoditelja su upute za ovu svrhu (tj. za adresiranje GOT i PLT), koje izračunavaju adresu u odnosu na 4-KiB stranicu trenutnog programskog brojača.

Dakle, svaki put kada takva instrukcija migrira s jedne na drugu 4-KiB stranicu, prepisujemo instrukciju u koraku (2) i smanjujemo trenutni pomak za 1 kako bismo održali izračun pomaka prema cilju. Budući da su GOT i PLT adrese uvijek određene ovim adrp uputama, isključujemo GOT i PLT iz kretanja segmenta teksta. Korak (3) koristi isti mehanizam dosljednosti adrese kao što je ranije opisano (odjeljak 6.2.1).

Korak (4) prilagođava samoreferencije funkcijama i elementima podataka same aplikacije kako bi omogućio aplikaciji da i dalje generira ispravne pokazivače za njih (npr. pokazivače funkcija).

Napokon smo postavili programski brojač na novi položaj i nastavili s izvođenjem. Sve u svemu, pružamo dva specijalizirana mehanizma za pomicanje stoga i teksta u malim koracima kroz glavnu memoriju.

U kombinaciji s našom postavom regije sjene, ovo kretanje postaje rotacijsko kretanje, koje širi guste pristupne vruće točke preko ograničene memorijske regije.

Ova postavka sjene radi u cijelosti u prostoru virtualne memorije, a mapirane fizičke stranice još uvijek se mogu razmjenjivati ​​grubim mehanizmom koji shvaća starenje.

Izmijenjena je samo implementacija kako bi dvostruko preslikavanje stranica u sjeni ostalo dosljedno. Tako se postiže ujednačavanje trošenja svjesno ukupnog starenja.


For more information:1950477648nn@gmail.com

Mogli biste i voljeti