OSDev
http://osdev.su/

Вопрос по управлению виртуальной памятью
http://osdev.su/viewtopic.php?f=6&t=775
Страница 1 из 3

Автор:  vlad9486 [ 09 авг 2013, 19:05 ]
Заголовок сообщения:  Вопрос по управлению виртуальной памятью

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

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

Автор:  phantom-84 [ 09 авг 2013, 20:04 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

vlad9486 писал(а):
Или может лучше держать всю таблицу страниц отображенной тождественно в каждом виртуальном адресном пространстве?
Этот вариант.

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

Автор:  vlad9486 [ 09 авг 2013, 20:12 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

Если процессов будет много и адресные пространства у них большие, то пространство ядра разрастется. Таблицы страниц следует хранить в определенном месте? Проблема в том, что если отображение тождественное, то это самое место будет разное в разных процессов.

Автор:  phantom-84 [ 09 авг 2013, 20:19 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

Я думал, ты говоришь про тождественность отображения таблицы между разными ВАП. Таблица будет отображаться по одному и тому же адресу во всех ВАП, а содержимое ее локальной части будет специфично для конкретного ВАП.

Автор:  vlad9486 [ 09 авг 2013, 20:29 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

Но в каталоге записаны физические адреса подтаблиц. Неужели виртуальные? Как же обходить таблицу, если известные физические адреса подтаблиц и неизвестны виртуальные?

Автор:  phantom-84 [ 09 авг 2013, 20:41 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

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

Автор:  vlad9486 [ 09 авг 2013, 20:44 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

Это для каждого процесса 4Мб на таблицы выделять? А я для x86_64 пишу, там будут гигабайты таблиц...

Автор:  phantom-84 [ 09 авг 2013, 20:51 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

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

Автор:  vlad9486 [ 09 авг 2013, 21:03 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

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

Автор:  Himik [ 12 авг 2013, 22:34 ]
Заголовок сообщения:  Re: Вопрос по управлению виртуальной памятью

phantom-84 писал(а):
Ничего обходить не надо. Отображаешь всю таблицу страниц (4 мб) в ВАП.

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

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/