Ընդհատում ընդդեմ բացառության
Ցանկացած համակարգչում, ծրագրի իր բնականոն կատարման ընթացքում, կարող են լինել իրադարձություններ, որոնք կարող են հանգեցնել CPU-ի ժամանակավոր դադարեցմանը: Նման իրադարձությունները կոչվում են ընդհատումներ: Ընդհատումները կարող են առաջանալ ինչպես ծրագրային, այնպես էլ ապարատային անսարքությունների պատճառով: Սարքավորումների ընդհատումները կոչվում են (պարզապես) ընդհատումներ, մինչդեռ ծրագրային ընդհատումները կոչվում են բացառություններ: Երբ ընդհատումը (ծրագրային ապահովում կամ սարքաշար) բարձրացվում է, կառավարումը փոխանցվում է հատուկ ենթածրագրին, որը կոչվում է ISR (Ընդհատումների սպասարկման ռեժիմ), որը կարող է կարգավորել այն պայմանները, որոնք առաջանում են ընդհատման պատճառով:
Ի՞նչ է ընդհատումը:
Ընդհատում տերմինը սովորաբար վերապահված է ապարատային ընդհատումների համար:Դրանք ծրագրային կառավարման ընդհատումներ են, որոնք առաջացել են արտաքին ապարատային իրադարձությունների հետևանքով: Այստեղ արտաքին նշանակում է պրոցեսորի արտաքին: Սարքավորումների ընդհատումները սովորաբար գալիս են տարբեր աղբյուրներից, ինչպիսիք են ժամանակաչափի չիպը, ծայրամասային սարքերը (ստեղնաշարեր, մկնիկ և այլն), I/O պորտերը (սերիական, զուգահեռ և այլն), սկավառակի կրիչներ, CMOS ժամացույց, ընդլայնման քարտեր (ձայնային քարտ, վիդեո): քարտ և այլն): Դա նշանակում է, որ ապարատային ընդհատումներ գրեթե երբեք չեն լինում կատարող ծրագրի հետ կապված ինչ-որ իրադարձության պատճառով: Օրինակ, այնպիսի իրադարձություն, ինչպիսին է օգտատիրոջ կողմից ստեղնաշարի վրա ստեղնաշարի սեղմումը կամ ներքին ապարատային ժամաչափի ժամանակի դադարը, կարող է առաջացնել նման ընդհատում և կարող է տեղեկացնել պրոցեսորին, որ որոշակի սարքը որոշակի ուշադրության կարիք ունի: Նման իրավիճակում պրոցեսորը կդադարեցնի այն, ինչ երբևէ արել է (այսինքն՝ դադարեցնում է ընթացիկ ծրագիրը), տրամադրում է սարքի կողմից պահանջվող ծառայությունը և կվերադառնա սովորական ծրագրին: Երբ ապարատային ընդհատումներ են տեղի ունենում, և պրոցեսորը սկսում է ISR-ն, ապարատային այլ ընդհատումները անջատված են (օրինակ՝ 80×86 սարքերում): Եթե Ձեզ անհրաժեշտ է, որ այլ ապարատային ընդհատումներ տեղի ունենան, երբ ISR-ն աշխատում է, դուք պետք է դա անեք բացահայտորեն՝ մաքրելով ընդհատման դրոշակը (sti հրահանգով):80×86 սարքերում ընդհատման դրոշը մաքրելը կազդի միայն ապարատային ընդհատումների վրա։
Ի՞նչ է բացառությունները:
Բացառությունը ծրագրային ապահովման ընդհատում է, որը կարող է նույնականացվել որպես մշակողի հատուկ ռեժիմ: Բացառությունը կարող է ճանաչվել որպես ինքնաբերաբար առաջացող թակարդ (ծուղակը կարող է նույնականացվել որպես կառավարման փոխանցում, որը նախաձեռնում է ծրագրավորողը): Ընդհանրապես, բացառությունների հետ կապված հատուկ հրահանգներ չկան (թակարդները ստեղծվում են հատուկ հրահանգի միջոցով): Այսպիսով, բացառություն է առաջանում «բացառիկ» պայմանի պատճառով, որը տեղի է ունենում ծրագրի կատարման ժամանակ: Օրինակ, զրոյի բաժանումը, անօրինական օպերացիոն կոդի գործարկումը կամ հիշողության հետ կապված սխալը կարող է բացառություններ առաջացնել: Ամեն անգամ, երբ բացառություն է արվում, պրոցեսորը ժամանակավորապես դադարեցնում է իր կողմից իրականացվող ծրագիրը և սկսում է ISR-ը: ISR-ը կպարունակի, թե ինչ անել բացառությամբ: Այն կարող է շտկել խնդիրը կամ, եթե դա հնարավոր չէ, կարող է նրբորեն դադարեցնել ծրագիրը՝ տպելով համապատասխան սխալի հաղորդագրություն:Թեև կոնկրետ հրահանգը բացառություն չի առաջացնում, բացառություն միշտ առաջանալու է հրահանգով: Օրինակ, զրոյական սխալով բաժանումը կարող է տեղի ունենալ միայն բաժանման հրահանգի կատարման ժամանակ:
Ո՞րն է տարբերությունը ընդհատման և բացառության միջև:
Ընդհատումները ապարատային ընդհատումներ են, մինչդեռ բացառությունները ծրագրային ընդհատումներն են: Սարքավորումների ընդհատումների դեպքերը սովորաբար անջատում են ապարատային այլ ընդհատումները, բայց դա ճիշտ չէ բացառությունների դեպքում: Եթե Ձեզ անհրաժեշտ է արգելել ապարատային ընդհատումները, մինչև բացառություն չմատուցվի, դուք պետք է հստակորեն ջնջեք ընդհատման դրոշակը: Եվ սովորաբար համակարգչի վրա ընդհատման դրոշակը ազդում է (ապարատային) ընդհատումների վրա՝ ի տարբերություն բացառությունների: Սա նշանակում է, որ այս դրոշը մաքրելը չի կանխի բացառությունները: