OSDev

для всех
Текущее время: 20 апр 2024, 04:20

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Менеджер памяти
СообщениеДобавлено: 14 июл 2014, 19:13 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
Вобщем не знаю как писать менеджер памяти. общие представления имею, а вот в плане реализации - нуб. первый вопрос - инициализация менеджера и детект памяти. как хранить участки свободной памяти? ну видел я что люди для этого юзают списки. окау, примерно так
Код:
начало
размер
следующий участок

либо же хранить физическую память страницами, так будет проще выделять память.
Код:
база
занята_или_нет
следующая страница

что посоветуете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 14 июл 2014, 19:45 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Можно совместить, т.е. сначала хранить описатели больших свободных участков, а потом по мере распределения памяти из них их дробить вплоть до отдельных страниц. Лично я использую для памяти выше первого мега стек страниц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 14 июл 2014, 19:57 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
а как по памяти это? не сильно много занимает? к примеру чтобы описать 4 гб памяти 4-х килобайтными страницами это надо 4 метра. не сильно ли это много? плюс еще добавить байт занята страница или нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 14 июл 2014, 20:14 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
В стеке находятся только адреса свободных страниц. Когда стек опустошается, для распределения можно использовать память самого стека. Естественно, изначально объем памяти самого стека соответствует тому максимуму свободных страниц, который не должен быть превышен на протяжении всего времени работы системы, т.е. под стек не нужно выделять 4 мега, если во время работы системы не будет появляться свободных страниц общим объемом 4 гига. Даже участок в ВАП можно резервировать в точности под максимальный размер стека страниц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 14 июл 2014, 22:33 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
4 МБ от 4ГБ это менее 1%. Но если в эмуляторе 32 МБ то много. Поэтому под размер под структуры рассчитывается из сходя из имеющейся памяти.

Что касается байта. То это можно до битов ужать и совместить с адресом.
Списком конечно компактнее пока фрагментация не появится. И код сложнее будет чем с массивом. По скорости не знаю пока не тестировал. Лично я пока остановился на втором варианте. Потом когда будет время может вернусь и сделаю 1 вариант.

PS. А у кого нибудь есть красивый код менеджера памяти или он у всех ужастный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 15 июл 2014, 10:37 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Pavia,
Красивый код - не значит эффективный алгоритм.
Самый простой алгоритм менеджера, к тому же вообще не расходующий память под хранение каких-либо структур, - стек свободных страниц. Он же, пожалуй, самый красивый. В каком-то смысле даже самый эффективный, т.к. аллокирование/освобождение страницы делается за постоянное время - буквально за несколько инструкций. Но не универсальный, т.к. выделение подряд идущих физических страниц в такой схеме - сильная головная боль, и для такого функционала он не самый эффективный.

Rammstein,
Я рекомендую вам подходить к менеджеру памяти, как к отдельному, легко заменяемому модулю (вообще модульный подход - это то, на что должен молиться Software Architect). У него должны быть вызовы типа выделить страницу, освободить страницу, узнать кол-во занятой и свободной памяти и пр. Далее в рамках интерфейса можете реализовать простой менеджер. Когда вам потребуется дополнительный функционал или улучшение характеристик работы, поменяете/модифицируете алгоритм без ущерба работоспособности системы.
Да, ещё, до поры до времени вам не потребуются слитные интервалы физической памяти, так что пока что можете делать стек.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 15 июл 2014, 15:14 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
а можно что-нибудь прочитать про этот стек? уйдем опять в кройности: для того, чтобы адресовать 4 гига виртуальной памяти мне нужно 4 метра под таблицы страниц, дак еще и почти 4 метра под стек?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 15 июл 2014, 15:52 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 15 июл 2014, 16:16 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
а сколько ACPI таблиц может выдавать SMAP? т.е. участков памяти с кодом 3


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер памяти
СообщениеДобавлено: 15 июл 2014, 18:07 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
а сколько ACPI таблиц может выдавать SMAP? т.е. участков памяти с кодом 3

Насколько знаю не ограниченно. Я для хранения SMAP использую динамическую память и принципе можно сколько угодно записей разместить пока она не закончиться, а это порядка 600 кБ. Но я на всякий случай ограничил 1000 структурами SMAP.


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

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


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

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


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

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