В путь.. (По мотивам "Процессор Intel в защищенном режиме")

Тема в разделе "WASM.OS.DEVEL", создана пользователем spa, 18 июн 2007.

  1. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    в контексте текущего процесса я полагаю
     
  2. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    system тут не причем. Большинство прерываний в винде сделано через шлюзы прерываний, т.е переключение задачи не происходит. Весь механизм довольно прост: Возникает прерывание -> сохраняется адресс возврата и регистр флагов -> смотрит в регистр IDTR, оттуда берёт линейный адресс таблицы дескрипторов прерываний -> смотрит в CR3, узнает адресс каталога страниц -> страничное преобразование -> по номеру прерывания находитнужный дескриптор с таблицы -> узнает линейный адрес обработчика -> смотрит в CR3, узнает адресс каталога страниц -> ОБРАБОТЧИК -> возврат в прерванную программу. (большинство из действий процессор не выполняет, я росписал для того, чтобы было понятнее.)

    например сейчас у меня IDTR: base=8003F400 limit=7FF
    CR3=00039000 (вот где в озу етот каталог)
    #GP=0008:804E042E (а вот и линейный адресс, где находится сам обработчик)
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    а их вызов может быть еще через что-то реализован? :derisive:
     
  4. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Например обработчик отсутструющей страницы сделан через переключение задач :)
    (селектор ТСС в гдт = А0)
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    точно?
    а смысл?
    в контексте текущего процесса PF легче обработать
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Ну так есть у когонибуть уверенность в том что для процессов не system не содержит адреса выше 2Гб. Т.е. мне кажеться что нетсмысла "ждать" (переключаться на system) когда прерывание можно обработать в контексте текущего процесса, при этом на безопасноть это не как не отразиться, ведь не из под 3его колца доступ всёравно закрыт.
     
  7. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    У тубя есть причины мне не доверять? :)
    Я думаю это из-за того, что, возможно, необходимы например драйвера винта, флехи, файловой системы и т.д. Глубоко не ковырял, время нету :)
     
  8. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Я же все понятно написал(по крайней мере я так думаю:))+вставил реальные значения регистров, за счет которых все ето счастье работает и могу с увереностью сказать, что никакая программа не может достучатся до адресса высше 2 гб. Если захочет - в винде увидим чтото вроде 0х12345678 ломится по адресу 0х81234567, память не может быть рид, бб. Или просто "Отправлять - Не отправлять?"
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    пока не знаю :)
    и что?
    смысл переключения?
     
  10. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    смысл в том, что драйвер может быть от чужого производителя. Драйвер - обыкновенная программа, и запускатся она должна как обыкновенная программа. Отличие драйвера винта от обыкновенного блокнота в том(основное, а то начнете сча начнёте росказывать:)), что драйвер работает в 0 уровне привелегий, а блокнот в 3. Винда же не грузит блокнот допустим со смещением 60000, хотя вполне бы могла:) ето ведь нарушет всю адресацию в программе: куда прыжок делать, что вызывать, откуда читать, куда записывать... "а не знаю... <:-|" получится. По етому и переключение задач делается, чтобы не нарушать адресацию. (я не уверен)
    А вот остальные сделаны как обыкновенные прерывания. Есчё прерывание под номером 3(то шо не маскируется) и двойная ошибка сделаны как задачи и юзаются для того, чтобы успеть показать БСОД до ребута. :)
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    rudik
    И правильно что не уверен. Забудь про эту фразу.
    Переключение задач это многозадачность. Почему переключаются контектсты - это следствие реализации полноценной многозадачности.
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Вопрос давно не в том, а вопрос в том т.к. у каждого процесса в Win свой какталог и таблица страниц следовательно хотябы у одного процесса в контексте которого выполняються драйвера таблица должна быть заполненна свыше 2 Гб. А вопрос в том у каких процессов таблица свыше 2 Гб. заполнена, только у system?

    PS доступ из юзермода к данным свыше 2 Гб, а где я про это спрашивал.
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    rudik
    что-то ты не то говоришь, уж извини
    у всех
    верхние части (512 или 256 элементов) каталогов страниц каждой задачи когерентны (одинаковы) между собой и доступны только когда CPL = 0, т. е в режиме ядра
    чтобы было понятно, возьмем к примеру IDTR
    регистр IDTR один (на однопроцессорной (ядерной) машине), он содержит линейный адрес таблицы IDT
    но исключение/прерывание может возникнуть в контексте любой выполняемой в данный момент задачи
    т. к используется один и тот же адрес для доступа к IDT, он должен транслироваться в один и тот же физический адрес (для каждой задачи)
    если этот пример продолжить на любую структуру ядра, мы и придем к идентичности верхней части каталога страниц каждой задачи
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    rei3er
    Спасиб, я в общем так и думал. Ведь правда зачем переключать задачи, ядро ни куда не убежит :)
     
  15. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    --оффтоп--
    Скажу честно - я не понял зачем ты это написал. Я напрягаю по ходу ответами?
    --/оффтоп--
    Верхние 512 елементов(2 в 10 степени/2) одинаковы.
     
  16. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну тогда проехали
    деление виртуального пространства может быть как в отношении 2:2 (512 элементов), так и 3:1 (256 элементов)
     
  17. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    А откуда ты взял единицу деление виртуальной памяти в 1 гигабайт. Ведь не кто нам не мешает например под ядро взять полтора гигибайта, а под задачи 2.5. Ведь там же таблица каталогов перегружается. Следовательно единица пропорции - 1 каталог(4 мб), или ты говориш про существующие системы (WindowsNT-ХР например) как и я?
     
  18. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    да