Тема 22

Виртуална памет и начини за транслация на адресите.


страницата се нуждае от дописване/преглеждане


Въведение

Преди около 20-30 години оперативната памет е много скъпа, докато магнитните дискове, макар по-бавни, са много по-евтини за запомняне на един бит. От друга страна програмите започвали да нарастват и да се нуждаят от по-големи адресни пространства.
При това една голяма програма е статична и само една малка част от нея е динамична. Затова се въвежда принципът на виртуалната памет – при нея в компютрите се работи с виртуален адрес, който по размер е по-голям от физическия адрес на оперативната памет. Така виртуалното адресно пространство може да е много по-голямо по размер от реалното адресно пространство.

Виртуална памет

Виртуалната памет е множество отделни блокове от последователни адреси ( страници ). Най-разпространеният размер на една страница е 4 KB. Страниците съществуват независимо една от друга. Първоначално идеята е била необходимите в момента страници да са в реалната памет, а останалите на диска. Но в наши дни реалната ( основната ) памет може да е почти колкото виртуалната. Така реалното адресно пространство може да е колкото виртуалното. Въпреки това разбиването на страници позволява да имаме схема на транслация на адреса.

theme_15_VirtualMemoryModel.PNG

Адресация

Адресът се състои от 2 части – Virtual Page Number и Page Offset – отместване в границите на страницата ( ако страницата е 4 KB offset-а е 12 bit ). Чрез Paging Unit-a VPN-a се преобразува в Page/Physical Frame Format ( номер на реален frame – както в cache frame-ове )( и обратно ). Това преобразуване се поддържа от архитектурата и чрез него преминаваме от виртуален в реален номер на страница и съответно от виртуален в реален адрес. В наши дни виртуалната памет е част от операционната система, тя се грижи за преобразуването на адресите и чрез механизма на виртуалната памет OS може да manage-ва процесите – например всеки процес да работи от адрес 0 с 32-битово поле и при смяна на процес да се презареждат нови адреси ( да се сменя съдържанието на ОП ). Ако процесите работят в отделни процесни пространства, то всеки процес ще се shift-ва спрямо началото ( това не е добре ). Благодарение на механизма на виртуалната памет се реализират технологиите Multiprocessing, Multiprogramming, Security of Processes. Процесорът е този, който прави преобразуването от Virtual към реален адрес чрез вградено хардуерно устройство за Paging. Всичко останало се извършва от операционната система.

Таблица на страниците

Класическата виртуална памет има таблица на страниците, която се пази някъде в реалната ОП. PT Root е фиксиран регистър в процесора, в който се държи адресът на началото на таблицата. Съдържанието на този регистър може да бъде променяно.
Page Table-a се състои от редове – всеки ред от таблицата съответства на номер на виртуална страница. Класическият размер е 32 бита за ред( при 32-битова машина ), което прави 4MB таблица - таблицата е 1 000 000 реда, което са 1М виртуални страници и всеки ред е по 4 bytes ( 20 bit за VPN ). Тези 4 MB трябва да се неподвижни. Всеки ред ( entry ) се състои от:

  1. Present bit – показва дали е представена физическа страница, която съответства на виртуалната, ако този бит е 1 – има, ако е 0 – няма
  2. В случай, че има – трябва да има адрес на фрейма, адресът е малък, защото е кратен на 4К => адресът на frame-a е 20 bit ( всеки адрес на frame завършва на 12 нули . Ако P e 0 процесорът не се занимава и предава управлението на OS, която трябва да разположи тази страница в реалната памет. Тя търси свободно място в паметта и ако намери – слага тази страница на съответното свободно място в ОП и записва 20-битовия номер на реалния фрейм в PFN(physical frame number) и слага P=1 за „намерена страница”, връща се от прекъсването, процесорът отново започва да работи и търси страницата, като прави нова адресация. Разликата е, че този път той открива страницата.
  3. В свободното място между P I PFN има 11 bits. Първият от тях е Dirty – ако поне веднъж е писано нещо по страницата, този бит става 1, следователно когато трябва да се махне от ОП, този фрейм трябва да се запише на диска( във виртуалната памет ).
  4. Когато в ОП няма място, операционната система взема решение коя страница да се изхвърли. Това се определя по Least Recently Used Algorithm ( LRU ). За да стане това останалите битове се използват за брояч на обръщенията – при всяко обръщение ( четене, писане ) броячът става 1. Периодично OS минава и чисти брояча, което за момент спира работата. Ако види, че D e 1 – записва на диска, иначе – не.

Ако адресите са 64 bit, а не 32 bit, тогава остават 52 bits за номера на page-a и table-ът става огромен => този механизъм е неприложим за 64 bit ( приложим е максимално за 32 бита ).

И тогава какво?

За 64 bit адресация технологията се променя – правят се таблици на няколко нива (multi-level table). Номерът VPN се разделя на две части по 32 бита - старшите 32 бита са номер на елемент в таблицата на първо ниво. Адресът на началото на таблица на първо ниво е в регистър ROOT. Елементите на таблицата на първо ниво съдържат адрес на начало на таблица от второ ниво – за всеки елемент от таблицата на първо ниво има отделна таблица на второ ниво. Оттам нататък се адресира като в 32-битовия случай – номерът в таблицата на второ ниво в е младшите 32 бита на VPN.

Страници срещу сегменти

Предимството на виртуалната адресация пред сегментацията във връзка с процесите (отделните работещи програми) е, че смяна на процесите означава само смяна на записите в PT Root. Тоест, ако се сменя адресното пространство, всичко остава в паметта, защото всички програми работят във виртуални адресни пространства.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License