Interrupt ishlovchisi - Interrupt handler - Wikipedia

Kompyuterda tizimlarni dasturlash, an interrupt ishlovchisi, shuningdek, an uzilish xizmati muntazamligi yoki ISR, ma'lum bir narsa bilan bog'liq bo'lgan maxsus kod blokidir uzmoq holat. To'siqni qayta ishlash dastgohi apparatning uzilishi, dasturiy ta'minotni to'xtatish bo'yicha ko'rsatma yoki dasturiy ta'minot bilan boshlanadi istisnolar va amalga oshirish uchun ishlatiladi qurilma drayverlari yoki himoyalangan ish rejimlari orasidagi o'tish, masalan tizim qo'ng'iroqlari.

Interruptni ishlov berishning an'anaviy shakli bu apparat uzilishlari ishlovchisi. Uskuna uzilishlari elektr sharoitlari yoki amalga oshirilgan past darajadagi protokollardan kelib chiqadi raqamli mantiq, odatda uzilish vektorlarining qattiq kodlangan jadvali orqali, odatdagi ijro oqimiga mos kelmaydigan (kesishni maskalash darajalariga ruxsat berilganligi sababli), ko'pincha alohida stakdan foydalangan holda va avtomatik ravishda boshqa ijro kontekstiga (imtiyoz darajasi) kiradigan vaqt uchun. uzilish ishlovchilarining bajarilishi. Umuman olganda, apparat uzilishlari va ularning ishlov beruvchilari joriy kodning uzilishini talab qiladigan ustuvor shartlarni bajarish uchun ishlatiladi protsessor ijro etmoqda.[1][2]

Keyinchalik dasturiy ta'minot uchun dasturiy ta'minot uzilishi (sinxron uzilish shakli) yordamida bir xil mexanizmni ishga tushirish qulay bo'lishi aniqlandi. Apparat darajasida qattiq kodlangan uzilishni yuborish jadvalidan foydalanish o'rniga, dasturiy ta'minot uzilishlari ko'pincha operatsion tizim shakli sifatida darajasi qayta qo'ng'iroq qilish funktsiyasi.

Interrupt ishlovchilari juda ko'p funktsiyalarga ega, ular uzilishni keltirib chiqaradigan narsa va interruptni boshqarish vazifasini bajarish tezligiga qarab o'zgaradi. Masalan, a tugmachasini bosish kompyuter klaviaturasi,[1] yoki harakatlantiruvchi sichqoncha, tugmachani yoki sichqonchaning holatini o'qiydigan va shu bilan bog'liq ma'lumotlarni kompyuter xotirasiga ko'chiradigan interrupt ishlovchilarini chaqiradigan uzilishlarni keltirib chiqaradi.[2]

Interrupt ishlovchisi - bu past darajadagi hamkasbi voqea ishlovchilari. Shu bilan birga, uzilishlar ishlovchilari g'ayrioddiy ijro kontekstiga ega, vaqt va makonda juda ko'p cheklovlar mavjud va ularning o'ziga xos asenkron tabiati ularni standart amaliyot bilan disk raskadrovka qilishni juda qiyinlashtiradi (takrorlanadigan sinov holatlari umuman mavjud emas), shuning uchun maxsus ko'nikmalar talab etiladi ning muhim to'plami tizim dasturlash - apparatni to'xtatish qatlamida ishlaydigan dastur muhandislari.

Interrupt bayroqlari

Boshqa voqea ishlovchilaridan farqli o'laroq, interrupt ishlovchilari o'zlarining asosiy funktsiyalari doirasida uzilish bayroqlarini tegishli qiymatlarga o'rnatishi kutilmoqda.

O'rnatilgan uzilishlarni qo'llab-quvvatlaydigan protsessorda ham ishlov beruvchiga tez-tez protsessor apparatining ishlashi bilan butun dunyo bo'ylab maskalangan barcha uzilishlar bilan erishiladi. Ushbu arxitekturada uzilishlarni boshqaruvchi odatda zarur bo'lgan eng kichik kontekstni tejaydi va birinchi imkoniyatda global uzilishni o'chirib qo'yadigan bayroqni qayta o'rnatadi, chunki hozirgi ishlov beruvchini to'xtatish uchun ustuvor bo'lgan uzilishlarga yo'l qo'yiladi. Shuningdek, uzilish ishlov beruvchisi joriy uzilish manbasini biron bir usul bilan bostirishi kerak (ko'pincha atrof-muhit registrida ba'zi turdagi bayroq bitlarini almashtirish), shu sababli ishlov beruvchining chiqishida joriy uzilish darhol takrorlanmasligi uchun cheksiz tsikl paydo bo'ladi. .

Har qanday vaziyatda ham uzilishlar tizimida uzilishlar tizimidan to'liq to'g'ri holatda chiqish ba'zan qiyin va talabchan vazifa bo'lishi mumkin va uning noto'g'ri ishlashi tizimni butunlay to'xtatib turadigan ko'plab jiddiy xatolarning manbai hisoblanadi. Ushbu xatolar ba'zida vaqti-vaqti bilan bo'ladi, chunki noto'g'ri ishlangan chekka ishi bir necha hafta yoki bir necha oy davomida doimiy ishlamaydi. Interfaollarni qayta ishlashni rasmiy tasdiqlash juda qiyin, shu bilan birga sinovlar faqat eng tez-tez uchraydigan nosozlik rejimlarini aniqlaydi, shuning uchun uzilishlar ishlovchilaridagi nozik, vaqti-vaqti bilan xatolar ko'pincha oxirgi mijozlarga yuboriladi.

Ijro konteksti

Zamonaviy operatsion tizimda, kirish paytida apparatni to'xtatib turuvchi ishlov berishning konteksti juda nozik.

Ishlash sababli, ishlov beruvchi odatda hech qanday maxsus aloqaga ega bo'lmagan ishlaydigan jarayonning xotirasi va bajarilish kontekstida ishga tushiriladi (uzilish asosan ishlaydigan kontekstni egallab oladi - jarayon vaqtini hisobga olish ko'pincha uzilishlar bilan ishlashga sarflanadigan vaqtni hisoblab chiqadi to'xtatilgan jarayon). Biroq, uzilib qolgan jarayondan farqli o'laroq, uzilish, odatda qattiq kodlangan protsessor mexanizmi tomonidan apparat resurslariga to'g'ridan-to'g'ri kirish uchun etarlicha yuqori imtiyoz darajasiga ko'tariladi.

Bo'sh joyni hisobga olish

Past darajadagi mikrokontrolrda chip himoya rejimlariga ega bo'lmasligi mumkin va yo'q xotirani boshqarish bo'limi (MMU). Ushbu mikrosxemalarda, uzilishlar ishlovchisining bajarilish konteksti, asosan, belgilangan o'lchamdagi kichik to'plamda ishlaydigan to'xtatilgan dastur bilan bir xil bo'ladi (xotira resurslari an'anaviy ravishda pastki qismida juda kam). Ichki uzilishlar tez-tez ta'minlanadi, bu esa stakdan foydalanishni kuchaytiradi. Ushbu dasturlash ishidagi uzilishlarni boshqaruvchisining asosiy cheklovi, eng yomon holatdagi mavjud to'plamdan oshib ketmaslikdir, bu dasturchidan har bir amalga oshirilgan uzilishlar ishlov beruvchisi va dastur vazifalari uchun stakka bo'shliqqa bo'lgan ehtiyoj haqida global miqyosda fikr yuritishni talab qiladi.

Ajratilgan stack maydoni oshib ketganda (shart sifatida tanilgan stack overflow ), odatda bu qo'shimcha qurilmalarda ushbu sinf chiplari tomonidan aniqlanmaydi. Agar stek boshqa yoziladigan xotira maydoniga o'tib ketsa, ishlov beruvchi odatda kutilganidek ishlaydi, lekin dastur keyinchalik (ba'zan ancha keyin) ish beruvchining xotiraning buzilishidan kelib chiqqan holda ishlamay qoladi. Agar stek yozib bo'lmaydigan (yoki himoyalangan) xotira maydoniga o'tsa, bunday xato odatda ishlov beruvchining o'zida paydo bo'ladi (odatda, keyinchalik disk raskadrovka qilish osonroq bo'ladi).

