OSDev

для всех
Текущее время: 14 дек 2019, 15:38

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




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Аллокирование страниц
СообщениеДобавлено: 20 июн 2013, 18:40 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 963
Откуда: Дагоба
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 гиг.

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

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аллокирование страниц
СообщениеДобавлено: 04 июл 2013, 13:47 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Решил слегка продолжить тему парой ссылок. Хотел сделать перевод, (а он неожиданно появился на хабре), статьи описывающей структуру виртуальной памяти процесса:
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/. Может пригодится кому.


Последний раз редактировалось achesnokov 04 июл 2013, 14:35, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аллокирование страниц
СообщениеДобавлено: 04 июл 2013, 14:26 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
Послед. ссылку подправь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аллокирование страниц
СообщениеДобавлено: 04 июл 2013, 14:35 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Спасибо, подправил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аллокирование страниц
СообщениеДобавлено: 05 июл 2013, 00:54 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1096
Откуда: Балаково
Yoda писал(а):
Вопрос: есть ли эффективная защита в случае стэк-аллокатора?

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


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

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


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

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


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

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