Nazorat savollari - Tizimli dasturlash

|
Tizimli dasturlash
|
bet | 33/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаNazorat savollari:
1 Mantiqiy amallar buyruqlarining maqsadi?
2 Jamoa va asosiy maqsad?
3 Jamoami yoki asosiy maqsadmi?
4 xor buyrug'ining asosiy maqsadi?
5 Sinov buyrug'ining asosiy maqsadi?
6 Buyruq emas asosiy maqsad?
7 Buyruqlarning muqobil ishlashi ( test , xor va ) ?
8 Aytaylik, bu sizni uyg'otadi
jne , je buyruq zanjirining ishi nima ?
10 js , jz buyruqlar to'plamining vazifasi nima ?
1.4.1.1- misoldagi (8) qatorni quyidagiga (jne label1) o'zgartirsak nima bo'ladi?
Tavsiya etilgan o'qish: 1.3.
8-son LABORATORIYA ISHI
Mavzu: Mikroprotsessorni himoyalangan rejimga o'tkazish
Ishning maqsadi: himoyalangan rejimda mikroprotsessordan foydalanish qobiliyatini rivojlantirish.
Ishlash vaqti 2 soat
Nazariy material
Faqatgina mikroprotsessorni himoyalangan rejimga o'tkazish uning arxitekturasida yashiringan va real rejimda erishib bo'lmaydigan barcha imkoniyatlarni to'liq amalga oshirish imkonini beradi. Bunga quyidagilar kiradi:
- manzilli maydonni 4 GB gacha oshirish;
- maksimal mumkin bo'lgan jismoniy xotira hajmidan oshib ketadigan va ulkan 64 TB ni tashkil etadigan virtual manzil maydonida ishlash qobiliyati;
- bir nechta dasturlarni (jarayonlarni) parallel bajarish bilan ko'p vazifali rejimni tashkil etish. To'g'ri aytganda, ko'p vazifali rejim ko'p vazifali operatsion tizim tomonidan tashkil etilgan, ammo mikroprotsessor to'rt darajali imtiyozlar tizimi yordamida vazifalarni bir-biridan himoya qilish uchun ushbu rejim uchun zarur bo'lgan kuchli va ishonchli mexanizmni ta'minlaydi;
- xotirani sahifa tashkil qilish, vazifalarni himoya qilish darajasini oshirish kompyuter plansheti bir-biridan va ularni amalga oshirish samaradorligi. Mikroprotsessor yoqilganda, u avtomatik ravishda haqiqiy manzil rejimiga o'rnatiladi. Himoyalangan rejimga o'tish tegishli buyruqlar ketma-ketligini bajarish orqali dasturiy ravishda amalga oshiriladi. Mikroprotsessorning real rejimda va himoyalangan rejimda ishlashining ko'pgina tafsilotlari sezilarli darajada farq qilganligi sababli, himoyalangan rejim uchun mo'ljallangan dasturlar maxsus tarzda yozilishi kerak. Bundan tashqari, haqiqiy va himoyalangan rejimlar o'rtasidagi farq shunchalik kattaki, real rejimdagi dasturlarni himoyalangan rejimda bajarib bo'lmaydi va aksincha. Boshqacha qilib aytganda, haqiqiy rejim va himoyalangan rejim mos kelmaydi. Zamonaviy mikroprotsessorning arxitekturasi nihoyatda murakkab. Himoyalangan rejim vositalari va bu vositalardan foydalanadigan dasturlar xuddi shunday murakkab. Boshqa tomondan, ko'plab amaliy muammolarni hal qilishda (masalan, tabiiy ravishda himoyalangan rejimda ishlaydigan Windows ilovalarini disk raskadrovka qilishda) himoyalangan rejimning ishlashining barcha tafsilotlarini tushunishning hojati yo'q; Uning asosiy tushunchalari bilan tanishish kifoya. Ushbu bo'limda himoyalangan rejim asoslari va uning eng muhim tuzilmalari va ishlash algoritmlarining qisqacha tavsifi berilgan. Ehtimol, himoyalangan rejim va haqiqiy rejim o'rtasidagi eng muhim farq jismoniy manzilni shakllantirishning boshqa printsipidir. Eslatib o'tamiz, real rejimda manzilli xotira katakchasining jismoniy manzili ikkita komponentdan iborat - segment manzili va ofset. Ikkala komponent ham 16 bit hajmga ega va protsessor xotiraga kirishda jismoniy manzilni hisoblash uchun quyidagi qoidadan foydalanadi:
Jismoniy manzil = segment manzili * 16 + ofset
Segment manzili ham, ofset ham FFFFh dan katta bo'lishi mumkin emas, bu real rejimda ikkita asosiy cheklovlarni nazarda tutadi: manzil maydoni atigi 1 MB va segmentlar 64 KB dan katta bo'lishi mumkin emas.
Himoyalangan rejimda dastur hali ham 16-bitli segment registrlari yordamida manzillangan segmentlardan iborat, ammo segmentlarning jismoniy xotiradagi joylashuvi boshqacha tarzda aniqlanadi.
Himoyalangan rejimda segment registrlariga segment adreslari emas, balki selektorlar deb ataladigan, bitlari 3...15 dastur segmentlarining deskriptorlarini o'z ichiga olgan maxsus jadvaldagi kataklarning raqamlari (indekslari) sifatida qaraladi. Tutqichlar jadvali odatda himoyalangan operatsion tizim (masalan, Windows) tomonidan yaratilgan va odatda dasturga kirish imkoni yo'q. Har bir deskriptor jadvali identifikatori hajmi 8 bayt bo'lib, protsessorga ushbu segmentga xizmat ko'rsatish uchun zarur bo'lgan barcha xususiyatlarni saqlaydi. Ushbu xususiyatlar orasida birinchi navbatda ikkitasini ajratib ko'rsatish kerak: segment manzili va uning uzunligi.
Deskriptorda segment manzili uchun 32 bit ajratilgan va shuning uchun segment 23-= 4 GB manzil maydonining istalgan nuqtasidan boshlanishi mumkin. Bu manzil maydoni chiziqli deyiladi. Eng oddiy holatda, peyjing o'chirilganda, bu haqda keyinroq muhokama qilinadi, chiziqli manzillar jismoniy manzillarga mos keladi. Shunday qilib, protsessor 4 GB gacha operativ xotira bilan ishlashi mumkin. Haqiqiy rejimda bo'lgani kabi, manzillangan katakning manzili protsessor tomonidan segmentning asosiy manzili va ofsetning yig'indisi sifatida hisoblanadi:
Chiziqli manzil = segmentning asosiy manzili + ofset 32-bitli protsessorlarda ofset 32 bit o'lchamga ega, shuning uchun maksimal segment uzunligi 2" = 4 GB. 4.4-rasmda uchta segmentdan iborat bo'lgan dasturning faraziy misoli ko'rsatilgan, birinchisi. uning uzunligi 1 MB va manzil maydonining boshida joylashgan, ikkinchisi 100 KB hajmi birinchisiga yaqin joylashgan, uchinchisi esa atigi 256 bayt hajmida joylashgan. to'qqizinchi megabaytning o'rtasi Dastur tomonidan xotira katakchalariga kirish uchun ishlatiladigan va har doim ikkita komponentdan iborat - selektor va ofset - ba'zan virtual manzillarni chiziqli manzillarga o'zgartiradi Ushbu konvertatsiya amalga oshiriladigan dastur odatda mavjud emas, dastur har bir komponentning mantiqiy manzillar maydonida qaerda joylashganligini aniq bilmasligi mumkin, bu aslida siz dasturni xotiraga yuklaganingizda, siz buni amalga oshirmaysiz uning segmentlari xotirada qayerda joylashishini va qanday tartibda joylashishini bilmayman. Dasturchi uchun faqat virtual manzillar mavjud, ammo operatsion tizim ularni chiziqli, keyin esa jismoniy manzillarga aylantirish bilan shug'ullanadi.
Virtual manzil maydoni qancha? Dastur deskriptor indeksi uchun 13 bit ajratilgan selektor yordamida kerakli deskriptor sonini belgilaydi. Bundan kelib chiqadiki, deskriptorlar jadvali 1" = 8 gacha bo'lishi mumkin. K deskriptorlar. Biroq, aslida ular ikki barobar ko'p, chunki dastur bitta emas, balki ikkita deskriptor jadvali bilan ishlay oladi - bitta global, umumiy barcha bajaruvchi vazifalar va bitta mahalliy, ma'lum bir vazifaga tegishli deskriptorlarga dastur orqali kirish mumkin, ya'ni maksimal ofset qiymati bilan belgilanadigan har bir segmentning o'lchami 2-1 = 4 GB ga etishi mumkinligi sababli, virtual manzil maydoni miqdori 16 K * 4 KB = 64 TB ni tashkil qiladi. .
Biroq, aslida, 32-bitli manzil shinasiga ega bo'lgan kompyuterning operativ xotirasi 4 GB dan ortiq bo'lishi mumkin emas, ya'ni. Yuqoridagi taxminlarga ko'ra (har biri 4 GB bo'lgan 16 ming segment), xotiraga 16 mingdan ortiq segmentdan maksimal bittasi sig'ishi mumkin. Qolganlarning hammasi qayerda bo'ladi?
Virtual maydonning to'liq hajmini faqat diskdagi barcha foydalanilmayotgan segmentlarni saqlaydigan, kerak bo'lganda xotiraga yuklaydigan ko'p vazifali operatsion tizim yordamida amalga oshirish mumkin. Albatta, agar biz zamonaviy protsessorlarga xos bo'lgan imkoniyatlarni to'liq amalga oshirishni istasak, bizga etarlicha katta disk sig'imi - 64 TB kerak bo'ladi. Biroq, bugungi kundagi oddiyroq texnik vositalar (100 MB gacha xotira, 10 Gb gacha qattiq disk) bilan ham virtual xotira printsipi barcha ko'p vazifali operatsion tizimlar tomonidan katta samaradorlik bilan qo'llaniladi. Boshqa tomondan, amaliy dasturchi uchun bu masala alohida qiziqish uyg'otmaydi, chunki segmentlarni diskka tushirish va ularni diskdan almashtirish dastur tomonidan emas, balki operatsion tizim tomonidan amalga oshiriladi va bu protseduraga aralashish tavsiya etilmaydi.
Yuqorida ta'kidlab o'tilganidek, selektor va ofset asosida protsessor tomonidan hisoblangan manzil chiziqli manzil maydoniga tegishli bo'lib, u fizik bilan mos kelishi shart emas. Chiziqli manzillarni jismoniy manzillarga aylantirish qisman protsessor va qisman operatsion tizim tomonidan amalga oshiriladigan sahifa tarjimasi yordamida amalga oshiriladi. Agar peyjing o'chirilgan bo'lsa, barcha chiziqli manzillar jismoniy manzillar bilan bir xil bo'ladi; agar peyjing yoqilgan bo'lsa, chiziqli manzillar sahifa jadvallari mazmuniga ko'ra jismoniy manzillarga aylantiriladi.
Sahifa 4 KB lik chiziqli yoki fizik manzillar maydonining ulangan qismidir. Dastur chiziqli manzil maydonida ishlaydi, sahifani o'zgartirish yoki hatto sahifalarning o'zi mavjudligini bilmaydi. Peyjing mexanizmi mantiqiy sahifalarni sahifa jadvallaridagi ma'lumotlarga ko'ra jismoniy sahifalarga joylashtiradi. Natijada, dasturning alohida 4 kilobaytli bo'limlari, aslida, bir-biridan uzilgan jismoniy xotiraning har qanday 4 kilobaytli sohalarida joylashgan bo'lishi mumkin (4.6-rasm). Xotiradagi jismoniy sahifalar tartibi mantiqiy sahifalar tartibiga mos kelmasligi mumkin (va odatda mos kelmaydi). Bundan tashqari, ba'zi mantiqiy sahifalar bir xil jismoniy xotira sohasida samarali birga mavjud bo'lib, bir-biriga mos kelishi mumkin.
Peyjing protsessor apparati va xotira ichidagi qidirish jadvallarini o'z ichiga olgan ancha murakkab mexanizmdir.
Sahifalar jadvali tizimi ikki darajadan iborat. Birinchi darajada sahifalar jadvali katalogi (yoki oddiygina sahifa katalogi) - sahifalar jadvali manzillari bilan 1024 4 baytli maydonlarni o'z ichiga olgan xotira rezident jadvali mavjud. Ikkinchi darajada sahifa jadvallari mavjud bo'lib, ularning har birida jismoniy xotira sahifalari manzillari bilan 1024 ta 4 baytli maydonlar mavjud. Sahifa jadvallarining maksimal mumkin bo'lgan soni katalogdagi maydonlar soni bilan belgilanadi va 1024 tagacha bo'lishi mumkin. Sahifaning hajmi 4 KB bo'lganligi sababli, 1024 sahifali 1024 jadval butun manzil maydonini (4 GB) egallaydi.
1024 sahifali jadvallarning hammasi ham mavjud bo'lmasligi kerak (Aytgancha, ular juda ko'p xotira maydonini egallaydi - 4 MB). Agar dastur haqiqatda mumkin bo'lgan chiziqli manzil maydonining faqat bir qismini ishlatsa va bu har doim sodir bo'lsa, sahifa katalogidagi foydalanilmagan maydonlar etishmayotgan deb belgilanadi. Bunday maydonlar uchun tizim xotirani saqlagan holda sahifa jadvallarini ajratmaydi.
Pageging yoqilganda, chiziqli manzil uchta maydon to'plami sifatida ko'rib chiqiladi: sahifa katalogidagi 10 bitli indeks, tanlangan sahifa jadvalidagi 10 bitli indeks va tanlangan sahifadagi 12 bitli ofset. Eslatib o'tamiz, chiziqli manzil segment deskriptoridan olingan segmentning asosiy manzilini va dastur tomonidan taqdim etilgan ushbu segmentdagi ofsetni qo'shish orqali hosil bo'ladi.
Chiziqli manzilning yuqori 10 biti sahifa katalogidagi maydon raqamini tashkil qiladi. Katalogning asosiy manzili protsessorning boshqaruv registrlaridan birida, xususan CR3 registrida saqlanadi. Katalogning o'zi sahifa va xotiraga 4 KB chegarasida tekislanganligi sababli, katalogga murojaat qilish uchun CR3 registrining faqat yuqori 20 biti ishlatiladi, past 12 bit esa kelajakda foydalanish uchun ajratilgan.
Katalog maydonlari hajmi 4 baytni tashkil qiladi, shuning uchun chiziqli manzildan olingan indeks 2 bitga chapga siljiydi (ya'ni, 4 ga ko'paytiriladi) va olingan qiymat ma'lum bir katalog maydonining manzilini shakllantirish uchun katalog bazasi manziliga qo'shiladi. Har bir katalog maydoni sahifa jadvallaridan birining fizik bazaviy manzilini o'z ichiga oladi va sahifa jadvallarining o'zi sahifalarni ifodalagani va xotirada 4 KB chegarasiga to'g'rilanganligi sababli, ushbu manzildagi faqat eng muhim 20 bit muhim ahamiyatga ega.
Keyinchalik, o'rta qism (bitlar 12...21) chiziqli manzildan chiqariladi, 2 bitga chapga siljiydi va tanlangan katalog maydonida saqlangan asosiy manzilga qo'shiladi. Natijada xotiradagi sahifaning jismoniy manzili bo'lib, u yana faqat eng muhim 20 bitni ishlatadi. Manzil qilingan katakning fizik manzilining yuqori 20 biti sifatida qaraladigan bu manzil sahifa ramkasi deb ataladi. Sahifa ramkasi o'ng tomonda chiziqli manzilning past 12 biti bilan to'ldirilgan bo'lib, ular sahifa mexanizmi orqali o'zgarmagan holda o'tadi va tanlangan jismoniy sahifada ofset vazifasini bajaradi.
Himoyalangan rejimda dasturlash va hatto himoyalangan rejimda ishlaydigan ilovalarni disk raskadrovka qilish uchun deskriptor tuzilishini va uning alohida maydonlarining ma'nosini tushunish foydali bo'ladi. Shuni ta'kidlash kerakki, deskriptorlarning bir nechta turlari mavjud bo'lib, ular turli formatlarga ega. Shunday qilib, xotira segmenti deskriptori (deskriptorning eng keng tarqalgan turi), xususan, xizmat ko'rsatish uzilishlari uchun ishlatiladigan darvoza deskriptoridan farq qiladi. Xotira deskriptorining formatini ko'rib chiqamiz.
Rasmdan ko'rinib turibdiki, deskriptor 8 baytni egallaydi. 2...4 va 7 baytlar segmentning chiziqli asosiy manzilini o'z ichiga oladi. Asosiy manzilning umumiy uzunligi 32 bit. Segment chegarasining pastki 16 bitlari 0-1 baytlarda, qolgan 16...19 bitlari esa 2 atribut baytning quyi to'rtta bitida yoziladi. Segment chegarasi uning oxirgi bayti sonidir. Biz chegara 20 bit bilan tasvirlanganligini va uning raqamli qiymati 1M dan oshmasligini ko'ramiz. Shu bilan birga, chegara ko'rsatilgan birliklar o'zgartirilishi mumkin, bu G kasrli bit yordamida amalga oshiriladi (2-atribut baytining 7 biti). Agar G=0 bo'lsa, chegara baytlarda ko'rsatiladi; agar 1 - 4 KB bloklarda. Shunday qilib, segment o'lchamini bayt aniqligi bilan belgilash mumkin, ammo keyin u 1 MB dan oshmasligi kerak; agar siz G = l ni o'rnatsangiz, u holda segment 4 GB ga yetishi mumkin, lekin uning hajmi 4 KB ga ko'paytiriladi. Ikkala holatda ham segment bazasi bayt aniqligi bilan belgilanadi.
Keling, deskriptorning ikki baytini egallagan segment atributlarini ko'rib chiqaylik.
Bit A (ruxsat etilgan, ruxsat bor edi) protsessor tomonidan ushbu segmentning selektori istalgan segment registriga yuklangan paytda o'rnatiladi. Bundan tashqari, protsessor bu bitni qayta o'rnatmaydi, lekin uni dastur tomonidan qayta tiklash mumkin (albatta, agar u odatda operatsion tizimning vakolati bo'lgan deskriptor tarkibiga kirish imkoniga ega bo'lsa). Turli segmentlarning kirish bitlarini tahlil qilib, dastur A bitni qayta o'rnatgandan so'ng, berilgan segmentga kirish yoki yo'qligini aniqlashi mumkin.
Segment turi 3 bitni egallaydi (ba'zan A biti tip maydoniga kiritiladi, keyin esa tip 4 bitni egallaydi) va 8 ta qiymatga ega bo'lishi mumkin. Tur segmentga kirish qoidalarini belgilaydi. Shunday qilib, agar segment 1-tur bo'lsa, u o'qish va yozish imkoniyatiga ega, bu ma'lumotlar segmentlari uchun odatiy holdir. Segmentga 0 turini belgilash orqali biz segmentni faqat o'qish uchun ruxsat beramiz va shu bilan uni har qanday modifikatsiyadan himoya qilamiz. 4-tur ko'rsatma segmentlari uchun xos bo'lgan bajarishni yoqishni bildiradi. Boshqa turdagi segmentlar ham qo'llaniladi.
Biz xotira segmentlarini uning turi bo'yicha ruxsat etilmagan harakatlardan himoya qilish dastur yoki hatto operatsion tizim tomonidan emas, balki apparat darajasida protsessor tomonidan amalga oshirilishini ta'kidlaymiz. Shunday qilib, agar siz 0 turdagi segmentga yozishga harakat qilsangiz, umumiy himoya istisno deb ataladigan holat yuzaga keladi. Istisno - bu protsessor o'z nuqtai nazaridan noto'g'ri bo'lgan har qanday vaziyat yuzaga kelganda qo'zg'atadigan ichki uzilish. Yozish taqiqlangan segmentga yozishga urinish ushbu turdagi vaziyatga tegishli. Umumiy himoya istisnosi 13-vektorga to'g'ri keladi, unda istisno ishlovchi manzili bo'lishi kerak.
Bundan tashqari, 4-turga e'tibor berishga arziydi. Buyruqlar segmenti uchun faqat bajarishga ruxsat beriladi, lekin yozish yoki hatto o'qish mumkin emas. Bu shuni anglatadiki, himoyalangan rejimda dastur tasodifan o'z buyruq segmentiga kira olmaydi va uning ustiga yoza olmaydi; u buyruqlarni bajarayotganda ongli ravishda o'zgartira olmaydi, bu usul ba'zan real rejimdagi dasturlarda ularni qiziquvchan dasturchilar tomonidan shifrlanishidan himoya qilish uchun qo'llaniladi. Atributlarning 4-biti Bayt 1 segment identifikatoridir. Agar u 1 ga teng bo'lsa, rasmda ko'rsatilganidek. 4.9, deskriptor xotira segmentini tavsiflaydi. Bu bitning qiymati 0 tizim segmenti deskriptorini xarakterlaydi.
DPL (Descriptor Privilege Level) maydoni dasturlarni bir-biridan himoya qilish uchun ishlatiladi. Imtiyoz darajasi 0 dan (maksimal imtiyozlar) 3 gacha (minimal imtiyozlar) bo'lishi mumkin. Operatsion tizim dasturlariga odatda 0-darajali, amaliy dasturlarga - 3-daraja tayinlanadi, bu noto'g'ri dasturlarning operatsion tizimni yo'q qilish ehtimolini yo'q qiladi. Boshqa tomondan, agar amaliy dasturning o'zi operatsion tizim funktsiyalarini bajarsa, protsessorni himoyalangan rejimga o'tkazsa va ushbu rejimda ishlashni davom ettirsa, uning segmentlariga eng yuqori (nol) imtiyozlar darajasi berilishi kerak, bu esa unga kirish huquqini beradi. himoyalangan rejimdagi barcha ob'ektlarga.
P biti xotirada segment mavjudligini bildiradi. U asosan virtual xotirani tashkil qilish uchun ishlatiladi. Ushbu bit yordamida tizim kerakli segment xotirada mavjudligini aniqlashi va kerak bo'lganda uni diskdan yuklashi mumkin. Hozirgi vaqtda disk uchun keraksiz bo'lgan segmentni tushirish jarayonida uning deskriptoridagi P bit qayta o'rnatiladi.
2-atribut baytining pastki yarmini segment chegarasining yuqori bitlari egallaydi. AVL biti (Mavjud, mavjud dan) protsessor tomonidan ishlatilmaydi yoki tahlil qilinmaydi va amaliy dasturlar tomonidan foydalanish uchun mo'ljallangan. Bit D (standart) operandlar va manzillar uchun standart o'lchamni belgilaydi. U ikki turdagi segmentlarning xususiyatlarini o'zgartiradi: bajariladigan va stek. Ko'rsatma segmentining D biti 0 bo'lsa, segment 16-bitli manzillar va operandlar bo'ladi, agar 1, 32-bitli manzillar va operandlar ishlatilsa.
Standart segment atributini operand hajmini almashtirish (66h) va manzil hajmini almashtirish (67p) prefikslari yordamida o'zgartirish mumkin. Shunday qilib, D=0 bo'lgan segment uchun ba'zi ko'rsatmalar oldidagi 66h prefiksi uni operandlarini 32-bit deb hisoblashga majbur qiladi va D=l bo'lgan segment uchun bir xil 66h prefiks, aksincha, operandlarni hosil qiladi. 16-bit. Ba'zi hollarda tarjimonning o'zi ob'ekt moduliga kerakli prefikslarni o'z ichiga oladi, boshqa hollarda ular dasturga "qo'lda" kiritilishi kerak.
|
| |