2.2-§ Virtual xotira tushunchasi Dasturiy ta'minot ishlab chiquvchilari ko'pincha mavjud bo'lgan RAM miqdoridan kattaroq katta dasturlarni xotirada joylashtirish muammosini hal qilishlari kerak. Ushbu muammoni hal qilish uchun variantlardan biri - bir-biriga o'xshash tuzilmalarni tashkil qilish-oldingi ma'ruzada ko'rib chiqilgan. Shu bilan birga, dasturchining dasturning bir-biriga o'xshash qismlarini shakllantirish jarayonida faol ishtiroki nazarda tutilgan. Kompyuter arxitekturasining rivojlanishi va xotira boshqaruvining operatsion tizimining imkoniyatlarini kengaytirish ushbu muammoni kompyuterga o'tkazish imkonini berdi. Asosiy yutuqlardan biri virtual xotira (virtual xotira) ning paydo bo'lishi edi. Birinchi marta 1959 yilda Manchester universitetida ishlab chiqilgan "Atlas" kompyuterida amalga oshirildi.
Virtual xotira kontseptsiyasining mohiyati quyidagicha. Faol jarayon ishlaydigan ma'lumotlar RAMda joylashgan bo'lishi kerak. Virtual xotira sxemalarida jarayon asosiy xotirada zarur bo'lgan barcha ma'lumotlarning mavjudligini tasavvur qiladi. Buning uchun, birinchi navbatda, jarayon bilan shug'ullanadigan xotira bir necha qismlarga bo'linadi, masalan, sahifalar. Ikkinchidan, jarayonga kiradigan mantiqiy manzil (mantiqiy sahifa) dinamik ravishda jismoniy manzilga (jismoniy sahifaga) uzatiladi. Va nihoyat, jarayonga kiradigan sahifa jismoniy xotirada bo'lmagan hollarda, uni diskdan almashtirishni tashkil qilish kerak. Sahifaning mavjudligini nazorat qilish uchun xotirada sahifa jadvalidagi sahifa atributlarining bir qismi bo'lgan maxsus bit mavjud.
Shunday qilib, asosiy xotirada jarayonning barcha tarkibiy qismlari mavjudligida hech qanday ehtiyoj yo'q. Bunday tashkilotning muhim natijasi shundaki, jarayon bilan shug'ullanadigan xotira miqdori RAM hajmidan kattaroq bo'lishi mumkin. Mahalliylik printsipi ushbu sxemani kerakli samaradorlikni ta'minlaydi.
Faqat qisman xotirada bo'lgan dasturni bajarish qobiliyati bir qator aniq afzalliklarga ega:
* Dastur jismoniy xotira miqdori bilan chegaralanmaydi. Dasturlarni ishlab chiqish soddalashtirildi, chunki siz foydalanadigan xotira miqdori haqida qayg'urmasdan katta virtual bo'shliqlardan foydalanishingiz mumkin.
* Dasturni (jarayonni) xotiraga qisman joylashtirish va dasturlar o'rtasida xotirani moslashuvchan qayta taqsimlash imkoniyati mavjudligi sababli, protsessor yukini va tizim tarmoqli kengligini oshiradigan xotiraga ko'proq dasturlarni qo'yish mumkin.
* Dasturning bir qismini diskka tushirish uchun i / u hajmi klassik almashtirish variantidan kamroq bo'lishi mumkin, natijada har bir dastur tezroq ishlaydi.
Shunday qilib, "görünürlük" dasturi uchun (operatsion tizim tomonidan qo'llab-quvvatlanadigan) ta'minlash imkoniyati deyarli cheksiz (32 - bit me'morchiligi uchun xarakterli hajmi 232 = 4 Gbayt) foydalanuvchi xotirasi (mantiqiy manzil maydoni) asosiy xotira sezilarli darajada kichikroq bo'lsa (jismoniy manzil maydoni) - juda muhim jihat.
Biroq, virtual xotira joriy etilishi alohida xotira segmentlariga kirishni nazorat qilish va ayniqsa, foydalanuvchi dasturlarini bir - biridan himoya qilish va Osni foydalanuvchi dasturlaridan himoya qilish kabi boshqa muhim muammolarni hal qilish imkonini beradi. Har bir jarayon o'zining virtual manzillari bilan ishlaydi, uning efirga uzatilishi kompyuterning apparatida amalga oshiriladi. Shunday qilib, foydalanuvchi jarayoni boshqa jarayonlarga taalluqli ma'lumotlar bilan band bo'lgan asosiy xotira sahifalariga bevosita murojaat qilish imkoniyatidan mahrum.
Misol uchun, 16-bit kompyuter PDP-11/70 64 kb mantiqiy xotira bilan 2 Mb RAM qadar bo'lishi mumkin. Ushbu kompyuterning operatsion tizimi, asosiy xotirani foydalanuvchi jarayonlari o'rtasida himoya qilish va qayta taqsimlashni ta'minlaydigan virtual xotirani qo'llab-quvvatladi.
Eslatib o'tamiz, virtual xotiraga ega bo'lgan tizimlarda dastur (mantiqiy manzillar) ishlab chiqaradigan manzillar virtual deb ataladi va ular virtual manzil maydonini tashkil qiladi. "Virtual xotira" atamasi dasturchi haqiqiy xotiradan boshqa xotira bilan shug'ullanadi, uning hajmi RAM hajmidan kattaroq bo'lishi mumkin.
Virtual xotiraning aniq dasturiy ilovalari ma'lum bo'lsa-da, bu yo'nalish tegishli apparatni qo'llab-quvvatlashdan so'ng eng keng tarqalgan rivojlanishga erishdi.
Shuni ta'kidlash kerakki, kompyuter uskunalari deyarli barcha xotira boshqaruv sxemalarida manzilni efirga uzatishda ishtirok etadi. Biroq, virtual xotira holatida, bu ekranning uzilishi va mantiqiy manzil maydonining ko'p o'lchovli bo'lishi tufayli yanada murakkablashadi. Ehtimol, ta'riflangan sxemani amalga oshirishda apparaturaning eng muhim hissasi-xotirada kerakli sahifalar bo'lmagan taqdirda (page fault) istisno holatlarning avtomatik ishlab chiqarilishi.
Oldindan ko'rib chiqilgan uchta xotira boshqaruv sxemasining har biri - sahifa, segment va segment-sahifa-virtual xotirani tashkil qilish uchun javob beradi. Eng ko'p ishlatiladigan segment-sahifa modeli va segmentatsiya g'oyasining sintezi bo'lgan ahamiyatsiz model. Bundan tashqari, segmentlar apparat tomonidan qo'llab - quvvatlanmaydigan arxitektura uchun ularni amalga oshirish xotira boshqaruvining arxitektura-mustaqil komponentining vazifasidir.
Segmentli tashkilot sof shaklda kam uchraydi.
Shubhasiz, butunlay kompyuter-mustaqil virtual xotira boshqaruv komponentini yaratish mumkin emas. Boshqa tomondan, virtual xotira boshqaruvi bilan bog'liq dasturiy ta'minotning muhim qismlari mavjud bo'lib, ular uchun apparat dasturlarining tafsilotlari juda muhim emas. Zamonaviy operatsion tizimning yutuqlaridan biri virtual xotira boshqaruvining apparat-mustaqil va apparat-ga bog'liq qismlarini to'g'ri va samarali ravishda ajratishdir. Virtual xotira boshqaruv quyi tizimining apparat-qaram qismiga nima va qanday kirganini qisqacha ko'rib chiqing. Apparat-mustaqil quyi tizimining tarkibiy qismlari quyidagi ma'ruzada ko'rib chiqiladi.
Eng keng tarqalgan holatda, katta virtual manzil maydonini jismoniy manzil maydoniga sezilarli darajada kichikroq hajmda ko'rsatish kerak. Foydalanuvchi jarayoni yoki OS virtual manzilda yozishni amalga oshirishi kerak va Osning vazifasi-saqlangan ma'lumotlarning jismoniy xotirada bo'lishini ta'minlash (keyinchalik RAM etishmasligi bilan tashqi xotiraga ko'chirilishi mumkin). Virtual xotira bo'lsa, manzillarni efirga uzatish bilan bir qatorda manzillarni ko'rsatish tizimi hozirgi vaqtda jismoniy xotirada va qaerda joylashganligini ko'rsatadigan jadvallarni saqlashni o'z ichiga olishi kerak.
Sahifa virtual xotirasi
Oddiy sahifa tashkilotida bo'lgani kabi, sahifali virtual xotira va jismoniy xotira bir xil o'lchamdagi bloklar yoki sahifalar to'plamlaridan iborat. Virtual manzillar sahifalarga bo'linadi (sahifa), jismoniy xotiradagi tegishli birliklar sahifa ramkalarini (sahifa ramkalarini) tashkil qiladi va umuman, sahifa virtual xotirasini qo'llab-quvvatlash tizimi paging (paging) deb ataladi. Xotira va disk o'rtasidagi ma'lumotlarni uzatish har doim butun sahifalar tomonidan amalga oshiriladi.
Virtual manzil xotirasi boshqaruvi tomonidan sahifalarga bo'linib bo'lgach, virtual manzil buyurtma qilingan juftlikka (p, d) aylanadi, bu erda p virtual xotiradagi sahifa raqami, ad - manzil elementi joylashtirilgan p sahifasining bir qismi sifatida ofset. Agar uning joriy sahifasi ramda bo'lsa, jarayon amalga oshirilishi mumkin. Agar asosiy xotirada mavjud sahifa bo'lmasa, u tashqi xotiradan qayta yozilishi kerak (pompalanadi). Qabul qilingan sahifa har qanday bepul sahifa ramkasiga joylashtirilishi mumkin.
Virtual sahifalar soni katta bo'lgani uchun, sahifa jadvali o'ziga xos ko'rinishga ega ("sahifa jadvali tuzilishi" bo'limiga qarang), yozuvlar tuzilishi yanada murakkablashadi, sahifaning atributlari orasida mavjudlik, o'zgartirishlar va boshqa boshqaruv bitlari mavjud.
Buyruqni bajarish jarayonida xotirada sahifa mavjud bo'lmaganda, sahifani buzish (Page fault) yoki sahifani rad etish deb ataladigan alohida holat paydo bo'ladi. Sahifa buzilishini qayta ishlash, buyruqni bajarish to'xtatilganligi, talab qilingan sahifa ikkinchi darajali xotira joyidan jismoniy xotiraning bepul sahifali ramkasiga pompalanadi va buyruqni bajarishga urinish takrorlanadi. Bepul sahifali ramkalar bo'lmasa, kamdan-kam ishlatiladigan sahifa diskka tushiriladi. Sahifalarni almashtirish va sahifa tartibsizliklarini qayta ishlash muammolari quyidagi ma'ruzada ko'rib chiqiladi.
Jismoniy xotirani boshqarish uchun OS ramka jadvali tuzilishini qo'llab-quvvatlaydi. Uning holatini ko'rsatadigan har bir jismoniy ramka uchun bitta yozuv bor.
Asosiy xotirada sahifa tashkil etadigan zamonaviy kompyuterlarning ko'pchiligida sahifa jadvalining faqat bir qismi saqlanadi va hozirgi virtual xotira jadvalining elementlariga kirish tezligi protsessor keshida joylashtirilgan super tezkor xotiradan foydalanish orqali quyida ko'rsatilganidek erishiladi.
Segment-sahifa virtual xotira tashkilotlari
Oddiy segmentirovkada bo'lgani kabi, virtual xotira sxemalarida segment 0 bilan boshlangan manzillarning chiziqli ketma-ketligi hisoblanadi. Virtual xotirani tashkil qilishda segmentning hajmi katta bo'lishi mumkin, masalan, RAM hajmidan oshib ketishi mumkin. Katta dasturlarni xotirada joylashtirish bo'yicha ilgari berilgan barcha fikrlarni takrorlab, segmentlarni sahifalarga ajratish va har bir segment uchun sahifa jadvalingizni qo'llab-quvvatlash zarurati paydo bo'ladi.
Sahifa jadvalining tuzilishi
Sahifa jadvalini tashkil qilish-sahifa va segment-sahifa sxemalarida manzillarni ko'rsatishning asosiy elementlaridan biri. Sahifa tashkilotining ishi uchun sahifa jadvalining tuzilishini batafsil ko'rib chiqing.
Shunday qilib, virtual manzil virtual sahifa raqami va ofsetdan iborat. Sahifa jadvalidagi yozuv raqami virtual sahifa raqamiga mos keladi. Yozish hajmi tizimdan tizimga farq qiladi, lekin ko'pincha 32 bit. Ushbu yozuvdan sahifa jadvalida ushbu virtual sahifa uchun ramka raqami mavjud, keyin ofset qo'shiladi va jismoniy manzil hosil bo'ladi. Bundan tashqari, sahifa jadvalidagi yozuv sahifaning atributlari haqida ma'lumot beradi. Bu mavjudlik va mudofaa bitlari (masalan, 0-o'qish / yozish, 1 - faqat o'qing...). Bundan tashqari, quyidagi ro'yxatga olish mumkin: sahifaning mazmuni o'zgartirilsa va sahifani diskka yozish kerakligini nazorat qilish imkonini beradigan modifikatsiyaning bir qismi; kam ishlatiladigan sahifalarni ta'kidlashda yordam beradigan havola bit; keshlashni hal qiluvchi bit va boshqa boshqaruv bitlari. Diskdagi sahifa manzillari sahifa jadvalining bir qismi emasligini unutmang.
Sahifa jadvalini samarali amalga oshirish uchun asosiy muammo, odatda, protsessor arxitekturasining chuqurligi bilan belgilanadigan zamonaviy kompyuterlarning virtual manzil maydonlarining katta hajmini yaratadi. Bugungi kunda eng keng tarqalgan 32-bitli protsessorlar bo'lib, ular 4 Gbayt hajmdagi virtual manzil maydonlarini yaratishga imkon beradi (64-bit kompyuterlar uchun bu qiymat 264 baytga teng). Bundan tashqari, assotsiativ xotiradan foydalanish orqali hal qilinadigan ekran tezligi muammosi mavjud (quyidagi bo'limga qarang).
Sahifalar jadvalining taxminiy hajmini hisoblang. 32-bitli manzil maydonida 4 Kb (Intel) sahifasining hajmi 232/212 = 220, ya'ni taxminan bir million sahifa va 64-bit va undan ham ko'proq. Shunday qilib, jadvalda taxminan bir million satr (entry) bo'lishi kerak, satrdagi yozuv bir necha baytdan iborat. E'tibor bering, har bir jarayon o'zining sahifa jadvaliga muhtoj (va segment-sahifa sxemasida har bir segment uchun bitta sahifa jadvali bo'lishi kerak).
Sahifalar jadvallariga ajratilgan xotira miqdori juda katta bo'lmasligi aniq. Xotirada katta jadvalni joylashtirmaslik uchun u bir qator qismlarga bo'linadi. Ramda sahifa jadvalining muayyan vaqt uchun zarur bo'lgan qismlari saqlanadi. Mahalliylikning xususiyatlariga ko'ra, bunday qismlarning soni nisbatan kichikdir. Sahifa jadvalini qismlarga ajratish turli yo'llar bilan amalga oshirilishi mumkin. Bo'limning eng keng tarqalgan usuli-ko'p bosqichli sahifa jadvalini tashkil etish. Misol uchun, 4-bit Intel arxitekturasida amalga oshirilgan 32 Kbaytli sahifa o'lchamlari bilan ikki darajali jadvalni ko'rib chiqing.
220 qatordan tashkil topgan jadval 210 satrda ikkinchi darajali 210 ta jadvalga bo'linadi. Ushbu ikkinchi darajali jadvallar umumiy tuzilishga 2 ta satrdan iborat birinchi darajali bitta jadval yordamida birlashtirilgan. 32-bit manzili 10-bitli maydonga bo'linadi p1, 10-bitli maydon P2 va 12-bitli ofset d. P1 maydoni birinchi darajali jadvalda kerakli qatorni ko'rsatadi, maydon P2-ikkinchi va D maydoni belgilangan sahifa ramkasi ichidagi kerakli baytni lokalizatsiya qiladi (qarang: shakl. 9.1).
Faqat bitta ikkinchi darajali jadval yordamida siz ox-vatit4 Mb (4 Kb 1024) Ramga ega bo'lishingiz mumkin. Shunday qilib, katta hajmdagi xotira bilan jarayonni joylashtirish uchun ramda birinchi darajali jadval va ikkinchi darajali bir nechta jadvalga ega bo'lish kifoya. Shubhasiz, ushbu jadvaldagi satrlarning umumiy soni 220 dan kamroq. Ushbu yondashuv tabiiy ravishda jadvalning uch yoki undan ko'p darajalariga umumlashtiriladi.
Bir nechta darajaga ega bo'lish, tabiiy ravishda, xotira boshqaruvining ish faoliyatini kamaytiradi. Har bir darajadagi jadvallarning o'lchamlari tanlangan bo'lsa-da, jadval bir sahifada butunlay joylashtiriladi, har bir darajaga murojaat qilish alohida xotira murojaatidir. Shunday qilib, manzilni efirga uzatish xotiraga bir nechta murojaatlarni talab qilishi mumkin.
Sahifa jadvalidagi darajalar soni arxitekturaning o'ziga xos xususiyatlariga bog'liq. Bir darajali (DEC PDP-11), ikki darajali (Intel, DEC VAX), uch darajali (Sun SPARC, DEC Alpha) paging dasturini amalga oshirish, shuningdek, ma'lum miqdordagi (Motorola) bilan paging misollarini keltirish mumkin. MIPS R2000 RISC protsessorining ishlashi odatda sahifa jadvalisiz amalga oshiriladi. Bu erda kerakli sahifani qidirish, agar bu sahifa assotsiativ xotirada bo'lmasa, OS ("nolinchi daraja paging" deb ataladi) ni olish kerak.