мини|250п|Виртуелна меморија комбинује активни RAM и неактивну меморију на ДАСД-у за формирање великог опсега непрекидних адреса.
У рачунарству, виртуелна меморија је техника управљања меморијом која се имплементира користећи и хардвер и софтвер. Она мапира меморијске адресе које користи програм, називају се виртуелне адресе, у физичке адресе у меморији рачунара. Процеси или таскови главну меморију виде како непрекидни адресни простор или како колекцију непрекидних сегмената. Оперативни систем управља виртуелним адресним просторима и додељује стварну меморију виртуелној меморији. Адреса за превођење хардвера у ЦПУ, обично се помиње као јединица за управљање меморијом или ММУ, аутоматски преводи виртуелне адресе у физичке адресе. Софтвер у оквиру оперативног система може проширити ове могућности да обезбеди виртуелни адресни простор који може да премаши капацитет реалне меморије и тиме референцира више меморије него што је физички присутно у рачунару.
Примарне предности виртуелне меморије укључују ослобађање апликације од потребе да управљају дељеним меморијским простором, повећава безбедност због меморијске изолације, и у стању је да концептуално користи више меморије него што би то можда физички било доступно, користећи технику страничења.
Својства Виртуелна меморија омогућава програмирање апликација лакшим, кријући фрагментацију физичке меморије; препуштајући Кернелу терет управљања меморијском хијерархијом (елиминишући потребу да програм управља преклапањима); и, када је сваки процес покренут у сопственом наменском адресном простору, избегавајући потребу за релокацијом програмског кода или избегавајући потребу да приступи меморији са релативним адресирањем.
Меморијска виртуелизација се може сматрати генерализацијом концепта виртуелне меморије.
Употреба Виртуелна меморија је саставни део модерне архитектуре рачунара; имплементација захтева подршку хардвера, обично, у облику меморијске управљачке јединице која је уграђена у процесор. Док није неопходно, емулатори и виртуелна машина могу користити хардверску подршку за повећање перформанси својих виртуелних меморијских имплементација. Према томе, старији оперативни системи, као што су они за мејнфрејм рачунаре 60-их, и они за персоналне рачунаре од почетка до средине 1980-их (нпр. DOS (оперативни систем)), генерално нису имали функционалност виртуелне меморије, мада значајни изузеци за мејнфрејмове 1960-их обухватају: за Атлас МЦП за Б5000 МТС, TSS/360 и CP/CMS за IBM System/360 Model 67 за GE 645 за RCA Spectra 70/46
је пример личног рачунара 1980-их који има виртуелну меморију.
Већина модерних оперативних система који подржавају виртуелну меморију такође покрећу сваки процес у свом наменском адресном простору. Сваки програм изгледа тако да има јединствени приступ виртуелној меморији. Међутим, неки старији оперативни системи (као што су OS/VS1 и OS/VS2 SVS, па чак и неки модернији (као што су IBM i) су оперативни системи који користе једно адресне просторе који покрећу све процесе у једном адресном простору састављеном од виртуелне меморије.
Уграђени системи други рачунарски системи са посебном сврхом који захтевају веома брзо и/или веома конзистентно време одзива могу се определити да не користе виртуелну меморију услед смањеног детерминизма; виртуелни меморијски системи активирају непредвидиве изузетке који могу произвести нежељене током И/У операција. Имплементирајући све ове операције помоћу софтвера (техником која се назива ) пре него са наменским хардвером, обезбеђује се да трошкови уграђеног хардвера буду мали.
Историја У 1940-им и 1950-им, све већи програми су морали да садрже логику за управљање примарном и секундарном меморијом, као што је преклапање. Виртуелна меморија је стога уведена не само да прошири примарну меморију, већ да такво проширење буде направљено што је могуће лакше програмерима да га користе. Да омогући мултипрограмирање и мултитаскинг, многи рани системи деле меморију између вишеструких програма без виртуелне меморије, као што су рани модели PDP-10 преко регистра.
Концепт виртуелне меморије је прво развијен од стране немачког физичара Фриц-Рудолф-a Гунтсцх-а у 1956. у својој докторској тези „Логички Дизајн Дигиталних Рачунара са Бишеструким Асихроним Ротирајућим Бубнјевима и Аутоматске Меморијске Операције Великих Брзина"; описује машину са 6 блокова од 100 речи примарног језгра меморије и адресни простор од 1000 блокова од 100 речи, са хардвером који аутоматски помера блокове између примарне меморије и секундарне бубањ меморије. Страничење је прво имплементирано на Универзитету у Манчестеру као начин да се прошири радна меморија Атлас рачунара , комбинујући својих 16 хиљада речи примарног језгра меморије са додатних 96 хиљада речи секундарне бубањ меморије. Први Атлас је наручен 1962, али прототипови страничења који су радили развијени су 1959. Године 1961,је независно пустила први комерцијални рачунар са виртуелном меморијом, Б5000, са меморијском сегментацијом пре него са страничењем.Ian Joyner on Burroughs B5000
Пре него што се виртуелна меморија могла имплементирати у мејнстрим оперативне системе, многи проблеми су морали да се реше. Динамичко адресно превођење је захтевало специјални хардвер који је био скуп и тежак за имплементацију; почетне имплементације су благо успориле приступ меморији Било је забринутости да ће нови системи-широких алгоритма који користе секундарну меморију бити мање ефикасни него раније коришћени алгоритми за специфичне апликације. Расправа око виртуелне меморије за комерцијалне рачунаре је завршена 1969.; IBM истраживачки тим, предвођен Дејвидом Саиром, је показао да је њихов систем преклапачке виртуелне меморије константно ради боље него најбоље ручно контролисани системи. Први мини рачунар који је увео виртуелну меморије је NORD-1; током 1970-их, други мини рачунари имплементирају виртуелну меморију, посебно VAX који покреће VMS.
Виртуелна меморија је уведена у X86 архитектуру са заштићеним режимом Интел 80286 процесора, али његова техника замене сегмента скалира од слабих до већих сегментних величина. Интел 80386 уводи подршку страничења испод постојећег сегментног слоја, омогућавајући изузетке у ланцу грешке странице са другим изузецима без двоструке грешке. Међутим, учитавање сегментних дескриптора је скупа операција, изазивајући дизајнере оперативног система да се ослањају искључиво на страничење пре него на комбинацију страничења и сегментације.
Страничење виртуелне меморије Скоро све имплементације виртуелне меморије деле виртуелни адресни простор у странице, блокове непрекидних виртуелних меморијских адреса. Странице су обично најмање 4 Килобајта; системи са великим опсегом виртуелних адреса или великим количинама реалне меморије углавном користе веће величине страница.
Табеле страница Табеле страница се користе за превођење виртуелне адресе виђене од стране апликације у физичке адресе које користи хардвер на обради инструкције; такав хардвер који управља овим специфичним превођењем је често познат као memory management unit. Сваки унос у табелу страница има заставу која указује да ли је одговарајућа страница у реалној меморији или не. Ако је у реалној меморији, унос странице табела ће садржати стварну меморијску адресу на којој је страница ускладиштена (меморисана, сачувана). Када се говори о станици преко хардвера, ако унос табела станица за странице указује да то није тренутно у реалној меморији, хардвер подиже изузетак грешке странице, позивајући се на страничење надзорне компоненте оперативног система.
Системи могу имати једну страну табеле за цео систем, одвајајући табеле страница за сваку апликацију и сегмент, дрво странице табела за велике сегменте или неком комбинацијом ових. Ако постоји само једна страница табеле, различите апликације раде истовремено, користећи различите делове једног опсега виртуелних адреса. Ако постоји више страница или сегмента табела, постоји више виртуелног адресног простора и истовремених апликација са одвојеним табелама страница преусмереним на различите реалне адресе.
Контролор (супервизор) страничења Овај део оперативног система ствара и управља табелама страница. Ако хардвер поставља грешке изузетака страница, супервизор страничења приступа секундарном складиштењу, враћа страницу која има виртуелну адресу која је резултовала у грешку странице, ажурира табеле страница да би одржао физичку локацију виртуелне адресе и говори механизму за превођење да рестартује захтев.
Када је сва физичка меморија у употреби, супервизор страничења мора ослободити страницу у примарној меморији да би сваповање-у страницу било задржано. Супервизор користи једну од разних алгоритама за замену страница, као што је најмање недавно коришћен, да се одреди која страница треба да се ослободи.
Забодене (pinned) странице Оперативни системи имају меморијске области које су забодена (никад се не замењују на секундарну меморију). Остали термини који се употребљени су закључане, фиксне, или ожичене странице. На пример, прекидачки механизми се ослањају на низ показивача на њихове управљаче, као што су У/И завршеци и грешке страница. Ако странице садрже ове показиваче или је код који позивају слободан за странице, руковање прекидима ће постати далеко сложеније и дуготрајније, нарочито у случају грешке странице прекида. Дакле, неки део структура табеле страница није слободан (дозвољен) за странице.
Неке странице се могу закључати за кратак временски период, друге могу бити забодене за дужи временски период, а остали морају бити трајно забодени (закључани). На пример: Код супервизора страничења и драјвери за складиштење секундарних уређаје на које странице бораве морају бити трајно закључани, јер у супротном не би радило страничење, јер неопходни код неће бити на располагању. Временски-зависне компоненте могу бити забодене да би се избегло променљиво кашњење страничења. Бафери којима се директно приступа преко периферних уређаја који користе Директан приступ меморији или У/И канале, мора се налазити у забоденим страницама док је У/И операција у току, јер су уређаји и магистрала за које су везани очекују да пронађу податке бафера смештене на физичким меморијски адресама, без обзира на то да ли магистрала има меморијску јединицу за управљање У/И, трансфери се не могу зауставити ако дође до квара странице и онда се рестартује када се грешка странице обради.
У IBM-овим оперативним системима за System/370 и наследним системима, термин је „фиксна“, и странице могу бити фиксне дугорочно, или могу бити краткорочно. Контролне структуре су често фиксне дугорочно (мерено по сату, односно, време се мери у секундама, пре него да се мери у интервалима мањим од секунде), док су У/И бафери су обично фиксни краткорочно ( обично је мерење значајно мање него што је на сату, вероватно за неколико милисекунди ). Заиста, оперативни систем има посебан објекат за " брзо фиксирање " ових краткорочних фиксних бафера података (фиксирање које се врши без дуготрајног посезања за контролор позивних инструкција). Поред тога, оперативни систем има још једно постројење за конвертовање апликација од тога да буду дугорочно фиксиране, на то да буду фиксиране на неодређено време, могуће данима, месецима или чак годинама ( међутим, овај објекат имплицитно захтева да апликација прво буде свапована-из (swapped-out), евентуално из пожељне-меморије, или микс жељене и нежељене меморије, и друго да буде свапована-у (swapped-in) непожељну меморију где трајно борави, колико год то може бити, овај објекат користи документован контролор позива инструкција).
Multics користи термин „жичани“. OpenVMS и Microsoft Windows се односе на странице које су привремено направљене као nonpageable (као за У/И бафере), користе термин „закључано“, или једноставно "nonpageable" за оне које никад нису доступне за странице.
Виртуелне-реалне операције