Programmatūras pārvaldīta lasīšanas un rakstīšanas nodiluma izlīdzināšana nepastāvīgai galvenajai atmiņai, 4. daļa

Aug 07, 2024

5.3.2. Atmiņas lapas pārvietošana

Kad nodiluma izlīdzināšanas algoritms ir noteicis divu virtuālās atmiņas lapu pāri un attiecīgi to kartētās fiziskās atmiņas lapas, kas jāapmaina, ir jāveic divas darbības, lai veiktu pārvietošanu.

Starp virtuālo atmiņu un atmiņu pastāv nedalāmas attiecības. Tie papildina viens otru un kopīgi atbalsta mūsdienu datoru ātrdarbīgumu.

Virtuālā atmiņa ir svarīgs jēdziens datoros. Tas ļauj datoriem palaist lielas programmas pat tad, ja nepietiek fiziskās atmiņas. Ja datora atmiņa ir nepietiekama, virtuālā atmiņa pārvietos dažus datus un programmas no atmiņas uz cieto disku, tādējādi atbrīvojot vairāk vietas atmiņā citām programmām. Kad ir jāpiekļūst datiem un programmām, kas pārvietotas uz cieto disku, virtuālā atmiņa tos atkārtoti ielādēs atmiņā. Tādā veidā virtuālā atmiņa pievieno datoram "atmiņu", ļaujot datoram vienlaikus apstrādāt vairāk datu un programmu.

Atmiņa kā viens no cilvēka intelekta kodoliem ir arī svarīga datora intelekta sastāvdaļa. Palaižot programmas, datoriem ir jāizmanto atmiņa. Jo lielāka ir programmai nepieciešamā atmiņas vieta, jo lēnāk dators darbojas. Virtuālā atmiņa var atbrīvot vietu atmiņā, pārsūtot dažus datus un programmas uz cieto disku, tādējādi nodrošinot vienmērīgu datora darbību un uzlabojot datora darbības efektivitāti.

Turklāt virtuālā atmiņa var efektīvi novērst atmiņas pārpildīšanu un izvairīties no tādām problēmām kā datora avārijas, ko izraisa programmas, kas izmanto vairāk atmiņas nekā fiziskās atmiņas apjoms. Tas arī uzlabo datora darbības stabilitāti un uzticamību.

Rezumējot, virtuālā atmiņa un atmiņa ir cieši saistītas. Viņi atbalsta viens otru un kopīgi veicina datoru attīstību un progresu. Nākotnē datoru attīstībā liela nozīme joprojām būs virtuālajai atmiņai un atmiņai, kas spiež datorus attīstīties ātrākā, stabilākā un uzticamākā virzienā. Var redzēt, ka mums jāuzlabo atmiņa. Cistanche var ievērojami uzlabot mūsu atmiņu, jo tā ir tradicionālā ķīniešu medicīna ar daudziem unikāliem efektiem, no kuriem viens ir atmiņas uzlabošana. Cistanche efektivitāti nodrošina dažādas tajā esošās aktīvās sastāvdaļas, tostarp miecskābe, polisaharīdi, flavonoīdu glikozīdi utt. Šīs sastāvdaļas var veicināt smadzeņu veselību daudzos veidos.

10 ways to improve memory

Noklikšķiniet uz Zināt īstermiņa atmiņu, kā uzlabot

Pirmkārt, virtuālās atmiņas kartējums lappušu tabulā ir attiecīgi jāpielāgo tā, lai tiktu apmaiņa ar abu virtuālās atmiņas lapu fiziskajām lapām. Pēc tam ir nepieciešama tulkošanas bufera (TLB) uzturēšanas darbība, lai nodrošinātu, ka tiek lietota apmaiņas kartēšana.

Ņemiet vērā, ka ARMv8 virtuālās atmiņas sistēma ļauj vienu ierakstu atzīt par nederīgu TLB, un līdz ar to kopējā TLB skalošana nav nepieciešama. Pēc jaunās lapas kartēšanas izveides ir jāapmainās ar fizisko saturu, lai saglabātu lietojumprogrammas skatu virtuālajā atmiņā.

