Прекъсване на конфликт
Конфликтът е ситуация, при която няколко обекта едновременно се опитват да получат достъп до ресурс, който е предназначен само за един от тях. Конфликт на прекъсване възниква, когато множество устройства използват една и съща линия за прекъсване, за да изпратят сигнал за заявка, и няма механизъм за обработка на конкуриращи се заявки. Ако драйверът, когато получава контрол, работи с друго устройство, което е изпратило заявката, тогава или възниква повреда, или едно от устройствата просто не работи.
Възниква въпросът: могат ли няколко устройства да използват една и съща линия за прекъсване или по принцип е невъзможно? В края на краищата, ако драйверът може да определи от кого точно е дошла заявката, тогава той ще отговаря само на сигнали от "своето" устройство, игнорирайки всички останали. Но това трябва да се договори предварително по някакъв начин, иначе конфликтът е неизбежен.
Локалната PCI шина е проектирана с мисъл за споделяне на прекъсвания. Всяко PCI устройство трябва да работи правилно на същата линия за прекъсване като другите PCI устройства. Това се прави по следния начин: наличието на сигнал на линията за прекъсване се определя не от предната част, т.е. промяна на нивото на напрежението, а от самия факт на наличието на определено напрежение. Няколко устройства могат да променят напрежението в линията наведнъж, като се превърнат в опашка за обслужване.
По този начин споделянето на един и същ IRQ от множество PCI устройства по дефиниция не е конфликт (Фигура). Понякога обаче възникват проблеми. Първо, не всички PCI устройства работят правилно на същата линия за прекъсване като другите. На второ място, понякога драйверите имат грешки, които им пречат да идентифицират правилно източника на сигнала, пречейки на други драйвери. Трето, не всичкиустройствата работят на PCI шина; например устройствата ISA, които включват например COM / LPT порт контролери, не могат да споделят прекъсвания с други.
Ориз. Win2000 Device Manager IRQ Map - IO PIC Intel 440BX Chipset
Ориз. Win2000 IRQ MAP - IO APIC - Чрез чипсет KT266a
В резултат на това са възможни ситуации, когато компютърът често замръзва, отказва да изпълнява каквито и да било функции или дори просто изпада в така наречения „син екран на смъртта“.
Apic (усъвършенстван програмируем контролер за прекъсване)
Както е показано по-горе, линията за прекъсване е много оскъден ресурс за компютър. Въпреки това, с развитието на компютърната индустрия, броят на различни външни устройства в компютъра непрекъснато се увеличава. Например, една дънна платка може да има 5-6 PCI слота, AGP слот, интегриран IDE контролер, интегриран SCSI контролер, интегриран 1/2 портов мрежов адаптер и т.н. И всички тези устройства се нуждаят от прекъсвания. 16 IRQ линии постепенно станаха недостатъчни.
APICе контролер на прекъсвания, който позволява 24 хардуерни прекъсвания вместо 16. Ограничението от 16 хардуерни прекъсвания, непроменено от 1982 г., е предотвратило инсталирането на допълнителни устройства в персоналния компютър. В края на 2001 г. се появиха първите дънни платки с APIC.
Ориз. Система за прекъсване в многопроцесорна среда.
Предишното описание се отнася до PIC, предназначени за еднопроцесорни системи. Ако системата включва два или повече процесора, този подход вече не е осъществим и са необходими по-сложни PIC.
Всички модерни x86 процесори включват локален APIC (местен APIC). Всеки местен APIC има32-битови регистри, вътрешен часовник, локален таймер и две допълнителни IRQ линии: LINT0 и LINT1, запазени за локални APIC прекъсвания. Всички локални APIC са свързани към външен I/O APIC.
I/O APIC съдържа набор от 24 IRQ линии, 24-посочна таблица за пренасочване на прекъсвания, програмируеми регистри и блок за съобщения за изпращане и получаване на съобщения по APIC шината. За разлика от IRQ щифтовете на 8259A, приоритетът на прекъсването не е обвързан с номер на щифт.
IRQ сигналът се доставя от локалния APIC, посочен в съответния запис в таблицата за пренасочване на прекъсвания. Прекъсването се доставя на един конкретен CPU, множество CPU или всички CPU.
IRQ сигналът се доставя до локалния APIC на процесора, който изпълнява процеса с най-нисък приоритет.
Всеки локален APIC има програмируем регистър за приоритет на задание, който се използва за изчисляване на приоритета на текущия процес. Intel очаква този регистър да се актуализира от ядрото на операционната система при всяко превключване на процес.
В допълнение към разпределянето на прекъсвания между мулти-APIC процесори, системата позволява на процесора да генерира междупроцесорни прекъсвания. Когато CPU иска да изпрати прекъсване към друг CPU, той съхранява вектора на прекъсването и целевия локален APIC ID в неговия локален APIC регистър на командите за прекъсване (ICR). След това съобщението се изпраща по APIC шината до целевия локален APIC, който издава подходящото прекъсване към своя процесор.
В момента много еднопроцесорни системи включват I/O APIC чип, който може да бъде конфигуриран по два начина:
1. Като стандартен 8259A PIC, свързан към процесора. Локалният APIC е деактивиран и двата реда LINT0 и LINT1 са конфигурирани като INTR иКонстатации на NMI.
2. Като стандартен външен I/O APIC. Локалният APIC е активиран и всички външни прекъсвания се получават чрез I/O APIC.