Yozish mumkin bo'lgan vaziyatda, qo'riqchi stek qo'riqchisini amalga oshirish mumkin - bu qonuniy to'plamning oxirigacha belgilangan qiymat, uning qiymati mumkin ustiga yozish kerak, ammo tizim to'g'ri ishlasa hech qachon bo'lmaydi. Doimiy qo'riqchining buzilishini qandaydir qo'riqchi it mexanizmi bilan muntazam ravishda kuzatib borish odatiy holdir. Bu buzilish operatsiyasiga yaqin vaqt oralig'ida to'plamning to'lib toshish holatlarining aksariyatini ushlaydi.

Ko'p vazifali tizimda har bir bajarilish satri odatda o'z to'plamiga ega bo'ladi. Agar uzilishlar uchun hech qanday maxsus tizim to'plami berilmasa, uzilishlar har qanday bajarilish ipi kesilgan bo'lsa ham, bo'sh joyni sarf qiladi. Ushbu dizaynlar odatda MMUni o'z ichiga oladi va foydalanuvchi to'plamlari odatda tizimning xatosi sifatida (disk raskadrovka uchun) yoki bo'sh joyni kengaytirish uchun xotirani qayta tuzish uchun MMU tomonidan tuzoqqa tushadigan tarzda tuzilgan. Mikrokontrollerning ushbu darajasidagi xotira resurslari odatda juda kam cheklangan, shuning uchun staklarni xavfsizlikning katta chegarasi bilan ajratish mumkin.

Yuqori iplarni hisoblashni qo'llab-quvvatlaydigan tizimlarda, agar apparat uzilish mexanizmi stakni maxsus tizim stekiga almashtirsa yaxshi bo'ladi, shunda iplar to'plamlarining hech birida eng yomon ichki o'rnatilgan uzilishni hisobga olish kerak bo'lmaydi. 8-bitgacha bo'lgan kichik protsessorlar Motorola 6809 1978 yildan alohida tizim va foydalanuvchi stek ko'rsatkichlarini taqdim etdi.

Vaqt va bir xillikdagi cheklovlar

Ko'pgina sabablarga ko'ra, uzilishlarni ishlov beruvchini imkon qadar qisqa muddatda bajarilishini istashadi va qo'shimcha ravishda blokirovka qilish mumkin bo'lgan tizim qo'ng'iroqlarini chaqirish uchun apparat to'xtatilishi juda ma'qul (yoki taqiqlangan). Bir nechta bajarilish yadrosi bo'lgan tizimda qayta yashash Bundan tashqari, ular birinchi o'rinda turadi. Agar tizim apparat ta'minotini ta'minlasa DMA, bir vaqtda muammolar faqat bitta CPU yadrosi bilan ham paydo bo'lishi mumkin. (O'rta darajadagi mikrokontrollerda himoya darajalari va MMU yo'qligi kamdan-kam uchraydi, lekin shunga qaramay DMA dvigatelini ko'plab kanallar bilan ta'minlaydi; ushbu stsenariyda ko'plab uzilishlar odatda tetiklenir DMA dvigatelining o'zi va shu bilan bog'liq bo'lgan uzilishlar ishlovchisi ehtiyotkorlik bilan yurishi kerak.)

Uskunani uzish moslamalarini oldingi va orqa qismlarga ajratish uchun zamonaviy amaliyot rivojlandi. Old qism (yoki birinchi daraja) ishlaydigan uzilishlar jarayonida dastlabki uzilishni oladi, apparatni unchalik zarur bo'lmagan holatga qaytarish uchun minimal ishni bajaradi (masalan, to'liq qabul qilish tamponini bo'shatish) va keyin orqa qismni belgilaydi (yoki ikkinchi darajali) tegishli rejalashtirish ustuvorligi bo'yicha yaqin kelajakda bajarish uchun; chaqirilgandan so'ng, orqa qism o'zining cheklangan cheklovlari bilan o'z jarayonining kontekstida ishlaydi va ishlov beruvchining mantiqiy operatsiyasini bajaradi (masalan, yangi olingan ma'lumotlarni operatsion tizim ma'lumotlari navbatiga etkazish).

Zamonaviy operatsion tizimlarda ajratilgan ishlov beruvchilar

