Cтраничная адресация и прерывания.

Тема в разделе "WASM.NT.KERNEL", создана пользователем rudik, 15 июн 2007.

  1. rudik

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

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Если я правильно понял мануалы интела и данные, которые выдавал сайс, то получается что в каждей программе должны быть созданы каталоги и таблицы страниц супервизора, содержащие GDT, IDT и оброботчики прерываний для того, чтобы первое прерывание, возникшее в системе не вызывало #DP(в винде ети каталоги описуют адресса начиная с 80000000). Что я не правильно понял? Помогите пожалуйста.
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    GDT - Global Descriptor Table - глобальна. Другое дело LDT.
    IDT тоже глобальна для системы.
    Ну а каталоги старниц, описывающие АП свои у каждой задачи.
     
  3. rudik

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

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Да, ето понятно, но в мануале 3а интела на странице 51 есть чтото вроде схемки взаимодействий всех елементов: ИДТ+ГДТ+страничка+всевозможные вызовы+переключение задач. НО если взглянуть повнимательнее: там обыкновеной линией отмечены места, где используется линейный адресс, а штрихованой - физический, так вот по ходу получается что ГДТР содержит в себе линейный адресс, и он уже транслируется через страничное преобразование адресов. Также и с ИДТР. А если возникает прерывание, то для того, чтобы найти обработчик нужно взять линейный адресс начала ИДТР, преобразовать страничкой, найти таблицу и нужный дескриптор, и аж потом запустить прерывание, которое тоже будет преобразовыватся через страничку. Проблема вся в том, что у каждой задачи свой СР3, тобыш ФИЗИЧЕСКИЙ адрес каталогов страниц, и если возникнет прерывание, то оно будет преобразовыватся через новые каталоги страниц, где не гдт не идт не описан. олучим тройную ошибку и проверим на практике "нас ребут а мы крепчаем".(например задача переключалась и загрузила свой СР3). Отсюда следствие: каталоги страниц, описующие гдт, идт и обработчики должны быть в КАЖДОЙ программе.
    Что я не правильно понял? Помогите пожалуйста.
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    может #GP?/#PF
    /#DF?
    что есть #DP?
    по сути да
    верхняя часть каталога страниц задачи (элементы 512-1023) заполняется содержимым каталога страниц родительской задачи, тем самым для нее создается адресное пространство ядра, когерентное с аналогичными других задач
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    адресное пространство ядра общее для каждой задачи
    в CR3 храниться адрес каталога страниц (физический), он разный для каждой задачи, но содержимое страницы (байты 2048-4096), которая описывает этот каталог страниц, совпадает с содержимым других страниц, которые описывают каталоги страниц других задач
     
  6. rudik

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

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Сорри, я сделал досадную машинальную ошибку. Имел ввиду двойную ошибку, которая приведёт к ребуту.
     
  7. rudik

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

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Спасиба большое. Именно ето я и хотел узнать.