Virtualioji atmintis: kas tai, kaip veikia ir kodėl svarbi

Sužinokite, kas yra virtualioji atmintis, kaip ji veikia, puslapiavimas, privalumai ir trūkumai — aiškus paaiškinimas, kodėl tai svarbu kompiuterių našumui.

Autorius: Leandro Alegsa

Virtualioji atmintis – tai atminties valdymo mechanizmas, plačiai naudojamas šiuolaikiniuose kompiuteriuose. Tai leidžia programoms „matyti“ ir naudoti atskirą, nuoseklų atminties bloką, nors fizinė atmintis (RAM) gali būti paskirstyta tarp daugelio programų. Virtualioji atmintis sukuria iliuziją, kad kiekviena programa turi nuosavą didelės apimties atmintį, nors iš tikrųjų dalis duomenų gali būti saugoma diske.

Kam reikalinga virtualioji atmintis?

Programa veikia naudodama programinę įrangą, kuriai reikia kompiuterio atminties veiksmams atlikti. Daugelis modernės sistemos vienu metu paleidžia kelias programas — tai vadinama daugiaprocesoriumi (multitasking). Virtualioji atmintis leidžia:

  • Izoliuoti programas – viena programa negali lengvai perrašyti kitos atminties;
  • Efektyviai dalintis atmintimi – tos pačios atminties sritys gali būti bendrinamos tarp procesų (pvz., bibliotekos);
  • Vykdyti programas, kurių adresų erdvė didesnė už fizinę RAM – trūkstama dalis laikinai kaupiama diske (swap/ page file).
  • Kaip tai veikia (pagrindiniai mechanizmai)

    Idėja paprasta: programa matyti tam tikro dydžio atminties bloką (virtualią atmintį), kurį ji gali naudoti savo reikmėms. Šis blokas yra virtualus, nes jis yra sudarytas iš skirtingų fizinių vietų – dalis gali būti RAM, o dalis – diske.

    Adresų vertimus tarp programos „virtualių“ adresų ir fizinės atminties atlieka specialus aparatinės įrangos komponentas, vadinamas atminties valdymo bloku arba MMU (Memory Management Unit). Modernios operacinės sistemos taip pat valdo šį mechanizmą, palaiko puslapiavimo lenteles (page tables) ir tvarko puslapiavimo (paging) procesus.

    Dažniausiai naudojami du pagrindiniai mechanizmai:

  • Puslapiavimas (paging) – atmintis dalinama į fiksuoto dydžio „puslapius“; sistema perkelia puslapius tarp RAM ir disko pagal poreikį.
  • Segmentavimas (segmentation) – atmintis dalinama į logines sritis (pvz., kodas, duomenys), kurių dydis gali būti kintamas; rečiau naudojamas atskirai nei puslapiavimas.
  • Puslapiavimas ir „page fault“

    Kai programa bando pasiekti adresą, esančią virtualiame bloke, kurio nėra RAM atmintyje, kyla vadinamasis page fault (puslapio klaida). Operacinė sistema sustabdo programą, įkelia reikiamą puslapį iš disko į RAM ir, jei reikia, iš RAM iškelia kitą puslapį į diską (swap). Šis procesas vadinamas puslapiavimu arba „swapping“.

    Puslapiavimo kaštai:

  • Įkėlimas iš disko žymiai lėtesnis nei skaitymas iš RAM — todėl dažni page fault’ai žymiai sulėtina programų darbą.
  • Sunku numatyti atsaką realiu laiku – vienas iš pagrindinių priežasčių, kodėl kai kurios sistemos (ypač įterptinėse sistemose) virtualiosios atminties nenaudoja.
  • Puslapių keitimo strategijos ir optimizavimas

    Norint sumažinti page fault’ų skaičių, operacinės sistemos naudoja skirtingas puslapio pakeitimo (page replacement) algoritmų taisykles, pvz.:

  • LRU (Least Recently Used) – iš RAM išmeta tą puslapį, kuris ilgiau buvo nenaudojamas;
  • FIFO (First-In, First-Out) – išmeta puslapį, kuris į RAM įkeltas pirmas;
  • Optimalus (theoretical) – metas išmesti tą puslapį, kuriam ateityje rečiausiai reikės (praktikoje neįgyvendinamas, bet naudojamas kaip palyginimo standartas).
  • Kodėl virtualioji atmintis yra svarbi?

    Virtualioji atmintis suteikia keletą praktinių privalumų:

  • Multitaskingo palaikymas – leidžia daugybei programų veikti vienu metu net esant ribotai RAM;
  • Saugumas ir izoliacija – kenkėjiška arba klaidinga programa negali tiesiogiai pakeisti kitos programos atminties be kontrolės;
  • Paprastesnis programų rašymas – programuotojams nereikia rūpintis fizinės atminties paskirstymu tarp programų;
  • Efektyvesnis atminties naudojimas – nenaudojami programos segmentai gali būti nukopijuoti į diską, atlaisvinant RAM aktyviems procesams.
  • Kada virtualiosios atminties nenaudoti?

    Yra situacijų, kai virtualioji atmintis netinka:

  • Įterptinės (embedded) ir realaus laiko sistemos – joms reikia garantuoto ir pastovaus atsako laiko; page fault’ai gali sukelti nenuspėjamą delsą;
  • Aukštos našumo grafikos arba skaičiavimo užduotys – diskinių operacijų vėlavimas gali žymiai sumažinti našumą (pvz., kai naudojama daug duomenų, bet trūksta RAM arba swap intensyviai naudojamas).
  • Praktiniai patarimai

    Jei dirbate su asmeniniu kompiuteriu:

  • Stebėkite atminties naudojimą naudodami sistemos monitoriaus įrankius;
  • Apsvarstykite RAM didinimą, jei dažnai vyksta intensyvus puslapiavimas (sistemų lėtėjimas);
  • Operacinės sistemos dažnai leidžia konfigūruoti puslapio failo (page file / swap) dydį — didesnis failas sumažina OOM (out-of-memory) riziką, bet užima vietą diske ir gali sulėtinti veikimą, jei naudojamas aktyviai.
  • Saugumo ir dizaino pastabos

    Virtualioji atmintis taip pat svarbi saugumo kontekste: atskiri procesų adresų erdvės saugo duomenis nuo atsitiktinio perrašymo. Tačiau programavimo klaidos (pvz., nenaudojamų rodyklių) arba saugumo spragos gali leisti išnaudoti atminties valdymą, todėl svarbu laikytis gerų praktikos taisyklių kuriant programinę įrangą.

    Apibendrinant: virtualioji atmintis yra kertinė šiuolaikinių kompiuterių ir operacinių sistemų dalis — ji suteikia lankstumą, apsaugą ir leidžia efektyviai tvarkyti ribotus fizinius išteklius, nors tuo pačiu gali sukelti našumo problemų ten, kur reikia nuolatinio ir greito atsako.

    Programa galvoja, kad turi didelį gretimų adresų diapazoną, tačiau iš tikrųjų jos šiuo metu naudojamos dalys yra išsibarsčiusios po pagrindinę atmintį, o neaktyvios dalys yra išsaugotos disko faile.Zoom
    Programa galvoja, kad turi didelį gretimų adresų diapazoną, tačiau iš tikrųjų jos šiuo metu naudojamos dalys yra išsibarsčiusios po pagrindinę atmintį, o neaktyvios dalys yra išsaugotos disko faile.

    Klausimai ir atsakymai

    K: Kas yra virtualioji atmintis?


    A: Virtualioji atmintis - tai kompiuterio atminties valdymo būdas, leidžiantis programoms naudotis tam tikro dydžio atminties bloku. Šis atminties blokas gali būti iš skirtingų dalių, pavyzdžiui, pagrindinės atminties arba disko.

    K: Kaip veikia virtualioji atmintis?


    A: Virtualioji atmintis veikia taip, kad procesoriaus aritmetinis loginis blokas gali atlikti vertimus tarp taikomųjų programų ir sistemos išteklių. Šiuolaikinės operacinės sistemos taip pat atlieka dalį šio darbo. Kai programa bando pasiekti atminties bloką, kurio nėra sisteminėje atmintyje, ji sustabdoma ir blokas įkeliamas į sisteminę atmintį.

    Klausimas: Kokie yra kompiuterių, kuriuose nenaudojama virtualioji Atmintis, pavyzdžiai?


    A: Įterptinės sistemos yra vienas iš kompiuterių, kurie nenaudoja virtualiosios Atminties, pavyzdžių, nes jiems reikia greito atsako laiko arba tokio, kuris visada išliktų toks pat. Naudojant virtualiąją Atmintį sunku numatyti atsako laiką, todėl ji nenaudojama įterptinėse sistemose.

    K: Kas yra daugiaprocesorinis apdorojimas?


    A: Daugiaprocesorinis apdorojimas yra tada, kai kompiuteris vienu metu gali atlikti daugiau nei vieną veiksmą, vienu metu paleisdamas kelias programas, kurios dalijasi jo ištekliais.

    K: Kas atsitinka, kai programa bando pasiekti ne sisteminėje atmintyje esantį Atminties bloką?


    A: Kai programa bando pasiekti ne sisteminėje atmintyje esantį Atminties bloką, ji bus sustabdyta, o blokas bus įkeltas į sisteminę Atmintį.

    K: Kas yra puslapiavimas?


    A: Paging reiškia tai, kas nutinka, kai tai, kas buvo toje sistemos Atminties dalyje, turi būti įrašyta atgal į diską dėl to, kad programa kreipiasi į kitą dalį, kuri iš pradžių ten nebuvo saugoma.


    Ieškoti
    AlegsaOnline.com - 2020 / 2025 - License CC3