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/ |