2013-12-19 3 views
3

Я пытаюсь захватить прерывание таймера. Коллега сказал мне, что прерывание 0x08 в IDT (таблица дескрипторов прерываний) является таймером. Проклятие я проверил и увидел два возможных ответа: this, в котором говорится, что 8 - это real clock timer и this, говоря, что это прерывание Double Fault - я решил поверить ему и не тратить время на проверку. После окончательного контроля над IDT и замены прерывания 8 ничего не происходит.Что вызывает прерывание 0x08?

  • Так что же происходит?
  • Это прерывание изменило свою цель с течением времени от таймера до двойной ошибки?
  • Имеет ли это прерывание разные цели на ARM/Intel/etc.?

Мой код - это модуль ядра, который захватывает прерывание 8 и просто выполняет команду printk каждый раз, когда приходит прерывание. Я провел его около 25 минут - Нет вывода в dmesg.

В случае, если это имеет значение: я запускаю Linux Mint с ядром 3.8 на виртуальной машине. Хост имеет Intel i5.

+0

Не будет ли ядро ​​использовать его для планирования процесса? – falstro

+0

Вероятно, я ожидал, что ядро ​​потерпит крах, а потом вызовет исходную функцию из моей функции (проксирование исходного обработчика). Но сейчас кажется, что ничего не происходит. –

+1

@roe: В большинстве современных ядер используется этот таймер [APIC] (http://wiki.osdev.org/APIC_timer). Гораздо более гибкий и точный, и это за процессор, а не глобальный. – duskwuff

ответ

1

Вы можете найти какое прерывание для таймера с помощью этой команды: кошки/процедурный/прерывание

Ниже на примере вывода на 6 основных машине:

cat /proc/interrupts | egrep "timer|rtc" 
    0: 320745126   0   0   0   0   0 IO-APIC-edge  timer 
    8:   1   0   0   0   0   0 IO-APIC-edge  rtc0 
LOC: 115447297 304097630 194770704 212244137 63864376 69243268 Local timer interrupts 

Обратите внимание, таймер и часы реального времени являются другой. До сих пор существует только одно прерывание rtc. (Много прерываний таймера). Ниже приведена информация о времени безотказной работы.

uptime 
14:14:20 up 13 days, 3:58, 9 users, load average: 0.47, 1.68, 1.38 

Я думаю, вы должны проверить это, прежде чем взломать IDT. Кроме того, возможно, вы хотите взломать прерывание 0, а не 8.

Смежные вопросы