Interrupt bayrog'i - Interrupt flag

The Interrupt bayrog'i (IF) tizim bayrog'i bit ichida x86 arxitekturasi "s BAYRAKLAR ro'yxatga olinadi yoki yo'qligini aniqlaydigan markaziy protsessor (CPU) maskalanadigan qo'shimcha qurilmalarga javob beradi uzilishlar.[1]

FLAGS registrining 9-biti bo'lgan bit, odatda belgilanganidek, etarli imtiyozlarga ega dasturlar tomonidan o'rnatilishi yoki tozalanishi mumkin. operatsion tizim. Agar bayroq o'rnatilgan bo'lsa 1, maskalanadigan apparat uzilishlari ko'rib chiqiladi. Agar o'chirilgan bo'lsa (o'rnatilgan 0), bunday uzilishlar e'tiborga olinmaydi. IF bilan ishlashga ta'sir qilmaydi maskalanmaydigan uzilishlar (NMI) yoki tomonidan yaratilgan dasturiy ta'minot uzilishlari INT ko'rsatma.

O'rnatish va tozalash

Bayroq CLI yordamida o'rnatilishi yoki tozalanishi mumkin (Clquloq Mennterrupts), STI (Set Mennterrupts) va POPF (Pop Fkechikishlar) ko'rsatmalar.

CLI IFni tozalaydi (0 ga o'rnatadi), STI esa IF ga 1 ga o'rnatadi. POPF stackdan 16 bitni maydonga chiqaradi BAYRAKLAR ro'yxatga olinadi, demak IF stekning yuqori qismidagi to'qqizinchi bit asosida o'rnatiladi yoki tozalanadi.[1]

Imtiyoz darajasi

Uchala holatda ham faqat imtiyozli dasturlar (odatda OS) yadro ) IFni o'zgartirishi mumkin. E'tibor bering, bu faqat tegishli himoyalangan rejim kod. (Haqiqiy rejim kod har doim o'zgarishi mumkin.)

CLI va STI imtiyozli ko'rsatmalar bo'lib, agar ular imtiyozsiz dastur uni bajarishga harakat qilsa, umumiy himoya xatosini keltirib chiqaradi, POPF esa agar dastur imtiyozsiz bo'lsa, IF bayrog'ini o'zgartirmaydi.

The imtiyoz darajasi CLI yoki STI yo'riqnomasini bajarish yoki POPF yordamida IF ni o'rnatish uchun zarur bo'lgan IOPL EFLAGS-da (I / O imtiyoz darajasi). Agar IOPL, masalan, 2 ga o'rnatilgan bo'lsa, faqat 0 halqasida ishlaydigan har qanday dastur CLI-ni bajarishi mumkin. Ko'pgina zamonaviy operatsion tizimlar IOPL-ni 0 ga o'rnatgan, shuning uchun faqat yadro CLI / STI-ni bajarishi mumkin. Buning sababi shundaki, IFni tozalash protsessorni barcha uzilishlarni e'tiborsiz qoldirishga majbur qilishi sababli, agar u yana 1 ga o'rnatilmagan bo'lsa, yadro hech qachon nazoratni qaytarib ololmasligi mumkin.

Eski DOS dasturlari

Ba'zilar eski DOS himoyalangan rejim DOS kengaytirgichidan foydalanadigan va o'zlarining uzilish ishlovchilarini o'rnatadigan dasturlar (odatda o'yinlar) uzilishlarni o'chirish uchun ishlov beruvchilardagi CLI yo'riqnomasidan foydalanadi va POPF (tegishli PUSHF dan keyin) yoki IRET (bayroqlarni stekdan bir qismi sifatida tiklaydi) uning ta'siri) uni qayta tiklash uchun. Agar dastur haqiqiy rejimda ishga tushirilgan bo'lsa, ishlaydi, ammo a dasturida ishlayotganida muammo tug'diradi DPMI zamonaviy operatsion tizimlarga asoslangan konteyner (masalan NTVDM Windows NT yoki undan keyingi versiyalarida). CLI imtiyozli ko'rsatma bo'lgani uchun, ayb dastur undan foydalanishga harakat qilganda operatsion tizimga. Keyinchalik, operatsion tizim odatda STI dasturini ishga tushirguncha (bu boshqa xatoga olib kelishi mumkin) dasturga uzilishlarni etkazib berishni to'xtatadi. Biroq, POPF yo'riqnomasi imtiyozga ega emas va IFni tiklash uchun shunchaki jimgina ishlamayapti. Natijada, operatsion tizim dasturga uzilishlarni etkazib berishni to'xtatadi, keyin esa to'xtab qoladi. Himoyalangan rejim kengaytirgichidan foydalanmaydigan DOS dasturlari bu muammoga duch kelmaydi, chunki ular POPF nosozlikni keltirib chiqaradigan V86 rejimida ishlaydi.

