OSDev

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

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




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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Под таблицей страниц я понимаю область, в которой отображаются (по мере надобности) все таблицы страниц в терминологии Интел (я их называю транс-страницами). Думаю, автор топика тоже не всегда использовал термин "таблица страниц" для обозначения транс-страницы (иначе что могли бы означать слова "лучше держать всю таблицу страниц отображенной", ведь отдельно взятая транс-страница не может отображаться частично). Каталогом я называю то же самое, что и Интел. Хотя у меня каталог одновременно является и транс-страницей, отвечающей за отображение всей 4-мегабайтной таблицы страниц, т.к. я использую рекурсивное отображение каталога (один из входов каталога указывает на сам каталог).


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

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Да, все правильно, "лучше держать всю таблицу страниц отображенной" следует читать "лучше держать все таблицы страниц и директории отображенными". В x86_64 (или IA32e) каталог страниц имеет больше уровней, это вызывает проблемы. Вот у меня адресное пространство:
Код:
#define V_AS_KERNEL       0x0000000000000000
#define V_AS_USER_IMAGE   0x0000000000200000
#define V_AS_USER_STACK  -0x0000038040201000
#define V_AS_ROOT_TABLE  -0x0000038040201000
#define V_AS_D1_TABLE    -0x0000038040200000
#define V_AS_D0_TABLE    -0x0000038040000000
#define V_AS_PE_TABLE    -0x0000038000000000
#define V_AS_END         -0x0000030000000000

Еще вопрос: вот есть у меня такое адресное пространство, как сделать еще одно? Сделать нужную иерархию в резерве страниц, а потом только cr3 менять? Большой резерв нужен... Или есть получше способ?

Извините за отступы, в этом редакторе их не выставить :(


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
vlad9486 писал(а):
Еще вопрос: вот есть у меня такое адресное пространство, как сделать еще одно? Сделать нужную иерархию в резерве страниц, а потом только cr3 менять? Большой резерв нужен...

В общем-то да, куда деваться. Большой резерв не нужен, сначала создаём только минимальный набор таблиц, потом переключаемся на новое ВАП и догружаем остальное.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
vlad9486 писал(а):
В x86_64 (или IA32e) каталог страниц имеет больше уровней, это вызывает проблемы.
Какие проблемы?


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

Зарегистрирован: 16 июл 2013, 00:56
Сообщения: 26
Цитата:
потом переключаемся на новое ВАП и догружаем остальное.

Страницы, использованные для создания нового ВАП тоже нужно мапить на это ВАП, а для этого нужны... страницы.

Цитата:
Какие проблемы?

Проблемы скорее только в голове, нужны 4 страницы, чтобы мапить физ. страницу на V_AS_ROOT_TABLE, потом еще 2 для V_AS_D1_TABLE, потом еще для V_AS_D0_TABLE, и наконец для V_AS_PE_TABLE и это чтобы получить 2Мб адресов в новом ВАП. Я правильно понимаю?


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
vlad9486 писал(а):
Страницы, использованные для создания нового ВАП тоже нужно мапить на это ВАП, а для этого нужны... страницы.

Сначала используются только страницы ядра, а это одни и те же страницы для всех задач. Важно лишь, чтобы был отдельный каталог страниц, всё остальное можно навесить потом.


Последний раз редактировалось Himik 13 авг 2013, 21:59, всего редактировалось 1 раз.

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

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

Страницы, использованные для создания нового ВАП тоже нужно мапить на это ВАП, а для этого нужны... страницы.
Не понял. Himik все верно сказал. Дополнительный расход (как по памяти, так и по пространству) минимальный.

Цитата:
Проблемы скорее только в голове, нужны 4 страницы, чтобы мапить физ. страницу на V_AS_ROOT_TABLE, потом еще 2 для V_AS_D1_TABLE, потом еще для V_AS_D0_TABLE, и наконец для V_AS_PE_TABLE и это чтобы получить 2Мб адресов в новом ВАП. Я правильно понимаю?
Наверняка тоже можно какие-нибудь рекурсивные связи наладить (это удобно и экономит память). Я в этом направлении еще не работал, у меня даже PAE нет. Но можно поразмыслить.


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

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


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Нет, после создания нового ВАП нужно сразу переключиться на него перегрузив cr3, и далее работать как с обычной памятью.
Перед этим создаём 4 страницы под каталоги в текущем ВАП и связываем их между собой физическими адресами.


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

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

В этом посте я недавно вкратце описывал порядок создания нового ВАП. Вообще же я использую глобальные стеки ядра, поэтому мне достаточно в родительском процессе подготовить лишь страницу-каталог для нового процесса (проинициализировать все его глобальные входы).


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

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

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


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

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


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

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