Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Внутренние механизмы ядра Вперед

Отображение прерываний в /proc

Но, прежде чем дальше углубляться в организацию обработки прерывания, коротко остановимся на том, как мы можем наблюдать и контролировать то, что происходит с прерываниями. Всякий раз, когда аппаратное прерывание обрабатывается процессором, внутренний счётчик прерываний увеличивается, предоставляя возможность контроля за подсистемой прерываний; счётчики отображаются в /proc/interrupts (последняя колонка это и есть имя обработчика, зарегистрированное параметром name в вызове request_irq()). Ниже показана «раскладка» прерываний в архитектуре x86, здесь источник прерываний — стандартный программируемый контроллер прерываний PC 8259 (XT-PIC):

$ cat /proc/interrupts

	           CPU0
	  0:   33675789          XT-PIC timer
	  1:      41076          XT-PIC i8042
	  2:          0          XT-PIC cascade
	  5:         18          XT-PIC uhci_hcd:usb1, CS46XX
	  6:          3          XT-PIC floppy
	  7:          0          XT-PIC parport0
	  8:          1          XT-PIC rtc
	  9:          0          XT-PIC acpi
	 11:    2153158          XT-PIC ide2, eth0, mga@pci:0000:01:00.0
	 12:     347114          XT-PIC i8042
	 14:         38          XT-PIC ide0
	...

Примечание: Если точнее, то показано схема с двумя каскодно объединёнными (по линии IRQ2) контроллерами 8259, которая была классикой более 20 лет (чип контроллера прерываний 8259 создавался ещё под 8-бит процессор 8080). Эта «классика» начала постепенно вытесняться только в последние 5-10 лет, в связи с широким наступлением SMP архитектур, и применением для них нового контроллера: APIC. Одним из первых ставших стандартным образцом стал чип 82489DX, но на сегодня функции APIC просто вшиты в чипсет системной платы. Архитектура APIC позволяет обслуживать число линий IRQ больше 16-ти, что было пределом на протяжении многих лет.

Те линии IRQ, для которых не установлены текущие обработчики прерываний, не отображаются в /proc/interrupts. Вот то же самое, но на существенно более новом компьютере с 2-мя процессорами (ядрами), когда источником прерываний является усовершенствованный контроллер прерываний IO-APIC (отслеживаются прерывания по фронту и по уровню: IO-APIC-edge или IO-APIC-level):

$ cat /proc/interrupts

	            CPU0       CPU1
	   0:   47965733          0  IO-APIC-edge      timer
	   1:         10          0  IO-APIC-edge      i8042
	   4:          2          0  IO-APIC-edge
	   7:          0          0  IO-APIC-edge      parport0
	   8:          1          0  IO-APIC-edge      rtc0
	   9:      24361          0  IO-APIC-fasteoi   acpi
	  12:        157        743  IO-APIC-edge      i8042
	  14:     700527          0  IO-APIC-edge      ata_piix
	  15:     525957          0  IO-APIC-edge      ata_piix
	  16:    1146924          0  IO-APIC-fasteoi   i915, eth0
	  18:         78     441659  IO-APIC-fasteoi   uhci_hcd:usb4, yenta
	  19:          3        777  IO-APIC-fasteoi   uhci_hcd:usb5, firewire_ohci, tifm_7xx1
	  20:    2087614          0  IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
	  21:        190      11976  IO-APIC-fasteoi   uhci_hcd:usb3, HDA Intel
	  22:          0          0  IO-APIC-fasteoi   mmc0
	  27:          0          0  PCI-MSI-edge      iwl3945
	 NMI:          0          0  Non-maskable interrupts
	...

Ещё одним источником (динамической) информации о произошедших (обработанных) прерываниях является файл /proc/stat:

$ cat /proc/stat

	cpu  2949061 32182 592004 6337626 301037 8087 4521 0 0
	cpu0 1403528 14804 320895 3068116 167380 6043 4235 0 0
	cpu1 1545532 17377 271108 3269510 133657 2043 285 0 0
	intr 139510185 47968356 10 0 0 2 0 0 0 1 24361 0 0 900 0 700531 525967 1147282 0 441737 780 2087674 12166 0 0 0 0 0 0 ...

Здесь строка, начинающаяся с intr содержит суммарные по всем процессорам значения обработанных прерываний для всех последовательно линий IRQ.

Теперь, умея хотя бы наблюдать происходящие в системе прерывания, мы готовы перейти к управлению ними.


Предыдущий раздел: Оглавление Следующий раздел:
Регистрация обработчика прерывания   Обработчик прерываний, верхняя половина