Ushbu masala bo'yicha qoniqarli qarorlar kam. Odatda dasturni o'zgartirish mumkin emas, chunki manba kodi odatda mavjud emas va yig'ilish darajasida katta tahrir qilmasdan STIni kiritish uchun ko'rsatma oqimida joy yo'q. Dasturdan CLI-larni olib tashlash yoki V86 xostni CLI-ni butunlay e'tiborsiz qoldirishi, agar mehmonning interrupt ishlovchilari qayta kirishda xavfsiz bo'lmasa, boshqa xatolarga olib kelishi mumkin (garchi zamonaviy protsessorda bajarilsa, ular uzilishlar bir-birining ustiga chiqmasligi uchun odatda tez bajariladi).

CLI

CLI odatda a sifatida ishlatiladi sinxronizatsiya uniprotsessorli tizimlardagi mexanizm. Masalan, CLI ishlatiladi operatsion tizimlar uzilishlarni o'chirish uchun yadro kod (odatda a haydovchi ) oldini olish mumkin poyga shartlari bilan interrupt ishlovchisi. E'tibor bering, CLI faqat bajarilgan protsessor uchun uzilish bayrog'iga ta'sir qiladi; yilda ko'p protsessor tizimlar, CLI yo'riqnomasini bajarish, boshqa protsessorlarda uzilishlarni o'chirmaydi. Shunday qilib, haydovchi / uzilishni boshqaruvchisi poygasi holati hali ham yuz berishi mumkin, chunki boshqa protsessorlar uzilishlarga xizmat ko'rsatishi va buzilgan uzilish ishlovchilarini bajarishi mumkin. Ushbu tizimlar uchun boshqa sinxronizatsiya mexanizmlari qulflar barcha poyga sharoitlarini oldini olish uchun CLI / STI ga qo'shimcha ravishda foydalanish kerak.

Chunki HLT buyruq uzilish sodir bo'lguncha to'xtaydi, CLI va HLT birikmasi odatda qasddan ishlatiladi osib qo'ying Kompyuter.

STI

STI yo'riqnomasi IFni o'rnatish orqali uzilishlarni ta'minlaydi.

Jinsiy yo'l bilan yuqadigan yuqumli kasalliklar yo'riqnomasiga oid bir qiziq g'alati narsa shundaki, darhol ta'sir ko'rsatadigan CLI-dan farqli o'laroq, ko'rsatmalar STIdan so'ng darhol to'xtatiladi. Buning bir yon ta'siri IF = 0 bo'lishi mumkin, keyin STI yo'riqnomasidan so'ng darhol CLI buyrug'ini bajarish uzilishlar hech qachon tan olinmasligini anglatadi. STI yo'riqnomasi IF bayrog'ini o'rnatadi, ammo uzilishlar keyingi ko'rsatmalardan keyin tekshirilmaydi, bu holda darhol kuchga kiradigan CLI bo'ladi. Bunday xatti-harakatlar mavjud bo'lib, doimiy ravishda uzilishlarni amalga oshiradigan protsessor oldinga siljishi mumkin. Qarang IA-32 tafsilotlar uchun qo'llanmalar.

Shuningdek qarang

Adabiyotlar

  1. ^ a b "Intel Architecture Software Developer qo'llanmasi, 2-jild: ko'rsatmalar to'plami uchun qo'llanma" (PDF). Olingan 2007-07-13.

Tashqi havolalar