OSDev

для всех
Текущее время: 27 апр 2024, 15:43

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




Начать новую тему Ответить на тему  [ Сообщений: 190 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 19  След.
Автор Сообщение
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 22 авг 2013, 22:39 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
maisvendoo писал(а):
Я у себя запилил простенький менеджер кучи, пока только для ядра. Можно хоть один байт выделить, при этом информация о выделенном блоке памяти занимает 8 байт

Я тоже буду делать менеджер. У меня каждая страница будет отдельным буфером кучи, чтобы карту занятости минимизировать, локализовать до пределов 2МБ. Ну ещё не знаю как получится.
phantom-84 писал(а):
Himik, я надеюсь, ты не хочешь сказать, что у тебя на каждый объект по 2 мега выделяется :) Для объектов ядра лучше всего использовать слабы. Даже в 4 кб может уместиться множество небольших объектов, например, в 4 кб помещается 128 структур размером 32 байта.

Конечно по 2МБ. Но многие ядерные объекты у меня идут сплошным массивом, без использования менеджера памяти. Конечно при наличии нормального менеджера, кое-что можно будет реорганизовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 22 авг 2013, 23:25 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Himik писал(а):
Конечно по 2МБ

В адресном пространстве архитектуры x86_64 в 16 экзобайт это сущие пустяки ;)
В плане кучи на первое время можно сделать что-то простецкое, а потом используя имеющийся интерфейс, модифицировать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 08:08 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Himik писал(а):
Конечно по 2МБ. Но многие ядерные объекты у меня идут сплошным массивом, без использования менеджера памяти. Конечно при наличии нормального менеджера, кое-что можно будет реорганизовать.
Большие страницы значительно реже будут переходить в состояние полного освобождения, чем небольшие. Т.е. при использовании больших страниц будет очень много распределенной, но неиспользуемой памяти. Или ты вообще никогда не освобождаешь память, используемую для объектов ядра?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 10:47 
Аватара пользователя

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

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 11:26 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Yoda писал(а):
Слаб-аллокаторы с большими страницами неэффективны, всё равно будет перерасход памяти.
Так я об этом же. Слабы с большими страницами будут очень неэффективны. Слишком низкая вероятность задействовать однажды выделенные страницы под другие нужды. Хотя в принципе большие физические страницы можно разбивать на небольшие логические и тэгировать каждую логическую страницу. Это позволит в отдельно взятой физической странице одновременно хранить объекты разных типов. Останется только проблема освобождения слабовых страниц под нужды, не связанные со слабами.


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

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 12:03 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Если один раз некий буфер задействован, значит он полезен для системы и желательно иметь его в постоянной готовности, особенно на случай конца свободной памяти.

Я понимаю, что издержки памяти будут, но это ведь компромисс быстродействие/расход памяти. К некоторой потере памяти я был морально готов изначально. Надеюсь, что потери будут не слишком большими. Эксперимент покажет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 12:25 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 18:44 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
У меня ситуация не простая, и слабы скорей всего не понадобятся (не помогут). Вся объектная система у меня работает в пользовательском уровне, где есть стандартные Сишные средства распределения памяти. Просто во многих случаях я не использовал Сишных функций malloc или new, а делал запросы напрямую к ядру. Надо для начала редизайнить код. А в остальном запросы памяти к ядру обезличены, это простые блоки под mmap и расширение границ brk.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 18:52 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
new это "приплюснутая" фишка уже, чисто сишная это маллок.
У меня аналогично - куча ядра это костыль, рабочая надстройка над страничной моделью. Вот сейчас задумался над планированием памяти из пользовательского режима и запуске процессов и много дум по этому поводу...
Сейчас у меня есть пара kmalloc/kmalloc_a (последняя для создания структур системы страничной памяти с выравниванием по 0x1000 блокам), и kfree, причем куски памяти освобожденные kfree беруться в оборот при новом выделении, как и положено.
Просто в процессе разработки упершись в многозадачность и юзер мод, захотел реализовать их сначала, и системные вызовы. А теперь сталкиваюсь с упущениями в дизайне системы, когда цель достигнута


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 23 авг 2013, 21:53 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Ммм, запамятовал что в ядре нет libc, а вместо malloc используется своя заглушка переправляющая запросы ядру. Так что менеджеру быть.


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

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


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

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


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

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