OSDev
http://osdev.ru/

Аллокирование страниц
http://osdev.ru/viewtopic.php?f=5&t=754
Страница 5 из 5

Автор:  Yoda [ 20 июн 2013, 18:40 ]
Заголовок сообщения:  Re: Аллокирование страниц

pavia писал(а):
Что вы понимаете под аллокацией?

Очень просто. При работе с виртуальной памятью у нас есть две, а то даже и три независимые задачи.
1. Вся память представлена N страницами, часть которых занята, а часть свободна. В задачу аллокирования входит найти по требованию свободную страницу или группу подряд идущих страниц. В данном контексте не важно, для чего и как будет использоваться страница, куда будет отображена и какие впоследствии будут назначены права доступа. Задача только одна - найти свободную страницу, причём сделать это как можно быстрей. Соответственно есть и встречная задача - освободить более неиспользуемую страницу и поместить её в список свободных.
2. Уже имея на руках свободную страницу, необходимо теперь корректно отобразить её в виртуальное пространство пользовательской задачи.
3. Необходимо организовать всё адресное пространство задачи, так чтобы различные секции (код, данные, стек...) не конфликтовали.
Вот, собс-но, 2-3 задачи ты и обсуждаешь.

pavia писал(а):
А вот тема называется "Аллокирование страниц", а каких страниц не уточняется.
Есть физические страницы, есть виртуальные и они связаны не думаю что надо разделять обсуждения.

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

pavia писал(а):
PS. Да Dos отношу к серверной ОС. Просто лучше термина пока не придумал.

DOS нельзя отнести к серверной ОС, т.к. только многозадачная ОС может быть серверной. Даже в серверах приложений.

achesnokov писал(а):
Насколько важно выделение непрерывных участков оперативной памяти?

Это требуется для ряда старых устройств, т.к. устройства могут обращаться (передавать данные) только к физической памяти. Умные устройства имеют внутри чипсета регистры, куда записывается список выделенных страниц, для них некритична непрерывность. Глупые устройства могут иметь только базовый адрес и размер буфера - для них критично. Если не предусмотрено выделение блока смежных страниц, то в такой ОС эти устройства поддержать невозможно.

achesnokov писал(а):
В каких количествах непрерывные участки памяти необходимы для реализации доступа через DMA или иным образом?

Зависит от конкретного устройства и режима работы.

achesnokov писал(а):
В какой части оперативной памяти практически лучше иметь доступные для выделения непрерывные фрагменты оперативной памяти?

Непрерывность страниц и адресация - ортогональные понятия. В зависимости от древности железки есть четыре диапазона доступных физических адресов для операций ввода/вывода - до 1Мб, до 16Мб, до 4Гб и без ограничения.

achesnokov писал(а):
Ответы на эти вопросы влияют на выбор механизма выделения оперативной памяти. Стоит ли затрачивать существенные усилия на реализацию алгоритма объединяющего освобожденные физические страницы в непрерывные фрагменты, к примеру?

Действительно, от ответа существенно меняется стратегия выделения памяти. Так, стек аллокатор фактически ставит крест на выделении смежных страниц, хотя во всех остальных отношениях он исключительно хорош. То же самое касается приоритетов в выделении соответствующих областей. Например, моя стратегия такова - пользовательской задаче память выделяется сначала из области >4Гб. Если таковой не осталось, выделяется из диапазона 16Мб...4Гб. Потом из 1Мб...16Мб. Из первого мегабайта приложениям память не выделяется вообще. Драйвер может специально оговорить область памяти для выделения, включая первый мегабайт. При этом, если таковой нет, будет раскидана память приложений, чтобы освободить заказанный диапазон.

phantom-84 писал(а):
При работе с устройствами лучше совсем не использовать память выше 4 гиг.

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

Автор:  achesnokov [ 04 июл 2013, 13:47 ]
Заголовок сообщения:  Re: Аллокирование страниц

Решил слегка продолжить тему парой ссылок. Хотел сделать перевод, (а он неожиданно появился на хабре), статьи описывающей структуру виртуальной памяти процесса:
http://habrahabr.ru/company/smart_soft/blog/185226/. Оригинал статьи: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory. Думаю статья станет замечательной иллюстрацией к предыдущему обсуждению.

И еще на прошлой неделе набросал небольшую функцию инициализации распределения физической памяти. http://dev64.wordpress.com/2013/06/27/physical-pages-management/. Может пригодится кому.

Автор:  phantom-84 [ 04 июл 2013, 14:26 ]
Заголовок сообщения:  Re: Аллокирование страниц

Послед. ссылку подправь.

Автор:  achesnokov [ 04 июл 2013, 14:35 ]
Заголовок сообщения:  Re: Аллокирование страниц

Спасибо, подправил.

Автор:  Himik [ 05 июл 2013, 00:54 ]
Заголовок сообщения:  Re: Аллокирование страниц

Yoda писал(а):
Вопрос: есть ли эффективная защита в случае стэк-аллокатора?

Я использую стэк-аллокатор совместно с битовой картой занятости, которая используется чисто для проверки. Полёт нормальный.

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