Всем привет! Почитал выложенную книжку Григорьева, наткнулся на, с моей точки зрения, ошибку. Глава 6, раздел 6.4, в pdf - страница 127. Там утверждается, что при обработке исключений и внешних прерываний учитывается текущий CPL и DPL дескриптора ловушки/прерывания. И что, соответственно, если CPL > DPL, вместо нужного обработчика вызовется обработчик #GP. Причём и он тоже может не вызваться, по той же причине Насколько я знаю, в современных процессорах это не так, и CPL с DPL учитываются только при явном вызове обработчика инструкцией int x или into. Вопрос: - я прав? - если я прав, то что это - ошибка Григорьева, или в 486 действительно всё так и было, а потом Intel спохватилась и исправилась?
Ты прав, при обработке прерываний или исключений проверка уровней привелегий осуществляется только для программных прерываний. IA-32 Intel Architecture, Том 3, Параграф 5.12.1.1 Вряд ли это когда-то было. Внешние прерывания происходят в случайные моменты времени и никак не связаны с CPL. К тому же, скорее всего, за PM стоит крепкая математическая модель - в ней такой косяк наверняка был бы отловлен. Кто что думает по этому поводу?
>> IA-32 Intel Architecture, Том 3, Параграф 5.12.1.1 Да, я тоже читал. Кроме того, банальный Windows на int x, кроме int 3 и into, реагирует исключением #GP, а на исключения - честным исключением. На этом и было основано моё предположение. >> Внешние прерывания происходят в случайные моменты времени и никак не связаны с CPL. Согласен. Но что будет, если поместить обработчик в согласованном сегменте кода? И не спрашивайте у разработчиков, что они курят До чтения Григорьева мне такая мысль в голову не приходила. Он этого делать не советует, но такой случай рассматривает. >> К тому же, скорее всего, за PM стоит крепкая математическая модель - в ней такой косяк наверняка был бы отловлен. Вот это было бы очень интересно - посмотреть какую-нибудь математическую модель. А то до сих пор как-то не видел полезного приложения математики к моделированию. Только на уровне СМО.