Следующая цитата из книги «Понимание третьего ядра Linux»:
Когда процесс пользовательского режима пытается получить доступ к порту ввода / вывода с помощью команды ввода или вывода,ЦП может потребоваться доступ к битовой карте разрешений ввода-вывода, хранящейся в TSS, чтобы проверить, разрешено ли процессу обращаться к порту.
Точнее, когда процесс выполняет команду ввода-вывода в / вПользовательский режим, блок управления выполняет следующие операции:
Проверяет 2-битное поле IOPL в регистре eflags.Если установлено значение 3, блок управления выполняет инструкции ввода / вывода.В противном случае он выполняет следующую проверку.
Он обращается к регистру tr для определения текущего TSS и, следовательно, правильного битового массива разрешения ввода / вывода.
Он проверяет бит битовой карты разрешения ввода / вывода, соответствующий порту ввода / вывода, указанному в инструкции ввода / вывода.Если он очищен, инструкция выполняется;в противном случае блок управления выдает исключение «Общая защита».
Следующая цитата также из той же книги:
Хотя Linux нене используйте аппаратные переключатели контекста, тем не менее, он вынужден устанавливать TSS для каждого отдельного процессора в системе.
Теперь, если в Linux есть только одна структура TSS для всех процессов (вместо того, чтобы каждый процесс имелсвоей собственной структурой TSS), и мы знаем, что каждый процесс должен иметь свою собственную битовую карту разрешений ввода-вывода, означает ли это, что когда Linux планирует выполнение другого процесса, Linux меняет значение битовой карты разрешения ввода-вывода только вСтруктура TSS, которую ЦП использует для значения битовой карты разрешений ввода / вывода процесса, который должен быть выполнен (который Linux предположительно хранит где-то в памяти ядра)?