Кіріспе

Виртуалды мекенжайларды физикалық мекенжайлармен байланыстыратын дерек құрылымы. Бет кестесі – компьютердегі виртуалды жад жүйесінде виртуалды және физикалық мекенжайлар арасындағы байланыстарды сақтау үшін қолданылатын дерек құрылымы. Виртуалды мекенжайларды пайдаланушы процесте іске қосылатын бағдарлама қолданады, ал физикалық мекенжайларды аппараттық құралдар, нақтырақ айтқанда, кездейсоқ кіру жады (RAM) жүйесі қолданады. Бет кестесі – жадтағы деректерге қол жеткізу үшін қажетті виртуалды мекенжайды аудармалаудың маңызды бөлігі болып табылады. Бет кестесі компьютердің операциялық жүйесімен құрастырылады және виртуалды мекенжай аудармалау процесінде жадты басқару бірлігі немесе төменгі деңгейдегі жүйелік бағдарламалық жасақтама немесе микрокод арқылы оқылуы және жазылуы мүмкін.

Бет кестесінің рөлі

Виртуалды жадты пайдаланатын операциялық жүйелерде әрбір процесс үлкен, үздірілген жад бөлімдерімен жұмыс істеп жатқандай сезінеді. Шындығында, әрбір процестің жады физикалық жадтың әртүрлі участаларында орналасуы мүмкін, немесе екінші деңгейдегі жадқа, әдетте қатты дискіге (HDD) немесе қатты күйдегі дискіге (SSD) көшірілуі мүмкін. Процесс өзінің жадындағы деректерге қол жеткізуді қажеттенгенде, операциялық жүйенің міндеті – процесс ұсынған виртуалды адресті деректер сақталған жадтың нақты физикалық адресімен сәйкестендіру болып табылады. Беттік кесте виртуалды адрестерді физикалық адрестермен сәйкестендіретін жазбаларды сақтайды, әрбір сәйкестендіру беттік кесте жазбасы (PTE) деп те аталады.

Аударма процесі

Процессордың ішіндегі жадты басқару блогы (MMU) операциялық жүйенің беттер кестесінен жақында пайдаланылған сәйкестендірулердің кэшін сақтайды. Бұл аудармалық іздеу буфері (TLB) деп аталады, ол ассоциативтік кэш болып табылады. Виртуалды адресті физикалық адреске аудару қажет болғанда, ең алдымен TLB ізделеді. Егер сәйкестік табылса, бұл TLB сәйкестігі (TLB hit) деп аталады, физикалық адрес қайтарылады және жадқа қол жеткізу жалғаса береді. Бірақ, егер сәйкестік табылмайтын болса, бұл TLB сәйкестігінің жоқтығы (TLB miss) деп аталады, MMU, жүйелік микробағдарлама немесе операциялық жүйенің TLB miss handler әдетте беттер кестесіндегі адрес сәйкестендіруін іздеп, сәйкестендірудің бар-жоқтығын анықтайды, бұл беттік іздеу (page walk) деп аталады. Егер сәйкестендіру табылатын болса, ол TLB-ге қайта жазылады, мұндай жағдай виртуалды жад жүйесінде жадқа қол жеткізу TLB арқылы жүзеге асырылатындықтан қажет. Содан кейін қате тудырған команда қайта іске қосылады, бұл процестер параллель түрде орындалуы мүмкін. Келесі аударма TLB сәйкестігіне (TLB hit) әкеледі және жадқа қол жеткізу жалғасады.

Фрейм кестесі деректері

Ең қарапайым беттер кестесі жүйелері көбінесе фрейм кестесі мен беттер кестесін ұстайды. Фрейм кестесі қай фреймдер бейнеленгені туралы ақпаратты сақтайды. Күрделірек жүйелерде фрейм кестесі бет қай адрес кеңістігіне жататыны, статистикалық мәліметтер немесе басқа да қосымша ақпаратты да сақтай алады.

Бет кестесі деректері

Бет кестесі – бет кестесі жазбаларының массиві.

Беттер кестесіне ену

