Инициализация адресного пространстава для процесса

Тема в разделе "WASM.OS.DEVEL", создана пользователем KLERIK, 3 ноя 2007.

  1. KLERIK

    KLERIK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    20
    В общем как создать PDE + PTE для нового процесса???
    PDE то проблемы нету, выделилил page и все, но ведь PTE надо монтировать для последующего монтирования страниц в них же из создаваемого процесса!!!
    А вновь созданная PDE пуста, и получается что я не могу примонтировать PTE в создаваемом процессе без PTE, тоесть тут замкнутый круг получается!!!

    З.Ы.: Дайте, пожалуйста, ссылку на русский мануал Intel'а!
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    KLERIK
    ОС пишешь что-ли?
     
  3. KLERIK

    KLERIK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    20
    Ну да
    Каким образом это все вообще реализуется в существующих осях???
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    KLERIK
    например так
    вся доступная физическая память разбивается на страницы для удобства работы
    для каждой страницы создается структура, которая ее описывает
    все структуры объединяются в массив структур, который расположен по известному (ты сам задаешь) физическому адресу
    перед переходом в страничный режим создается каталог страниц и нужное количество таблиц страниц для описания системного адресного пространства
    1. кода ядра
    2. данных ядра
    3. самого себя (т. е для того, чтобы через каталог страниц и таблицы страниц получить доступ к ним же (например для возможности изменения))
    4. массива страниц
    задается функция, которая позволяет получить виртуальный адрес из любого физического в системном адресном пространстве
    (для Linux, например, это f(x) = x + __PAGE_OFFSET, __PAGE_OFFSET = 0xC0000000)
    в каждой структуре, которая описывает страницу, предусмотрено поле, которое содержит виртуальный адрес адрес этой страницы (когда страница используется)
    все структуры, описывающие свободные страницы, объеденены в связный список
    адрес списка (адрес первой структуры) хранится в области данных ядра
    итак, для того, чтобы выполнить нужные тебе действия, нужно:
    1. с помощью списка выделить нужное количество страниц
    2. с помощью 3 (см. выше) отобразить их на виртуальное адресное пространство ядра, получив их виртуальные адреса для доступа к ним
    3. настроть каталог страниц и таблицы страниц (используя полученные виртуальные адреса)
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Мой ответ можешь увидеть на codenet'е.