Uzulish rejmi va uzilishga ishlov berish algoritmlari

|
Uzulish rejmi va uzilishga ishlov berish algoritmlari
|
bet | 6/9 | Sana | 05.07.2024 | Hajmi | 33,06 Kb. | | #266699 |
Bog'liq 7-ma’ruza. Operandalarni adreslash turlari va usullari. Buyruqla-fayllar.orgUzulish rejmi va uzilishga ishlov berish algoritmlari
Uzilishlar - bu dasturning o'zi emas, balki boshqa sabablar bilan bog'liq bo'lgan boshqaruv oqimidagi o'zgarishlar. Uzilishlar odatda kiritish-chiqarish jarayoni bilan bog'lanadi. Misol uchun, dastur diskka ma'lumotni uzatishni boshlash va uzatish tugashi bilanoq uzilishni boshlashni buyurishi mumkin. Istisnolarda bo'lgani kabi, uzilishlar dasturni to'xtatadi va boshqaruvni ma'lum bir harakatni amalga oshiradigan Interrupt Service Routine (ISR) yoki uzilishni ishlov beruvchiga o'tkazadi. Ushbu amallar bajarilgandan so'ng, uzilishni ishlov beruvchi boshqaruvni uzilgan dasturga o'tkazadi. U to'xtatilgan jarayonni to'xtatilgan paytdagi holatda qayta boshlashi kerak. Bu shuni anglatadiki, barcha ichki registrlarning oldingi holati (ya'ni uzilishgacha bo'lgan holat) tiklanishi kerak.
Istisnolar va uzilishlar o'rtasidagi farq shundaki, istisnolar dasturga nisbatan sinxrondir, uzilishlar esa asinxrondir. Agar siz dasturni bir xil kiritilgan ma'lumotlar bilan bir necha marta qayta ishga tushirsangiz, istisnolar har safar dasturning bir xil joylarida sodir bo'ladi, lekin uzilishlar bo'lmaydi (bizning diskdagi misolimizda, disk ma'lumotni o’tkazish tugatgandan keyingina uzilish sodir bo'ladi, dastur talab qilganda emas). Istisnolarning takrorlanuvchanligi va uzilishlarning takrorlanmasligining sababi shundaki, birinchisi bevosita dastur tomonidan, ikkinchisi esa bilvosita chaqiriladi.
Uzilishlar qanday ishlashini tushunish uchun umumiy misolni ko'rib chiqamiz: kompyuter o'z terminaliga belgilar qatorini chop etishi kerak. Dastur avval ekranda ko'rsatiladigan barcha belgilarni buferga joylashtiradi, global o'zgaruvchini ptr buferning boshiga ko'rsatish uchun inisializatsiya qiladi va ikkinchi global o'zgaruvchining hisobini ekranda ko'rsatiladigan belgilar soniga o'rnatadi. Shundan so'ng dastur terminalning tayyorligini tekshiradi va agar shunday bo'lsa, birinchi belgini ekranga chiqaradi (masalan, 7.6-rasmda ko'rsatilgan registrlar yordamida). Kirish-chiqarish jarayonini boshlash orqali protsessor bo'shatiladi va boshqa dasturni ishga tushirishi yoki boshqa ishni bajarishi mumkin.
Biroz vaqt o'tgach, ekranda belgi ko'rsatiladi. Shundan so'ng, uzilish boshlanishi mumkin. Asosiy qadamlar quyida keltirilgan (soddalashtirilgan shaklda).
Apparat ta’minoti harakatlari:
1. Qurilma boshqaruvchisi uzilish chizig'ini tizim shinasiga yuklaydi.
2. Protsessor uzilishni boshqarishga tayyor bo'lganda, u shinaga uzilishni tasdiqlash belgisini o'rnatadi.
3. Qurilma tekshirgichi uzilish signali tasdiqlanganligini aniqlaganda, u "o'zini tanishtirish" uchun (ya'ni uzilish manbai qaysi qurilma ekanligini ko'rsatish uchun) ma'lumotlar liniyalariga kichik butun sonni qo'yadi. Bu raqam uzilish vektori deb ataladi.
4. Markaziy protsessor uzilish vektorini shinadan o'qiydi va uni vaqtincha saqlaydi.
5. Markaziy protsessor dastur hisoblagichini va dastur holati so'zini stekga suradi.
6. Markaziy protsessor xotiraning pastki qismidagi jadvalda indeks sifatida uzilishlar vektoridan foydalangan holda yangi dastur hisoblagichini topadi. Agar, masalan, dastur hisoblagichining o'lchami 4 bayt bo'lsa, uzilish vektori n 4n manziliga mos keladi. Yangi dastur hisoblagichi uzilish manbai bo'lgan qurilma uchun uzilish tartibining boshlanishiga ishora qiladi. Ko'pincha dastur holati so'zi ham yuklanadi yoki o'zgartiriladi (masalan, keyingi uzilishlarni bloklash uchun).
Keyingi harakatlar dasturiy tarzda amalga oshiriladi:
7. Uzilishlarni qayta ishlovchi o'ziga kerak bo'lgan barcha registrlarni keyinchalik qayta tiklash uchun saqlaydi. Ular stekda yoki tizim jadvalida saqlanishi mumkin.
8. Har bir uzilish vektori ushbu turdagi barcha qurilmalarga taqsimlanadi, shuning uchun qaysi terminal uzilishga sabab bo'lganligi hali ma'lum bo’lmaydi. Terminal raqamini ba'zi registrning qiymatini o'qish orqali topish mumkin.
9. Shundan so’ng har qanday boshqa uzilish ma'lumotlarini, masalan, holat kodlarini o'qish mumkin.
10. Agar kirish/chiqarish xatosi yuzaga kelsa, uni shu bosqichda hal qilish kerak.
11. Global o'zgaruvchilar ptr va count yangilanadi. Birinchisi keyingi baytni ko'rsatish uchun 1 ga oshiriladi, ikkinchisi esa chiqish uchun 1 bayt kam qolganligini bildirish uchun 1 ga kamayadi. Agar count hali ham 0 dan katta bo'lsa, unda barcha belgilar hali ekranga chiqarilmagan. Hozirgi vaqtda ptr tomonidan ko'rsatilgan belgi chiqish buferi registriga ko'chiriladi.
12. Agar kerak bo'lsa, qurilma yoki uzilish boshqaruvchisiga uzilishga ishlov berilganligini bildiruvchi maxsus kod chiqariladi.
13. Barcha saqlangan registrlar tiklanadi.
14. Protsessorni uzilishdan oldingi holatiga qaytaradigan uzilishdan chiqish buyrug'i bajariladi. Shundan so'ng, kompyuter to'xtatilgan joydan ishlashni davom ettiradi.
Uzilishlar bilan bog'liq muhim shaffoflik tushunchasi mavjud. Uzilish sodir bo'lganda, turli xil harakatlar va turli xil dasturlar ishga tushirilishi mumkin, ammo barchasi tugagach, kompyuter uzilishdan oldingi holatga qaytishi lozim. Bunday xususiyatga ega bo'lgan uzilishga ishlov beruvchi dastur shaffof deb ataladi.
Agar kompyuterda faqat bitta kiritish-chiqarish qurilmasi mavjud bo'lsa, u holda uzilishlar biz yuqorida tavsiflanganimizdek ishlaydi. Biroq, katta kompyuter bir vaqtning o'zida bir nechta qurilmalar, ehtimol turli foydalanuvchilar uchun ishlaydigan ko'plab kiritish/chiqarish qurilmalariga ega bo'lishi mumkin. Uzilishni qayta ishlash moslamasi ishlayotgan vaqtda boshqa kiritish-chiqarish qurilmasi ham o'z uzilishini ishga tushirishga harakat qilishi ehtimoli bor.
Bu yerda ikkita yondashuv mavjud. Birinchidan, barcha uzilishlarni qayta ishlovchi dasturlar keyingi uzilishlarning oldini olishi lozim (registrlarni saqlashdan oldin ham) - bu holda uzilishlar qat'iy navbati bilan sodir bo'ladi. Biroq, bu uzoq vaqt davomida bo'sh turolmaydigan qurilmalar bilan bog'liq muammolarga olib kelishi mumkin. Misol uchun, sekundiga 9600 bit uzatish tezligini qo'llab-quvvatlaydigan aloqa liniyasi har 1042 mikrosekundda belgilarni oladi. Agar ikkinchisi kelganda birinchi belgi qayta ishlanmagan bo'lsa, ma'lumotlar yo'qoladi.
Agar kompyuterda shunga o'xshash kiritish-chiqarish qurilmalari bo'lsa, unda har bir qurilmaga ma'lum bir ustuvorlikni belgilash maqsadga muvofiq, yuqori ustuvorlik - muhimroq qurilmalar uchun, past ustuvorlik - kamroq muhim qurilmalar uchun. Markaziy protsessor, shuningdek, dastur holati so'zining maydonlaridan biri bilan belgilanadigan ustuvorliklarga ega bo'lishi kerak. Agar n ustunlikka ega qurilma uzilishga sabab bo'lsa, uzilishni ishlov beruvchi ham n ustuvorligi bilan ishlashi kerak.
Agar uzilishni qayta ishlash dasturi n ustuvorligida bajarilayotgan bo'lsa, uzilishni qayta ishlash tugallanmaguncha va markaziy protsessor pastroq ustuvor dasturni bajarishni boshlamaguncha, pastroq ustunlikka ega bo'lgan boshqa qurilmadan uzilishni boshqarishga bo'lgan har qanday urinish e'tiborga olinmaydi. Shu bilan birga, ustuvorligi yuqori bo'lgan qurilmalardan uzilishlar kechiktirmasdan qayta ishlanishi kerak.
Chunki uzilishlarni qayta ishlovchilarning o‘zlari ham uzilishi mumkin, vaziyatni to‘g‘ri nazorat qilishning yagona yo‘li barcha uzilishlarni shaffof qilishdir. Bir nechta uzilishlarga ega oddiy misolni ko'rib chiqamiz. Kompyuterda uchta kiritish-chiqarish qurilmasi bo'lsin: mos ravishda 2, 4 va 5 ustuvorliklarga ega printer, disk va RS232 liniyasi. Dastlab (t = 0, bu erda t - vaqt) foydalanuvchi dasturi ishlamoqda. t = 10 da printer kutilmaganda uzilishni keltirib chiqaradi. 7.6-rasmda ko'rsatilganidek, printerdan uzilishni qayta ishlash moslamasi (ISR) ishga tushiriladi.
t=15 da RS232 liniyasi tomonidan uzilishlar talab qilinadi. RS232 liniyasi printerga (2) qaraganda yuqoriroq ustuvorlikka (5) ega bo'lganligi sababli, bu uzilish qayta ishlanadi. Printer ISR ishlayotgan mashina holati stekda saqlanadi va RS232 liniya uzilishi ishlovchisi ishga tusha boshlaydi.
|
| |