Әрбір беттік кесте жазбасы (PTE) беттің виртуалды мекенжайы мен физикалық жақтаудың мекенжайы арасындағы сәйкестікті сақтайды. Бет туралы қосымша ақпараттар да бар, мысалы, қазіргі бит, лас немесе өзгертілген бит, адрестік кеңістік немесе процестің идентификаторы және тағы басқалар. Физикалық жадты толықтыру үшін қатты дискі сияқты қосымша жад құрылғысын пайдалануға болады. Беттер физикалық жадтан және дискіге ауыстырылуы мүмкін. Қазіргі бит физикалық жадта немесе дискіде қандай беттер бар екенін көрсетеді және осы беттерді қалай өңдеу керектігін анықтайды, яғни бетті дискіден жүктеу және физикалық жадтағы басқа бетті шығару қажеттігін көрсетеді. Лас бит – бұл өнімділікті жақсартуға мүмкіндік беретін мүмкіндік. Физикалық жадқа ауыстырылған, оқылған және қайтадан дискіге ауыстырылған дискідегі бетті дискіге қайта жазудың қажеті жоқ, себебі бет өзгермеген. Дегенмен, егер бет ауыстырылғаннан кейін жазылса, оның лас биті қойылады, яғни бетті резервтік сақтағышқа қайта жазу қажеттігін көрсетеді. Бұл стратегия резервтік сақтағышта беттің көшірмесін жадқа ауыстырылғаннан кейін сақтауды талап етеді. Лас бит пайдаланылмаса, резервтік сақтағыштың көлемі кез келген уақытта ауыстырылған беттердің жалпы көлеміне тең болуы керек. Лас бит пайдаланылса, физикалық жадта да, резервтік сақтағышта да кейбір беттер әрдайым болады. Бір мекенжайлық кеңістік операциялық жүйелері емес, операциялық жүйелерде виртуалды жадты басқару жүйесіне қандай процеске қандай беттерді байланыстыру керектігін білу үшін адрестік кеңістік немесе процестің идентификаторы туралы ақпарат қажет. Екі процесс әртүрлі мақсаттар үшін екі бірдей виртуалды мекенжайды пайдалана алады. Беттік кесте екі процесс үшін әртүрлі виртуалды жад сәйкестіктерін қамтамасыз етуі керек. Бұл екі процесске ерекше мекенжай картасы идентификаторларын беру арқылы немесе процестің идентификаторларын пайдалану арқылы іске асырылуы мүмкін. Процестің идентификаторларын виртуалды жад беттерімен байланыстыру беттерді таңдау кезінде де көмектесе алады, себебі белсенді емес процестерге, әсіресе кодтық беттері ауыстырылған процестерге байланысты беттер, белсенді процестерге жататын беттерге қарағанда бірден қажет болуы аз. Беттік кесте жазбаларын процестің бірегей идентификаторларымен белгілеудің орнына, беттік кесте әрбір процесс үшін әртүрлі виртуалды жад бетін алып жатуы мүмкін, сондықтан беттік кесте процесс контекстінің бөлігіне айналады. Мұндай жағдайда, процесс жадта болмаса, оның беттік кестесі жадтан шығарылуы мүмкін.

Бет кестелерінің түрлері

Бет кестелерінің бірнеше түрі бар, олар әртүрлі талаптарға қарай оптимизацияланған. Көбінесе, ең қарапайым бет кестесі виртуалды мекенжайды, осы виртуалды мекенжайға сәйкес келетін физикалық мекенжайды және қажет болса, мекенжай кеңістігі туралы ақпаратты сақтауы керек.

Беттер кестесі кері

Кері беттер кестесі (IPT) TLB-нің жүйелік жадыны (RAM) чиптен тысқары кеңейтімі ретінде қарастырылады. Нағыз беттер кестесінен өзгешелігі, ол барлық қазіргі сәйкестіктерді сақтауға міндетті емес. Операциялық жүйе MIPS стиліндегі бағдарламалық TLB-ны толтырғандай, қателерді өңдеуге дайын болуы керек. IPT беттер кестесі мен кадрлар кестесін бір дерек құрылымында біріктіреді. Оның негізінде жадтағы кадрлар санына тең қатарлары бар тұрақты өлшемді кесте орналасқан. Егер 4000 кадр болса, кері беттер кестесінде 4000 қатар болады. Әрбір қатарға виртуалды бет нөмірі (VPN), физикалық бет нөмірі (физикалық мекенжай емес), басқа да деректер және соқтығысу тізбегін құру құралы кіреді, оны кейінірек қарастырамыз. IPT құрылымының барлық жазбаларын іздеу тиімсіз, сондықтан виртуалды мекенжайларды (және қажет болса, адрестік кеңістік/PID ақпаратын) IPT-дегі индекске сәйкестендіру үшін хэш-кесте қолданылуы мүмкін – осы жерде соқтығысу тізбегі пайдаланылады. Бұл хэш-кесте хэш-анкерлік кесте деп аталады. Хэш функциясы көбінесе жабылу үшін оңтайландырылмайды, жылдамдық маңыздырақ. Әрине, хэш-кестелерде соқтығысулар болады. Осы таңдалған хэш функциясының нәтижесінде пайдалану кезінде көптеген соқтығысулар болуы мүмкін, сондықтан кестедегі әрбір жазба үшін VPN ізделіп жатқан жазба немесе соқтығысу екенін тексеру үшін ұсынылады. Сәйкестікті іздеу кезінде хэш-анкерлік кесте қолданылады. Егер жазба болмаса, бет қатесі туындайды. Әйтпесе, жазба табылады. Архитектураға байланысты, жазба TLB-ге қайта орналастырылып, жадқа сілтеме қайта іске қосылуы мүмкін, немесе соқтығысу тізбегі толыққанша қаралып, бет қатесі туындауы мүмкін. Бұл схемадағы виртуалды мекенжай екі бөлікке бөлінеді: бірінші жартысы – виртуалды бет нөмірі, екінші жартысы – осы беттегі ығысу. Бұл жобаның басты мәселесі – хэш функциясының нашар кэш жақындығы. Ағаш негізіндегі жобалар бұған жол бермейді, өйткені жақын беттердегі беттер кестесі жазбаларын жақын жерлерге орналастырады, ал кері беттер кестесі жазбаларды шашыратып, сілтемелердің кеңістіктік жақындығын жояды. Операциялық жүйе осы мәселені азайту үшін хэш-кестенің көлемін кішірейте алады, бірақ бұл жоғалту деңгейінің артуымен байланысты. Әдетте, физикалық жадыда барлық процестер бөлісетін, біртұтас хэш-кесте болады. Әр процеске арналған идентификатор әртүрлі процестердің беттерін бір-бірінен ажырату үшін қолданылады. Белгілі бір процестің беттер кестесі жазбаларын жою біршама баяу; ОЖ бұл мәселеге кезігуді кешіктіру үшін процестердің идентификаторларын қайта пайдаланудан аулақ болуы мүмкін. Сонымен қатар, әр процеске арналған хэш-кестелерді қолдануға болады, бірақ олар жадтың фрагментациясы салдарынан тиімсіз, бұл кестелерді алдын ала бөлуді талап етеді. Кері беттер кестелері, мысалы, PowerPC, UltraSPARC және IA 64 архитектураларында қолданылады.

