26.5. Tanaffuslar
Tanaffuslar - bu dasturning o'zi emas, balki boshqa biron bir narsa
tufayli
yuzaga
kelgan
boshqaruv
oqimidagi
o'zgarishlar. Tanaffuslar odatda kirish / chiqish jarayoni bilan
bog'liq. Masalan, dastur diskka ma'lumotlarni uzatishni boshlashni va
uzatish
tugashi
bilanoq
uzilishni
boshlashni
buyurishi
mumkin. Istisnolardan tashqari, tanaffuslar dasturni to'xtatadi va
boshqaruvni Interrupt Service Routine (ISR) dasturiga yoki ma'lum
harakatlarni bajaradigan uzilishlarga ishlov beruvchiga o'tkazadi. Ushbu
amallarni bajarganingizdan so'ng, uzilishni qayta ishlash vositasi
boshqaruvni to'xtatilgan dasturga o'tkazadi. U to'xtatilgan jarayonni
to'xtatilgan holatda bo'lgan holatda qayta boshlashi kerak. Bu shuni
anglatadiki, barcha ichki registrlarning oldingi holati (ya'ni uzilishdan
oldin bo'lgan holat) tiklanishi kerak.
Istisnolar va tanaffuslar o'rtasidagi farq shundaki, istisnolar
dasturga sinxron va uzilishlar asenkron.
Agar siz bir xil kirish ma'lumotlari bilan dasturni qayta-qayta ishga
tushiradigan bo'lsangiz, har safar dasturda bir xil holatlarda istisnolar
ro'y beradi , lekin uzilishlar bo'lmaydi (bizning misolimizdagi diskda,
uzilish faqat disk ma'lumotlarni uzatishni tugatgandan so'ng amalga
oshiriladi, ammo bu emas. dastur talab qiladi). Istisnolardan
reproduktsiya va tanaffuslarning takrorlanmasligi sababi shundaki,
birinchi dastur to'g'ridan-to'g'ri dastur tomonidan chaqiriladi, ikkinchisi
esa bilvosita.
Shovqinlar qanday sodir bo'lishini tushunish uchun oddiy misolni
ko'rib chiqing: kompyuter terminalga belgilar qatorini bosishi
kerak. Dastur dastlab displey uchun mo'ljallangan barcha belgilarni
buferga to'playdi, buferning boshiga ishora qilishi kerak bo'lgan ptr
global o'zgaruvchini ishga tushiradi va ikkinchi global o'zgaruvchilar
sonini ekranda ko'rsatiladigan belgilar soniga teng qiladi. Keyin dastur
terminal tayyorligini tekshiradi va agar tayyor bo'lsa, birinchi belgini
ekranga bosib chiqaradi. kirtish/chiqarish jarayonini boshlash bilan,
CPU bo'shatiladi va boshqa dasturni ishga tushirishi yoki biron bir ishni
bajarishi mumkin.
Biroz vaqt o'tgach, belgi ekranda ko'rinadi. Keyin tanaffusni
boshlash
mumkin.
Asosiy
bosqichlar
quyida
keltirilgan
(soddalashtirilgan shaklda).
Uskuna harakatlari:
1. Qurilma boshqaruvchisi uzilish chizig'ini tizim avtobusiga
yuklaydi.
2. CPU shovqinni qayta ishlashga tayyor bo'lganda, avtobusda
to'xtashni tan olish belgisini tasdiqlaydi.
3. Qurilma boshqaruvchisi uzilish signali tan olinganligini aniqlasa,
u "o'zini tanishtirish" uchun ma'lumot uzatish liniyalariga kichik bir
sonni qo'yadi (ya'ni, qaysi qurilma uzilish manbai ekanligini ko'rsatish
uchun). Bu raqam kesishuvchi vektor deb ataladi.
4. Markaziy protsessor avtobusdan chiqib ketish vektorini o'qiydi
va vaqtincha saqlaydi.
5. CPU dastur hisoblagichini va dastur holati so'zini suyakka itarib
yuboradi .
6. CPU xotira pastki qismidagi jadvalda indeks sifatida
kesishuvchi vektordan foydalangan holda yangi yo'riqnomani
topadi. Agar, masalan, dastur hisoblagichining o'lchami 4 bayt bo'lsa , n
kesish vektori n 4n manziliga to'g'ri keladi. Yangi dastur hisoblagichi
uzilish manbai bo'lgan qurilma uchun uzilishlar tartibining boshlanishini
ko'rsatadi. Ko'pincha, bunga qo'shimcha ravishda, dastur holati so'zi
yuklanadi yoki o'zgartiriladi (masalan , keyingi uzilishlarni
blokirovka qilish uchun ). Keyingi harakatlar dasturiy ravishda amalga
oshiriladi:
7. Interrupt ishlov beruvchisi keyinchalik zarur bo'lgan barcha
registrlarni saqlab qo'yadi. Ular stakanda yoki tizim jadvalida saqlanishi
mumkin .
8. Har bir uzilish vektori ushbu turdagi barcha qurilmalar
tomonidan taqsimlanadi, shu sababli hozirda uzilishlar qaysi terminal
tomonidan sodir bo'lganligi noma'lum. Terminal raqamini ba'zi registrlar
qiymatini o'qish orqali topish mumkin.
9. Keyin siz boshqa har qanday ma'lumotni, masalan, status
kodlarini o'qishingiz mumkin .
10. Agar I / O xatosi bo'lsa, siz ushbu nuqtada ishlov berishingiz
kerak.
11.
Ptr
va
hisoblashning
global
o'zgaruvchilari
yangilanadi.
Birinchisi,
keyingi
baytni
ko'rsatish
uchun
1
ga ko'paytiriladi, ikkinchisi esa 1 ga kamaytirilib, chiqish uchun 1 bayt
qolganligini bildiradi. Agar hisoblash hali ham 0 dan katta bo'lsa, unda
barcha belgilar hali ham chop etilmagan. Hozirda ptr bilan belgilangan
belgi chiqish buferi registriga ko'chiriladi .
12. Agar kerak bo'lsa, qurilmani yoki uzilishni boshqarish
moslamasini uzilish qayta ishlanganligi to'g'risida xabardor qiladigan
maxsus kod chiqariladi.
13. Barcha saqlangan registrlar tiklanadi.
14. CPU to'xtatib turish buyrug'i bajarilib, CPU tanaffusdan
oldingi holatga qaytariladi . Shundan so'ng, kompyuter to'xtatilgan
joydan boshlab ishlashni davom ettiradi.
Savollar
1. Boshqarish oqimi va o'tish davri .
2. Protseduralar .
3. Soprogrammalar .
4. Istisno holatlar .
5. Qayta ko'chirib yvaniya .
http://fayllar.org