leonidpr писал(а):
Цитата:
любая ОС, построенная вокруг виртуальной машины
Что это такое, поясните пожалуйста. никак не въеду...?
То есть код не исполняется "напрямую", программа представляется в виде байткода, который либо интерпретируется, либо компилируется в нативную форму с учётом всех необходимых проверок и ограничений.
leonidpr писал(а):
А насчет межсегментных переходов в IA-32, посмотрите интеловскую доку. там написано что дескрипторы в IDT бывают трех типов, в двух из них в числе прочих полей есть селектор сегмента, в котором лежит обработчик. соответственно, при возникновении прерывания межсегментный переход бывает всегда.
Вы явно невнимательно читали документацию. Вот выдержка от Интела про инструкцию IRET:
Цитата:
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).
И что же мы видим ? А видим мы в том числе "Intra-privilege level return". Надеюсь нет нужды пояснять, что это такое ?
Ну и такая же ситуация с инструкциями CALL и JMP:
Цитата:
When executing a near jump, the processor jumps to the address (within the current code
segment) that is specified with the target operand
Подчеркну здесь фразу "within the current code segment". То есть как минимум про архитектуру IA32 в случаях вызовов процедур и работы с прерываниями мы можем говорить без трепета и придыхания, не заморачиваясь на сегменты, дескрипторы и прочий бред.