Несколько таблиц векторов прерываний для нескольких процессов - PullRequest
1 голос
/ 06 ноября 2019

Мои мысли:

Предположим, что в Linux x86 (многозадачном режиме) параллельно работают два приложения, и оба они используют общую периферию клавиатуры. если я нажимаю кнопку на клавиатуре, происходит прерывание, и управление должно переключаться на соответствующую процедуру прерывания. Начальный адрес подпрограммы прерывания для источника прерывания получается из таблицы векторов прерываний, которая уже определена в 0x0000. Но двум приложениям могут потребоваться разные процедуры для одного и того же клавиатурного прерывания. Таким образом, выполняемая процедура должна зависеть от того, из какой задачи она была фактически прервана.

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

1 Ответ

1 голос
/ 07 ноября 2019

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

В случае клавиатуры таблица (я) векторов ядра будет обрабатывать прерывание и обрабатывать нажатие клавиши. Затем ядро ​​отправит символ из нажатия клавиши в пользовательское приложение через системный вызов. В Linux системный вызов, скорее всего, будет абстрагирован как файл, читаемый пользовательскими процессами.

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

...