3

Я пытаюсь лучше понять, как работают прерывания (как аппаратные, так и программные) и какие у них есть привилегии.

Если мы используем NIC в качестве примера. Когда ОС создает IDT, указывает ли запись для дескриптора NIC на встроенный драйвер, который ее обрабатывает. Если бы пользователь затем должен был установить сторонний драйвер для сетевой карты, будет ли изменена IDT, чтобы она указала на новый драйвер?

Будет ли прерывание от контроллера USB указывать на драйвер USB?

Каков будет уровень привилегий этой записи IDT и какой цели она будет служить? Я где-то читал, что аппаратные прерывания игнорируют уровень привилегий и позволяют работать независимо, но я не уверен, правда ли это.

С программными прерываниями, что бы они делали. Если он хочет получить доступ к функциям ядра, все ли они доступны через одно и то же прерывание с привилегиями уровня 3?

Какие существуют программные прерывания и что с ними делают программы пользовательского режима, или программы пользовательского режима просто используют программные прерывания для доступа к ядру.

Я пытаюсь собрать все это из онлайн-источников, но мне просто интересно, кто-нибудь может объяснить, как работает весь процесс.

Любая помощь приветствуется.

Благодарю.

1 ответ1

2

Вы не указали архитектуру процессора, о которой вы спрашиваете. Я предполагаю, что вы говорите о процессорах x86 на ПК. Основная информация, которую необходимо знать, заключается в том, что основные современные операционные системы используют только 2 уровня привилегий (из 4, предоставляемых архитектурой процессора x86): ядро (уровень 0) и пользователь (уровень 3). Из этого следует, что в каждом драйвере каждая подпрограмма обработки прерываний должна запускаться с привилегией ядра (уровень 0).

Программные прерывания - это способ вызова функции с более высоким уровнем привилегий из менее привилегированного кода. Это происходит в современных операционных системах тогда и только тогда, когда пользовательский код (уровень 3) хочет вызвать функцию ядра (уровень 0).

Если бы пользователь затем должен был установить сторонний драйвер для сетевой карты, будет ли изменена IDT, чтобы она указала на новый драйвер?

IDT обычно указывает на общую функцию ядра, которая ищет адрес фактической подпрограммы обработки прерывания в некоторой структуре памяти. Обычно эта структура устанавливается при загрузке драйвера в ядро. Установка обычно включает в себя копирование файлов в файловой системе, тогда как эти структуры существуют в памяти.

Изучение источников Linux может дать вам хорошее представление о том, как эти вещи реализуются в настоящее время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .