В системах, использующих защиту ввода/вывода, доступ к командам ввода/вывода управляется полем IOPL регистра EFLAGS. Это позволяет операционной системе регулировать уровень привилегированности, необходимый для выполнения ввода/вывода. В случае типичной модели колец защиты доступ к командам ввода/вывода обеспечивается уровнями привилегированности 0 и 1. Это позводяет операционной системе и драйверам устройств выполнять ввод/вывод, но не дает прикладным программам и менее привилегированным драйверам устройств возможности доступа к адресному пространству ввода/вывода. Прикладные программы могут обращаться к вводу/выводу только через операционную систему.
Следующие команды могут выполняться только при условии CPL <= IOPL:
IN - Ввод INS - Ввод строки OUT - Вывод OUTS - Вывод строки CLI - Очистить флаг разрешения прерываний STI - Установить флаг разрешения прерываний
Эти команды называются "чувствительными" командами, поскольку они чувствительны к состоянию поля IOPL. В виртуальном режиме 8086 IOPL не используется; доступ к портам ввода/вывода ограничивается только битовым массивом разрешения ввода/вывода (см. Главу 23).
Для использования чувствительных команд процедура должна выполняться на уровне привилегированности, как минимум равном уровню привилегированности, задаваемому полем IOPL. Попытка использования чувствительной команды менее привилегированной процедурой приводит к исключению общей защиты. Поскольку каждая задача имеет свою собственную копию регистра EFLAGS, каждая задача может иметь и собственное поле IOPL.
Задача может изменить IOPL только при помощи команды POPF; однако, такие изменения являются привилегированными. Никакая процедура не может изменить своего IOPL, если она не работает на уровне привилегированности 0. Попытка изменения IOPL менее привилегированной процедурой не приводит к генерации ислючения; IOPL просто остается без изменений.
Команда POPF может также использоваться для изменения состояния флага IF (также как и команды CLI и STI); однако, изменение флага IF командой POPF также чувствительно к IOPL. Процедура может изменить установку флага IF при помощи команды POPF только если она сама выполняется с CPL, как минимум равным уровню привилегированности IOPL. Попытка менее привилегированной процедуры изменить флаг IF не приводит к исключению; флаг IF просто остается без изменений.