Көп деңгейлі беттер кестелері

Кері беттер кестесі физикалық жадтағы барлық фреймдер үшін орнатылған шамалас тізімін сақтайды. Дегенмен, мұндай жағдай өте ысырапты болуы мүмкін. Оның орнына, виртуалды беттерге арналған шамалас тізімдерді қамтитын беттер кестесін құруға болады. Бұл виртуалды жадтың белгілі бір бөлігін қамтитын бірнеше беттер кестесін сақтау арқылы іске асырылады. Мысалы, 4 МБ виртуалды жадты қамтитын, 1024 жазбадан тұратын 4 КБ көлеміндегі кішірек беттерді құруға болады. Бұл тиімді, себебі процестің жұмыс істеу кезінде виртуалды жадтың жоғарғы және төменгі бөліктері жиі қолданылады – жоғарғы бөлігі мәтін мен дерек сегменттері үшін, ал төменгі бөлігі стек үшін пайдаланылады, олардың арасында бос жад орналасқан. Көп деңгейлі беттер кестесі жадтың жоғарғы және төменгі бөліктерін қамту үшін бірнеше кішірек беттер кестесін сақтай алады және қатаң қажет болған жағдайда ғана жаңаларын құрайды. Сонымен, әрбір кішігірім беттер кестесі бас беттер кестесі арқылы байланыстырылып, ағаш тәрізді дерек құрылымын құрайды. Бұл жағдайда тек екі ғана емес, бірнеше деңгей болуы мүмкін. Мысалы, осы схемадағы виртуалды мекенжай үш бөлікке бөлінеді: түбірлік бет кестесіндегі индекс, қосалқы бет кестесіндегі индекс және осы бет ішіндегі ығысу. Көп деңгейлі беттер кестелері «иерархиялық беттер кестелері» деп те аталады.

Виртуалды беттер кестелері

Виртуалды мекенжай кеңістігіндегі әрбір виртуалды бет үшін сәйкестендірулерді қамтитын беттер кестесі құрылымын жасау тиімсіз болуы мүмкін екендігі айтылды. Бірақ, беттер кестесін виртуалды жадқа орналастырып, виртуалды жад жүйесіне беттер кестесі үшін жадты басқаруды тапсыру арқылы орынның артық жұмсалуынан сақтануға болады. Дегенмен, айналма бет қателерін болдырмау және беттер кестесінде жоқ, бірақ қажетті беттер кестесінің маңызды бөлігін табу үшін осы сызықтық беттер кестесінің бір бөлігі физикалық жадта тұрақты түрде сақталуы керек.

Жапсырылған беттер кестелері

Жабдықтың виртуализациясының өнімділігін арттыру үшін ішкі беттік кестелерді қолдануға болады. Беттік кестелерді виртуализациялауға аппараттық қолдау көрсету арқылы эмуляция қажеттілігі күрт төмендейді. x86 виртуализациясы үшін қазіргі таңдаулар – Intel-дің кеңейтілген беттік кесте мүмкіндігі және AMD-нің жылдам виртуализациялық индекстеу мүмкіндігі.