Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Какой уровень iopl() постваить?  (Прочитано 1898 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Белый пони

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
    • Просмотр профиля
Какой уровень iopl() постваить?
« : 23 Июня 2010, 12:57:56 »
1) Подскажите,  какая разница между уровнями iopl 0, 1, 2 и 3?

В мане сказано, что для нормального процесса - уровень 0, я не совсем понимаю, что такое "нормальный" процесс. Используются ли в нём ввод/вывод outb и inb?

И написанно, что уровень 3 позволяет процессу отключать прерывания, что может "обрушить" систему.

Про уровни 1 и 2 ничего не написано:(

2) Мне надо общаться с PCI-платой по средствам outb() и inb() и при этом не сломать её или систему :)
Какой уровень лучше поставить?

Заранее спасибо :)

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Какой уровень iopl() постваить?
« Ответ #1 : 24 Июня 2010, 08:46:54 »
Цитировать
IOPL — показывает уровень приоритета ввода-вывода исполняемой программы или задачи: чтобы программа или задача могла выполнять инструкции ввода-вывода или менять флаг IF, её текущий уровень приоритета (CPL) должен быть ≤ IOPL.

Инструкция CLI относится к классу инструкций ввода-вывода. В защищённом режиме, если её вызывает код, CPL которого численно больше IOPL, то процессор генерирует исключение #GP(0). Например, если IOPL = 2, то выполнять эту команду может код в 0, 1 и 2 кольцах защиты. Современные операционные системы устанавливают IOPL = 0, чтобы только ядро могло исполнять эту инструкцию.

Оффлайн Белый пони

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
    • Просмотр профиля
Re: Какой уровень iopl() постваить?
« Ответ #2 : 24 Июня 2010, 21:05:42 »
IOPL — показывает уровень приоритета ввода-вывода исполняемой программы или задачи: чтобы программа или задача могла выполнять инструкции ввода-вывода или менять флаг IF, её текущий уровень приоритета (CPL) должен быть ≤ IOPL.

Инструкция CLI относится к классу инструкций ввода-вывода. В защищённом режиме, если её вызывает код, CPL которого численно больше IOPL, то процессор генерирует исключение #GP(0). Например, если IOPL = 2, то выполнять эту команду может код в 0, 1 и 2 кольцах защиты. Современные операционные системы устанавливают IOPL = 0, чтобы только ядро могло исполнять эту инструкцию.
Понятно, спасибо.
В итоге программа заработала только при iopl равным 3. Во всех остальных случаях был Segmentation Fault.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Какой уровень iopl() постваить?
« Ответ #3 : 25 Июня 2010, 08:50:26 »
Понятно, спасибо.
В итоге программа заработала только при iopl равным 3. Во всех остальных случаях был Segmentation Fault.
да не за что, Вы бы еще на википедии почитали полностью статьи из которых я собственно и цитировал, если уж вы занимаетесь такими вещами, то они будут вам очень полезны

 

Страница сгенерирована за 0.015 секунд. Запросов: 21.