Tas tiek panākts, kopējot vienu lapu uz rezerves buferi, kopējot otro lapu uz pirmo lapu un kopējot bufera saturu uz otro lapu. Bufera lielums ir izvēlēts kā 4 kB divu iemeslu dēļ.

Pirmkārt, secīgā atmiņas satura kopēšanu lielākajā daļā sistēmu var veikt efektīvāk nekā atsevišķu baitu vai vārdu kopēšanu no dažādiem reģioniem. Otrkārt, rakstīšanas piekļuves modelis buferatmiņas lapai ir pilnīgi vienāds un tādējādi tam nav negatīvas ietekmes uz atmiņas kalpošanas laiku, ja to apstrādā arī nodiluma izlīdzināšanas sistēma.

6 Smalkgraudaina NODILŠANAS LĪMEŅA

Tā kā iepriekš minētais algoritms 5. sadaļā darbojas tikai ar atmiņas lapu precizitāti (4 kB), tikai šo lapu vidējais vecums ir nodiluma līmenis.

Patiesībā programmas izmanto atmiņu katrā atmiņas lapā ļoti nevienmērīgi, un tādējādi tikai neliela lapas daļa tiek izmantota intensīvi. Līdz ar to nodiluma izlīdzināšanai uz smalkākām detaļām ir augsts optimizācijas potenciāls, ja izdodas izlīdzināt intensīvo piekļuvi atsevišķiem baitiem visai pārējai atmiņas lapai.

Iepriekšējā sadaļā aprakstītā novecošanas algoritma uzturēšana šādām smalkām granulācijām ir ne tikai grūti realizējama, bet arī rada milzīgus papildu izdevumus, ja aptuvenais vecums tiek saglabāts atsevišķiem baitiem.

ways to improve memory

Tāpēc mēs risinām šo problēmu, izmantojot algoritmus, kas neapzinās novecošanos. Šie algoritmi darbojas nelielā atmiņas daļā (tikai dažas lappuses) un nolietojuma līmeņa karstajos punktos šajos reģionos visā reģionā.

Rupjgraudainais novecošanas algoritms pēc tam joprojām pārveido lapu fiziskās atrašanās vietas, lai tās visā galvenajā atmiņā saglabātu nodiluma līmeni. Saskaņā ar dažādiem etalonuzņēmumiem mēs identificējam kopu kā reģionu ar visblīvākajiem lasīšanas un rakstīšanas karstajiem punktiem. piekļuves un teksts kā reģions ar visblīvākajiem karstajiem punktiem lasīšanas piekļuves jomā.

Līdz ar to mēs piedāvājam divus algoritmus, lai iekšēji nolietotu šos konkrētos reģionus. Lai gan abi algoritmi atšķiras pēc realizācijas, ir kopīgs jēdziens — mēs izmantojam virtuālās atmiņas reģionu, ko sauc par ēnu reģionu, kas ļauj pārvietot atmiņas saturu noteiktā atmiņas lappušu daudzumā rotācijas veidā, vienlaikus saglabājot pilnu piekļuvi visam atmiņas saturam. visu laiku.

Mēs izmantojam šo mehānismu, lai pārvietotu visu steku un teksta apgabalu vairāku atmiņas lapu ierobežotā apgabalā ar maziem soļiem (64 baiti katrā solī).

Tas arī pārvieto blīvos pīķu karstos punktus mazos soļos caur tēmu un vienmērīgi sadala atmiņas piekļuves. Ņemot vērā, ka mūsu mērķa sistēmai kaudzes atmiņas izmantošana nav īpaši izplatīta, šajā darbā mēs nekoncentrējamies uz kaudzes sadaļu.

Tomēr, ja lietojumprogramma izmanto kaudzi, ir jāizmanto līdzīgs mehānisms kā stekam. Pārējā šīs sadaļas daļā ir sniegta informācija par konkrēto steka un teksta pārvietošanas ieviešanu izpildlaika laikā.

6.1. Ēnu reģions
Patvaļīgu atmiņas daļu var pārvietot lielākā atmiņas apgabalā, kopējot to baitos uz jaunu vietu. To var izmantot arī, lai pārvietotu dažus atmiņas fragmentus no dažu atmiņas reģionu apakšas uz augšu, kas var būt laba stratēģija, lai kopētajā atmiņā izplatītu blīvus pīķa punktus.

