Написание обработчика прерывания

Написание обработчика прерывания

04.05.2018 04:24:01 Просмотров 17 Источник

Возникла следующая идея: я имею несколько открытых дескрипторов и ассоциированных с ними объектов FILE соответственно. Ввод соответственно буферизированный. Является ли хорошей идеей и вообще, есть ли такая возможность написать свой обработчик прерывания и зарегать его в ядре, который будет делать следующее: делает у всех FILE процесса flush. Т.е. таким образом мы сделаем одно обращение к ядру и за это обращение вычитаем из всех буферов, которые есть - profit.

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311136_823257
Вы имеете в виду написать как-то иначе, по-своему эту функцию: c-cpp.ru/content/flushall ? Думаете, она будет более эффективной?
https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311230_823257
Нет нет. Я вот что узнал: когда я устанавливаю устройство какое то, то я устанавливаю драйвер. В процессе этой установки, регистрируется обработчик прерывания этого устройства в ядре. Т.е. например процесс хочет напечатать на принтере, вызывается обработчик прерывания этого принтера, который и занимается этим делом.
https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311233_823257
В идеале я хочу сделать так: написать обработчик прерывания, зарегать его в ядре, и пользоваться им из своих процессов. Т.е. буду генерить из процесса прерывание, на которое будет вызываться мой написанный обработчик и делать свои дела
https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311237_823257
Например генерить прерывание из кода так: callMyHandler(FILE** pf). Здесь я делаю системный вызов, который обработает мой обработчик. В процессе работы обработчик сделает flush из всех объектов FILE* . Выигрыш в том, что я солью инфу из всех буферов во все файлы за один системный вызов
https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311239_823257
Я не знаю что это за функция: flushall)) мне просто интересно было бы самому повозиться с реализацией такой темы, и поэтому хочу узнать, позволит ли мне ос сделать то что я хочу
https://ru.stackoverflow.com/questions/823257/%d0%9d%d0%b0%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%87%d0%b8%d0%ba%d0%b0-%d0%bf%d1%80%d0%b5%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f#comment1311265_823257
Ну, функция как раз выполняет сброс буферов всех открытых файлов. Но, конечно, никто не отменял принцип "зачем просто, если можно сложно" :)

Ответы - Написание обработчика прерывания / Написание обработчика прерывания

Является ответом!
Sergey

07.05.2018 05:23:37

я хочу сделать так: написать обработчик прерывания, зарегать его в ядре, и пользоваться им из своих процессов.

Тема очень большая и сложная. Для начала, рекомендую почитать:

  1. "Драйверы Устройств Linux", 3-я редакция, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman (Есть перевод)
  2. "Программирование модулей ядра Linux" Олег Цилюрик,

Именно в этих книгах рассказывается, как написать обработчик прерывания (драйвер), зарегистрировать его в ядре и пользоваться из пространства пользователя.

Закрыть X