16-ma'ruza
IJVM arxitekturasining namunaviy ko'rsatmasi
Reja:
16.1. Stek
16.2. IJVM xotira modeli
16.3. IJVM buyruqlar to'plami
16.4. IJVM tuzish
Kalit so'zlar: quvur liniyasi, quvur liniyasi, parolni ochish,
operatsiyalar, ALU, hisoblash, samarali manzil, mikro-operatsiya, IA-32,
yo'riqnoma, haqiqiy arifmetik, dinamik, ijro etish, tarmoqning chuqur
tahlili, ma'lumotlar oqimi tahlili, muddatidan oldin, RISC, ko'rsatmalar
oqimi , oqim, bufer, pul, yo'riqnoma, superskalalar arxitekturasi,
dinamik ijro
16.1. Stek
Deyarli har qanday dasturlash tilida mahalliy o'zgaruvchiga ega
bo'lgan protseduralar (usullar) tushunchasi mavjud. Ushbu
o'zgaruvchilar protsedurani bajarish paytida mavjud, ammo protsedura
tugaganidan keyin endi mavjud emas. Savol tug'iladi: bunday
parametrlarni qaerda saqlash kerak?
Oddiy echim - har bir o'zgaruvchini xotiradagi mutlaq adresga
bog'lash - ishlamaydi. Muammo shundaki, protsedura o'zi qo'ng'iroq
qilishi mumkin. Hozirda protsedura ikki marta chaqirilsa, uning
parametrlari ma'lum manzillarda xotirada saqlanib qolmasligi mumkin,
chunki ikkinchi qo'ng'iroq birinchi qo'ng'iroqqa zid keladi.
Buning o'rniga boshqa strategiya qo'llaniladi. O'zgaruvchilar uchun
maxsus xotira maydoni ajratilgan bo'lib, ular stack deb nomlanadi va
bunda individual o'zgaruvchilar mutlaq adreslarni olmaydilar.
Ro'yxatdan o'tish kitobi, aytaylik LV, joriy protsedura uchun mahalliy
o'zgaruvchilarning asosiy manzilini ko'rsatadi. Anjirga qarang. 4.7, a.
Bunday holda, A protsedurasi a1, a2 va a3 mahalliy o'zgaruvchilar bilan
chaqiriladi va ushbu o'zgaruvchilar uchun xotira bo'limi LV registrida
ko'rsatilgan manzildan boshlab saqlanadi. Boshqa registr, SP protsedura
mahalliy o'zgaruvchilarining yuqori tartibli so'ziga ishora qiladi. Agar
LV registrining qiymati 100 va so'z hajmi 4 bayt bo'lsa, unda SP qiymati
108 ga teng. O'zgaruvchiga kirish uchun uning o'zgarishini LV
manzilidan hisoblang. LV va SP o'rtasidagi ma'lumotlar tuzilishi (ikkala
so'z ham qo'shilgan) mahalliy o'zgaruvchan kadrlar deb nomlanadi.
Anjir. 4.7. Mahalliy o'zgaruvchilarni saqlash uchun stack: A (a)
protsedurasiga qo'ng'iroq paytida; A protseduradan keyin B (b)
qo'ng'iroq qilish tartibi; B protsedurasidan keyin C (c) chaqiruvlari; C va
B protseduralari tugagandan so'ng va A protsedurasi D (d) dan so'ng
Endi A protsedurasi boshqa protsedurani chaqirsa, nima bo'lishini
ko'rib chiqaylik, masalan B protsedurasining 4 mahalliy o'zgaruvchisi
(b1, b2, b3, b4) qaerda saqlanishi kerak? Javob: 1-rasmda
ko'rsatilganidek, A protsedurasi uchun ustun ustidagi ustunga. 4.7, b.
Shuni esda tutingki, protseduraga murojaat qilingandan so'ng, LV
registri B protsedurasining mahalliy o'zgaruvchilariga ishora qiladi. B
protsedurasining mahalliy o'zgaruvchilarini ularning LV dan o'zgarishi
bilan kirish mumkin. Agar B protsedurasi C protsedurasini chaqirsa,
unda LV va SP registrlari 4-rasmda ko'rsatilgandek S protsedurasining
mahalliy o'zgaruvchilarining joylashgan joyiga qarab aniqlanadi. 4.7, v.
C protsedurasi chiqqandan so'ng, B protsedurasi yana ishga
tushiriladi va stack avvalgi holatiga qaytadi (4.7, b-rasmga qarang),
shunda LV endi B protsedurasining mahalliy o'zgaruvchilariga ishora
qiladi, B protsedurasi chiqqandan so'ng stack dastlabki holatiga qaytadi
(rasmga qarang). 4.7, a). LV har doim joriy protseduraning mahalliy
o'zgaruvchilar ramkasining asosiy manzilini va SP ushbu freymning
bosh so'zini ko'rsatadi.
Aytaylik protsedura 5 ta mahalliy o'zgaruvchini o'z ichiga olgan D
chaqiruv protsedurasi. Tegishli suyak sek. 4.7, d) D protseduraning lokal
parametrlari B protsedurasining xotirasi maydonini va S
protsedurasining bir qismidan foydalanadilar. Faqatgina joriy
protseduralar ushbu tashkilot xotirasida joylashgan. Jarayon tugagach,
unga ajratilgan xotira bo'shatiladi.
Ammo stek nafaqat mahalliy o'zgaruvchini saqlash uchun, balki
arifmetik ifodalarni baholash paytida operandlarni saqlash uchun ham
ishlatiladi. Ushbu suyakka operand stack deyiladi. Faraz qilaylik, B
protsedurasini chaqirishdan oldin, A protsedurasi quyidagi hisob-
kitoblarni bajarishi kerak:
a1 = a2 + a3.
Ushbu summani hisoblash uchun, rasmda ko'rsatilganidek, a2 ni
stakka qo'yishingiz mumkin. 4.8, a. Shunda SP registrining qiymati
so'zdagi baytlar soniga teng bo'lgan raqamga ko'payadi (aytaylik, 4 ga)
va birinchi operandning manzilini ko'rsatadi. Keyin a3 o'zgaruvchisi sek.
Da ko'rsatilganidek, suyakka suriladi. 4.8, b. (Keyin matnda
o'zgaruvchilar va protseduralarning nomlari kursiv bilan yoziladi.)
Anjir. 4.8. Arifmetik amallarni bajarish uchun operand stackidan
foydalanish
Endi hisob-kitobni sxemadan ikki so'zni olib tashlaydigan,
qo'shadigan va natijani suyakka qaytaradigan buyruqni bajarish orqali
amalga oshirish mumkin. 4.8, v. Shundan so'ng, yuqoridagi so'zni
stakandan chiqarib, a1 mahalliy o'zgaruvchiga joylashtirish mumkin, bu
rasmda ko'rsatilganidek. 4.8, g.
Mahalliy o'zgaruvchan ramkalar va operand steklarini aralashtirish
mumkin.
Masalan, x 2 + f (x) ifoda qiymatini baholashda f chaqirilganda, (x
2) ifodaning bir qismi operand stackida bo'lishi mumkin. Funktsiyani
baholash natijasi x 2 yuqoridagi sathda qoladi, shunda keyingi
yo'riqnomada operandlar qo'shilishi mumkin.
Shuni ta'kidlash kerakki, barcha mashinalar stakandan mahalliy
parametrlarni saqlash uchun foydalanadilar, ammo hamma ham
operandlarni saqlash uchun foydalanmaydi. Ko'pgina mashinalarda
operand steki mavjud emas, lekin JVM va IJVM ikkalasi bittadan.
Do'stlaringiz bilan baham: |