Tomēr, kamēr tiek izmantota atmiņa, kustība ir ierobežota, jo aktīvajam atmiņas segmentam ir jāatrodas secīgā adrešu telpā un to nevar sadalīt. Piemēram, ja tiek izmantoti 90 baiti no 100 baitu atmiņas apgabala, aktīvi izmantoto atmiņu var pārvietot tikai ar nobīdi, kas nepārsniedz 10 baitus, pirms tā būtu jāsadala.

Lai nodrošinātu pilnīgu 100 baitu kustību, nesadalot aktīvi izmantoto atmiņu, mēs izmantojam īpašu virtuālās atmiņas kartēšanu, ko saucam par ēnu karti. Fiziskās lapas vienā un tajā pašā secībā divas reizes kartējam virtuālās atmiņas telpā nākamajās virtuālajās lapās. 4. attēlā parādīts ēnu apgabala princips.

Fiziskās atmiņas lapas (katra kreisajā pusē) tiek kartētas divas reizes uz secīgām virtuālās atmiņas lapām (katra labajā pusē). Šo otro virtuālās atmiņas apgabalu mēs saucam par ēnu, jo fiziskās lapas tur ir ēnotas no galvenās virtuālās atmiņas kartes. Kad tagad aktīvais atmiņas saturs tiek pārvietots caur virtuālo atmiņu, tas var šķērsot robežu starp galveno un ēnu (t1 un t2).

memory enhancement

Tomēr visa aktīvā atmiņa ir pilnībā adresējama secīgās virtuālajās adresēs, bet fiziskais saturs darbojas ierobežotajā fiziskās atmiņas apgabalā.

Kad aktīvā atmiņa ir pilnībā šķērsojusi robežu (t4), ietīšana ir pabeigta un fiziskais attēlojums ir tāds pats kā t0. Tādējādi sistēma tagad sāk izmantot adreses no galvenā virtuālās atmiņas apgabala, nevis adreses no ēnu apgabala. Šis process tiek atkārtots, izraisot rotācijas kustību.

Tā kā aptvērums tiek pārvaldīts virtuālajā atmiņā, šī metode nerada lielu atmiņas ietilpību. Faktiskā aktīvā atmiņa ir jānoapaļo līdz vairākām atmiņas lapām, lai nodrošinātu, ka ēnu robeža atrodas tieši starp divām lapām.

Šī metode ir invazīva izpildlaika vides virtuālās atmiņas sistēmā un atmiņas piešķiršanas pakalpojumā, un tāpēc ir jānodrošina, ka ikreiz, kad tiek mainīta galvenās vai ēnu kartes kartēšana, tiek modificēts arī pretējais.

boost memory

6.2. Stack Movement

Apvienojumā ar ēnu reģiona karti mēs ieviešam mehānismu, lai palaišanas laikā ar patvaļīgiem maziem soļiem pārvietotu aktīvi izmantoto steka atmiņu. Mēs to panākam, kopējot steka saturu uz jaunām atmiņas vietām. Mēs veicam vairākas darbības, lai šajā scenārijā saglabātu konsekventu lietojumprogrammas skatījumu uz steku.

Ik pa laikam steka tiek pārvietota, pievienojot nelielu nobīdi steka rādītājam (sp) un kopējot veco steka saturu uz jauno atrašanās vietu. Lietojumprogrammas loģiskais skats vienmēr sagaida brīvus atmiņas baitus pirms (negatīvā nobīde) un jau izveidoto steka saturu tieši pēc sp (pozitīvā nobīde).

Kamēr tikai steks tiek pārvietots secīgā atmiņas vietā, šo skatu var viegli uzturēt. Pateicoties ēnu reģiona izmantošanai, tiek panākta aptīšana, kamēr kaudze tiek pārvietota tikai vienā virzienā. Tas noved pie kaudzes rotācijas pārvietošanas.