Bir nechta operatsion tizimlarda - ‌Linux, Unix, macOS, Microsoft Windows, z / OS, DESQview va ilgari ishlatilgan ba'zi boshqa operatsion tizimlar - rupt uzilishlarni boshqaruvchilar ikki qismga bo'lingan: Birinchi darajadagi uzilishlarni boshqarish (FLIH) va Ikkinchi darajadagi uzilishlarni ishlovchilar (SLIH). FLIHlar sifatida ham tanilgan qattiq to'xtatuvchi ishlovchilar yoki tez uzilishni boshqaruvchilar, va SLIHlar sifatida ham tanilgan sekin / yumshoq uzilish ishlovchilari, yoki Kechiktirilgan protsedura qo'ng'iroqlari Windows-da.

FLIH shunga o'xshash minimal platformaga xos uzilishlarni amalga oshiradi tartibni to'xtatish. Qisqartirishga javoban, a mavjud kontekstni almashtirish, va uzilish uchun kod yuklanadi va bajariladi. FLIHning vazifasi - bu uzilishga tezkor xizmat ko'rsatish yoki faqat uzilish vaqtida mavjud bo'lgan platformaga xos muhim ma'lumotlarni yozib olish va jadval uzoq muddatli uzilishlarni boshqarish uchun SLIH-ning bajarilishi.[2]

FLIHlar sabab bo'ladi chayqalish jarayonni bajarishda. FLIHlar, shuningdek, uzilishlarni maskalashadi. Jitterni kamaytirish eng muhimi real vaqt operatsion tizimlari, chunki ular ma'lum bir kodning bajarilishi kelishilgan vaqt ichida tugashiga kafolat berishlari kerak.Jitterni kamaytirish va maskalangan uzilishlardan ma'lumotlarni yo'qotish potentsialini kamaytirish uchun dasturchilar FLIH-ning bajarilish vaqtini minimallashtirishga harakat qilishadi. iloji boricha SLIHga. Zamonaviy kompyuterlarning tezligi bilan FLIHlar barcha qurilmalarga va platformalarga bog'liq ishlov berishni amalga oshirishi mumkin va bundan keyin platformadan mustaqil uzoq umr ko'rish uchun SLIH dan foydalanishi mumkin.

Xizmat ko'rsatuvchi uskunalar, odatda, ularning bajarilishini tugatguncha, ular bilan bog'liq bo'lgan uzilishlarni yashiradi (yoki uni shunday holatda yashiradi). U bilan bog'liq uzilishni tugatmasdan ochib beradigan (g'ayrioddiy) FLIH a deb nomlanadi reentrant interrupt ishlovchisi. Reentrant interrupt ishlovchilari sabab bo'lishi mumkin stack overflow ko'pdan imtiyozlar xuddi shu tarzda uzilish vektori va shuning uchun ular odatda oldini olishadi. A ustuvor uzilish tizimi, FLIH shuningdek (qisqacha) teng yoki kichikroq ustuvorlikning boshqa uzilishlarini yashiradi.

SLIH jarayonga o'xshash uzoq uzilishlarni qayta ishlash vazifalarini bajaradi. SLIHlar ham bag'ishlangan yadro har bir ishlov beruvchiga mos keladigan ip, yoki yadro ishchilarining iplari havzasi tomonidan bajariladi. Ushbu iplar a navbatda turish operatsion tizimda protsessor vaqti bo'lguncha ular uzilish uchun ishlov berishni amalga oshirishlari mumkin. SLIHlar uzoq umr ko'rish muddatiga ega bo'lishi mumkin va shuning uchun odatda iplar va jarayonlarga o'xshash tarzda rejalashtirilgan.

Linuxda FLIHlar chaqiriladi yuqori yarmiva SLIHlar deyiladi pastki yarmi yoki pastki yarmi.[1][2] Bu ikkalasi ham bir qismi bo'lgan boshqa Unix tizimlarida ishlatiladigan nomlashdan farq qiladi pastki yarmi.[tushuntirish kerak ]

Shuningdek qarang

Adabiyotlar

  1. ^ a b v "Linux yadrosi modulini dasturlash bo'yicha qo'llanma, 12-bob. Interrupt ishlovchilari".. Linux hujjatlari loyihasi. 2007 yil 18-may. Olingan 20 fevral, 2015.
  2. ^ a b v d Jonathan Corbet; Alessandro Rubini; Greg Kroah-Xartman (2005 yil 27 yanvar). "Linux Device Drivers, Chapter 10. Interrupt Handling". (PDF). O'Reilly Media. Olingan 20 fevral, 2015.