OSDev

для всех
Текущее время: 28 апр 2024, 00:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 09 авг 2013, 19:05 

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Нужно узнать физический адрес по виртуальному. Отображать всего несколько страниц таблицы страниц в адреса ядра каждый раз? То есть, отобразить cr3, прочитать там нужный адрес, отобразить его и т.д. для всех уровней. Можно все провернуть, используя всего одну страницу в адресах ядра. Этот путь не считается медленным? Или может лучше держать всю таблицу страниц отображенной тождественно в каждом виртуальном адресном пространстве?

PS: не нашел подходящей темы, здесь можно обсуждать управление виртуальной памятью, там сложных вопросов хватает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:04 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
vlad9486 писал(а):
Или может лучше держать всю таблицу страниц отображенной тождественно в каждом виртуальном адресном пространстве?
Этот вариант.

Делаешь shr 12 для вирт. адреса - получаешь индекс табличного входа, где хранится физ. адрес (и атрибуты).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:12 

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Если процессов будет много и адресные пространства у них большие, то пространство ядра разрастется. Таблицы страниц следует хранить в определенном месте? Проблема в том, что если отображение тождественное, то это самое место будет разное в разных процессов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:19 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Я думал, ты говоришь про тождественность отображения таблицы между разными ВАП. Таблица будет отображаться по одному и тому же адресу во всех ВАП, а содержимое ее локальной части будет специфично для конкретного ВАП.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:29 

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Но в каталоге записаны физические адреса подтаблиц. Неужели виртуальные? Как же обходить таблицу, если известные физические адреса подтаблиц и неизвестны виртуальные?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:41 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ничего обходить не надо. Отображаешь всю таблицу страниц (4 мб) в ВАП. Виртуальные адреса "подтаблиц" (я их называю транс-страницами) отсчитываешь от начала таблицы (+0 - адрес первой транс-страницы, +4096 - адрес второй транс-страницы и т.п.). Я тебе показал способ сразу получать физический адрес конечной страницы. А все физические адреса транс-страниц находятся в каталоге.


Последний раз редактировалось phantom-84 09 авг 2013, 20:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:44 

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Это для каждого процесса 4Мб на таблицы выделять? А я для x86_64 пишу, там будут гигабайты таблиц...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 20:51 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ты не обязан что-то отображать в ВАП, пока это не понадобится. Просто резервируешь участок ВАП для отображения таблицы. 4 мб - это для 32 бит без PAE. Для 64 бит таблица будет больше (ее размер будет зависеть от размера ВАП, который ты будешь использовать в своей системе).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 авг 2013, 21:03 

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Я понял, спасибо! Буду так делать. Стек у меня по 0x800000000000, 128Тб адресного пространства, страшно и подумать, зато на долго хватит :)
сдвину немного вниз стек, чтобы таблицы поместились.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 авг 2013, 22:34 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
phantom-84 писал(а):
Ничего обходить не надо. Отображаешь всю таблицу страниц (4 мб) в ВАП.

Таблица страниц это вообще-то 4КБ, а 4МБ это данные, которые здесь не требуются. Так же 4МБ занимают все таблицы ВАП вместе взятые. Ты наверно использовал не верные термины, поэтому я не понял мысль.
Я например использую директорию таблиц. Указываю директорию в качестве одной из таблиц в системной области, и получаю содержимое всех таблиц ВАП разом. Прямо как в ФС, где директория - это тоже файл, просто содержит описание других файлов :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB