Кіріспе

Операциялық жүйелерде үзіліс даулы - процессордың уақытын көп бөлігін жалмап, үзілістердің шамадан тыс санын алатын оқиға. Тоқтату дауылдары, әдетте, тоқтам мөлшерін шектеуді қолдамайтын аппараттық құрылғылардан туындайды.

Өмірбаян

Тоқтату процессі, әдетте, уақыт бөлісу операциялық жүйелерде алдын ала болмайтын міндет болғандықтан, тоқтату даулымы пайдаланушының кірісіне баяу жауап береді немесе тіпті жүйені толығымен тоқтатады. Бұл жағдай әдетте "тірі тұйықтау" деп аталады. Мұндай жағдайда жүйе өз ресурстарының көп бөлігін басқа жұмыстарды орындаудың орнына үзілістерді өңдеуге жұмсайды. Соңғы пайдаланушы үшін ол еш нәрсені өңдемейді, өйткені еш уақытта шығыс болмайды. Тоқтату дауылдары кейде ұрып-соғумен шатастырылады, өйткені екеуінде де ұқсас белгілер бар (пайдаланушының кірісіне жауап бермейді немесе баяу жауап береді, шығысы аз немесе мүлдем жоқ). Ортақ себептерге: дұрыс конфигурацияланбаған немесе ақаулы аппараттық жабдық, ақаулы құрылғы драйверлері, операциялық жүйедегі ақаулар немесе бір немесе бірнеше компоненттердің метастабильділігі жатады. Соңғы жағдай прототиптен немесе әуесқойлар құрастырған аппараттан тыс сирек кездеседі. Қазіргі заманғы аппараттық және операциялық жүйелердің көпшілігінде тосқауыл дауылдың әсерін азайту әдістері бар. Мысалы, Ethernet контроллерлерінің көпшілігі үзілісті "ауысымды шектеуді" іске асырады, бұл контроллерді әрбір ол шығарған үзілістің арасында бағдарламаланатын уақыт күтуге мәжбүр етеді. Құрылғыда болмаған кезде, ұқсас функционалдық әдетте құрылғы драйверіне және/немесе операциялық жүйенің өзіне жазылады. Ең көп таралған себеп - басқа құрылғының "артында" APIC (Advanced Programmable Interrupt Controller) құрылғысына үзіліс сигналы жібергенде. Көптеген компьютерлік шеттік құрылғылар үзілістерді APIC арқылы жасайды, өйткені үзілістер саны әрқашан құрылғылар санына қарағанда аз (әдетте заманауи ПК үшін 15). ОЖ кейін осы үзіліске тіркелген әрбір драйверді оның аппараттық жасақтамасынан басталған-ақ сұрауы керек. Қателік драйверлер әрқашан "иә" деп мәлімдей алады, бұл ОЖ-ның осы үзіліске тіркелген басқа драйверлерге сұрау салуға мүмкіндік бермейді (бір уақытта тек бір үзілісті өңдеуге болады). Сондықтан үзілісті бастапқыда сұраған құрылғы үзіліске қызмет көрсетпейді, сондықтан жаңа үзіліс пайда болады (немесе тазартылмайды) және процессор үзіліс сигналдарымен үнемі суға батып кетеді. Кез келген операциялық жүйе осындай ақаулықтан туындаған үзіліс дауыл кезінде өмір сүре алады. Ядроның жөндеушісі, әдетте, ақаулы драйверді жүктемелеу арқылы дауылды бұза алады, егер пайдаланушының кірісі әлі де мүмкін болса, ақаулы драйвердің "төменінде" үзілісті жоюға мүмкіндік береді. Бұл FreeBSD-дің ескі нұсқасында болды, онда ISA үйлесімділік режимінде жұмыс істеуге конфигурацияланған PCI карталары ISA үзілісі маршруттауымен дұрыс әрекеттесе алмады. Бұл операциялық жүйенің үзілістерді ешқашан байқай алмауына немесе операциялық жүйенің оларды ешқашан тазарта алмайтынына әкеледі, нәтижесінде үзіліс даулымы пайда болады. Драйверлерді көбінесе үшінші тарап іске асыратындықтан, көптеген операциялық жүйелерде белгіленген аралықтарда немесе дөңгелек робиндік түрде күтіп тұрған үзілістерді сұрайтын сауалнама режимі бар. Бұл режимді бүкіл әлем бойынша, әрбір драйверге, үзіліс негізінде немесе операциялық жүйе ақаулық жағдайын немесе шамадан тыс үзіліс пайда болуын анықтаса, динамикалық түрде орнатуға болады. Сауалнама режимі үзілістер саны немесе үзілістен туындаған ресурстарды пайдалану белгілі бір шектерден асып кеткен кезде динамикалық түрде іске қосылуы мүмкін. Осы шектер бұдан былай асып кетпегенде, ОЖ бұзылған драйверді, бұзылған немесе бұзылған басқаруды бұзылған режимнен дауыс беру режиміне ауыстыра алады. Жабдықта үзіліс жылдамдығын шектеу, әдетте, дауыс беру режимін пайдалануды жоққа шығарады, бірақ егер процессор үзіліс жылдамдығын ұстап тұру үшін тез алмаса, қарқынды I / O кезінде қалыпты жұмыс кезінде болуы мүмкін.

Тарих

Мүмкін, бірінші бұрғылау дауыл 1969 жылы Аполлон 11 айға қонған кезде болған.

Қарастырылатын мәселелер

Тоқтату жылдамдығын шектеу оптималды нәтижелер үшін мұқият конфигурациялануы керек. Мысалы, үзіліс жылдамдығын шектейтін Ethernet контроллері әр үзілістің арасында желіден алатын пакеттерді буферлейді. Егер жылдамдық тым төмен болса, контроллер буфері толып, пакеттер құлайды. Бұл жылдамдықта үзілістер арасында буфердің қаншалықты тез толтырылатынын және үзілістің үзілу мен буферді жүйеге беру арасындағы үзілістің күту уақытын ескеру керек.

Тоқтатуды азайту

Мәселеге аппараттық және бағдарламалық негізделген тәсілдер бар. Мысалы, FreeBSD үзілістер дауылдарын байқайды және жауап ретінде проблемалық үзілістерді біраз уақыт жасырады. NAPI қолданған жүйе аппараттық негіздегі тәсілдің үлгісі болып табылады: жүйе (дирижер) үзіліске қосылған күйде басталады, содан кейін үзілісті басқарушы үзілісті өшіреді және оқиғаларды басқаруға мүмкіндік береді. Жабдықтық қолдауды пайдаланатын тағы бір қызықты тәсіл - бұл құрылғы оқиға кезегінің күйі "бос" -тан "бос емес" -ке ауысқанда үзіліс тудыратын тәсіл. Содан кейін, егер RX FIFO құйрығында бос DMA дескрипторлары болмаса, құрылғы оқиғаны тастайды. Одан кейін оқиға құйрыққа қосылады және FIFO жазуы бос деп белгіленеді. Егер сол нүктеде кіру (құйрық -1) бос болса (ашық болса), үзіліс пайда болады (деңгей үзілісі) және құйрық көрсеткіші өсіріледі. Егер аппараттық жабдық үзілісті тануды талап етсе, CPU (үзілісті өңдеуші) мұны жасайды, DMA-ның жарамды дескрипторларын басқарады және үзілістен қайтарады.