Я уже неоднократно видел в форуме упоминание об программном переключении задач. Почитав интеловские мануалы, я пришел к следующим выводам: непосредственно (без использования TSS) перейти мы можем в сегмент либо с таким же, либо с более высоким (через шлюз вызова) уровнем привилегий, т.к. - при использовании шлюза вызова RPL,CPL сегмента должны быть <= DPL шлюза и >=DPL сегмента, куда мы хотим перейти. - при "прямом" вызове: CPL должен быть = DPL вызываемого сегмента, если конечно, сегмент не подчиненный (при переходе в подчиненный сегмент CPL не изменяется). А у нас задача в том, чтобы передать управление из ядра пользовательскому приложению, которое работает в 3-м кольце. Какие будут предложения насчет программного переключения без использования TSS ? )) Может быть, имелось ввиду, что программное переключение возможно только при передаче управления равноправной задаче (нити), либо вызове более привилегированных API-функций, к примеру ?
IRET использует шлюз прерывания или ловушки (если мы хотим обойтись без TSS). Поле DPL дескриптора шлюза указывает максимальный уровень привилегий, которым должна обладать пограмма, чтобы обратиться к шлюзу. А уже сам дескриптор кода, куда будет передано управление может быть более привилегированным, т.е. то же самое получается, как при использовании шлюза вызова. Есть еще какие-нибудь предложения ?
Формальное описание семантики команды IRET в виде псевдокода занимает 5 (пять) страниц во втором томе Большого Мануала. Слабо выписать его "из головы"? Если нет, то лучше всё-таки почитать. А вот, что говорит краткое текстовое описание: <font color="blue]In Protected Mode, the action of the IRET instruction depends on the settings of the NT (nested task) and VM flags in the EFLAGS register and the VM flag in the EFLAGS image stored on the current stack. Depending on the setting of these flags, the processor performs the following types of interrupt returns: -- Return from virtual-8086 mode. -- Return to virtual-8086 mode. -- Intra-privilege level return. -- Inter-privilege level return. -- Return from nested task (task switch).</font><!--color--> Очевидно, интерес представляет выделенный (мной) пункт.
captain cobalt, спасибо за ссылку на мануал. Внимательно посмотрел алгоритмы работы команд, и сделал следующие выводы: - команда iret передает управление в сегмент, где RPL>=CPL (как раз intrer и intra возврат). - кроме того, таким же образом работает и команда ret. Так что для передачу управления задаче с более низким уровнем привилегий без использования переключения задач, можно осуществить указанными выше командами. Теорема доказана ) Осталось только определить, является ли программное переключение задач более эффективным по сравнению с аппаратным, на современных микропроцессорах. Никто случайно не интересовался подобными вопросами ? Наверное Intel не просто так сделала аппаратную поддержку переключения задач ?
Предлагаю обсудить в этой теме преимущества программного и аппартного переключения задач. Эффективность, все плюсы и минусы. Обращаюсь ко всем, кто располагает хоть какой-нибудь информацией по данному вопросу. P.S. BrokenSword, ты вроде бы исследовал эту проблему на разных моделях процессоров и получал разные результаты. Можешь поделиться своим опытом, please ? )
да, Hunter, когда то тестил. Производительность замерял грубо - через rdtsc, но во много проходов, потом искал среднее. знаешь, результаты получались какие-то неоднозначные. Когда то постил в эху rtfm-helpers их, щас не помню даже. Перевес был то на стороне аппаратного, то на стороне программного метода и очень незначительным - в пару-тройку процентов, что можно списать на погрешности эксперимента
Не знаю, может чем поможет следующее: Книга "Архитектура микропроцессора i80286" А. Яблонского. Глава 6. Задачи и переходы между ними. "... 80286 обеспечивает весьма производительные операции переключения при полнейшей изоляции задач друг от друга. Полная операция переключения задач занимает только лишь 22 микросекунды на 8 мегагерцах (18 микросекунд на 10 МГц). Появляется возможность использования высокопроизводительных, многозадачных событийно-управляемых систем, требующих поддержкт механизмов защиты. Выигрыш в производительности и преимущества в разработке систем определяются следующими свойствами процессора: - Быстрое переключение задач: перключение задач оформлено в виде одной инструкции, выполняющейся как микрокод. Такая схема по крайней мере в 3 раза быстрее, нежели явное задание инструкции перехода. Быстрое переключение задач приводит к значительному увеличению производительности мощных систем... " См. также таблицу выполнения команд типа "межсегментный call" (к примеру, есть в Зубкове).