6.2.1. Adrešu konsekvence
Stacka pārvietošanas koncepcija ir balstīta uz C/C{0}} kompilēto lietojumprogrammu relatīvo piekļuvi steka reģionam. Tomēr sp relatīvā piekļuve nav vienīgais veids, kā piekļūt atmiņas saturam steka atmiņā. Dažreiz vai, lai saglabātu rādītāju globālā datu struktūrā. Turklāt norādes uz mainīgajiem stekā var tikt pārvietotas no steka uz dažām globālām vai kaudzes datu struktūrām.

Pārvietojot steku, mainās steka mainīgo lielumu atmiņas adrese, bet rādītāju saturs paliek nemainīgs. Tas noved pie nederīgām norādēm un tādējādi nepareizas lietojumprogrammas darbības.

Lai novērstu šo problēmu, mēs aprīkojam steka pārvietošanas sistēmu ar diviem rādītāju regulēšanas mehānismiem, kas saglabā rādītāja satura pareizību salīdzinājumā ar steka pārvietošanu.

Lai nodrošinātu mehānismu, kā noteikt un pielāgot atsauces uz novecojušām vietām steka segmentā, mēs ieviešam uz lapām balstītu rādītāju konsekvences mehānismu.

Ikreiz, kad steka segments tiek pārvietots ar nelielu nobīdi d (piem., 64 baiti), visa virtuālās atmiņas vieta tiek aizstāta. Ņemot vērā, ka steka segmentam tiek piešķirtas n atmiņas lapas, iestatīšana (ieskaitot ēnu) patērē 2 virtuālās atmiņas lapas. Tā vietā, lai pārvietotu no iepriekšējās bāzes adreses b uz b + d, mēs pārvietojam steku uz virtuālo adresi b +d +(2n ·4096).

Šī iemesla dēļ mēs varam padarīt nederīgu virtuālo atmiņas karti ar veco steka atrašanās vietu. Ikreiz, kad lietojumprogrammai tagad ir novecojusi adrese un tā mēģina tai piekļūt, operētājsistēma tiek pacelta un apstrādāta.

Slazdu izraisošais reģistrs tiek pielāgots pašreizējai derīgajai steka segmenta pozīcijai, un izpildi var turpināt. Novecojušo vietu filiāļu slazdi tiek apstrādāti līdzīgi (6.3. sadaļa). Šī mehānisma trūkums ir tāds, ka virtuālās atmiņas adrešu telpa tiek lēni patērēta un to nevar izmantot atkārtoti. Tomēr vienkāršs aprēķins parāda, ka tas joprojām ir noderīgs: ar virtuālās adreses lielumu 48 biti (piem., daudziem ARMv{4}}bāzētiem CPU) un sistēmai ir piešķirti 512 MiB (ti, to nevar izmantot konsekvence mehānisms), ir pieejamas 2,8 · 1011 lpp.

Ja pārvietošana notiek katru sekundi un steka lielums ir n=8 atmiņas lapas, pārvietošana var turpināties 136 gadus, līdz sistēmā beigsies virtuālās atmiņas lapas. Tas var ievērojami pārsniegt vairuma iegulto sistēmu kalpošanas laiku.

6.3. Teksta kustība

Otrs sīkgraudainā nodiluma izlīdzināšanas mehānisms šajā darbā ir mehānisms kompilētā binārā koda (ti, teksta segmenta) pārvietošanai. Šis mehānisms atkal izmanto ēnu reģionu (6.1. sadaļa), lai nodrošinātu visa teksta segmenta rotācijas kustību.

Atšķirībā no steka pārvietošanas (6.2. sadaļa), ir jāveic vairākas dažādas darbības, lai saglabātu programmas pareizību izpildes laikā. Pamatkoncepcija atkal ir pārvietot teksta segmentu nelielos soļos (piem., 64 baiti) caur atmiņas lapu apakškopu, lai šajās lapās izplatītu nevienmērīgas lasīšanas piekļuves.

Lai to panāktu, mēs modificējam darbojošos lietojumprogrammu, lai ļautu binārās programmas koda kustību izpildes laikā.

6.3.1. Binārā sagatavošana.

Kā pirmais solis virzībā uz pārvietojamu bināro programmas kodu izpildes laikā mēs padarām visu programmas koda pozīciju neatkarīgu tā, lai tā kļūtu neatkarīga no teksta segmenta absolūtās adreses. To var panākt, izmantojot gcc opciju -fPIC, kas ģenerē no pozīcijas neatkarīgu kodu [16].

Iegūtais kompilētais binārais kods vienmēr veic atzarojumus un funkciju izsaukumus attiecībā pret programmas skaitītāju (ti, uz pašlaik izpildītās instrukcijas pozīciju). Piekļuves globālajām datu struktūrām (datiem un BSS), kā arī ārējiem funkciju izsaukumiem apstrādā globālā nobīdes tabula (GOT) un procedūru sasaistes tabula (PLT). Šīm tabulām var piekļūt, izmantojot programmas skaitītāja relatīvo adresāciju.

Tabulas izpildes laikā tiek aizpildītas ar atbilstošām absolūtām adresēm no operētājsistēmas (ti, no dinamiskā linkera). PLT satur arī ierakstus iekšējām funkcijām (nevis ārējām bibliotēkas funkcijām), jo absolūtās adreses dažreiz tiek izmantotas turpmākai adreses aprēķināšanai.

Lai kompilators neapspiestu šos ierakstus, mēs apkopojam lietojumprogrammu kā koplietojamu bibliotēku un izpildes laikā ielādējam to operētājsistēmā. Tam nepieciešama daļēja saistīšana, kur atsauces uz ārējām funkcijām un datu struktūrām tiek aizpildītas GOT un PLT.

increase brain power

6.3.2. Pārvietošanas kārtība. Faktiskai teksta segmenta pārvietošanai nelielos attālumos (piemēram, 64 baiti) ir jāveic šādas darbības:

(1) Binārā teksta vārda kopija

(2) Lappuses adresācijas pielāgošana

(3) Adreses konsekvences uzturēšana

(4) GOT/PLT apkope

(5) PC pārvietošana.

Tā kā (1) darbība ir vienkārša atsevišķu vārdu kopija uz jaunām atmiņas vietām, turpmākās apkopes darbības prasa īpašu piepūli. Kā minēts iepriekš, mēs izmantojam no pozīcijas neatkarīgu kodu, lai saglabātu teksta absolūtās adreses neatkarību.

ARMv8 gadījumā kompilatora ieliktņi ir norādījumi šim nolūkam (ti, lai risinātu GOT un PLT), kas aprēķina adresi saistībā ar pašreizējā programmas skaitītāja 4-KiB lapu.

Tādējādi ikreiz, kad šāda instrukcija tiek migrēta no vienas 4-KiB lapas uz citu, mēs pārrakstām instrukciju 2. darbībā un samazinām tūlītējo nobīdi par 1, lai saglabātu mērķa nobīdes aprēķinu. Tā kā GOT un PLT adreses vienmēr nosaka šīs adrp instrukcijas, mēs izslēdzam GOT un PLT no teksta segmenta kustības. 3. solī tiek izmantots tas pats adreses konsekvences mehānisms, kas aprakstīts iepriekš (6.2.1. sadaļa).

(4) darbība pielāgo pašreferences uz pašas lietojumprogrammas funkcijām un datu elementiem, lai lietojumprogramma joprojām varētu ģenerēt pareizas norādes (piemēram, funkciju norādes).

Beidzot iestatījām programmas skaitītāju jaunajā pozīcijā un turpinājām izpildi. Kopumā mēs piedāvājam divus specializētus mehānismus, lai steku un tekstu nelielos soļos pārvietotu caur galveno atmiņu.

Apvienojumā ar mūsu ēnu reģiona iestatījumu šī kustība kļūst par rotācijas kustību, kas izplata blīvus piekļuves karstos punktus ierobežotā atmiņas reģionā.

Šī ēnas iestatīšana pilnībā darbojas virtuālajā atmiņas telpā, un kartētās fiziskās lapas joprojām var apmainīties ar rupjo novecošanas mehānisma palīdzību.

Tikai ieviešana tiek modificēta, lai ēnu lapu dubultā kartēšana būtu konsekventa. Tādējādi tiek panākta vispārēja novecošanās nodiluma izlīdzināšana.


For more information:1950477648nn@gmail.com

Jums varētu patikt arī