LINUX.ORG.RU

Собственный менеджер памяти


0

6

Вечер добрый!

Предлагаю провести небольшой мозговой штурм, дело в том, что мне необходимо реализовать для своей «ос» менеджер памяти. В идеале необходим интерфейс аля alloc, free. В моей ос уже реализован механизм виртуальных адресов (по 4кб страница), но я что то не могу определиться с тем, как этот менеджер организовать. Точнее сказать, нужно понять каким способом мне описать свободную «кучу», как из нее доставать свободные страницы, и, самое главное, как привести к минимуму фрагментацию памяти (видимо при освобождении памяти надо еще дефрагментировать «висячие» участки). Может кто подскажет или ткнет носом куда нужно...

Заранее всем спасибо!

Для начала определись с назначением твоей «ос» и посмотри на список фич/код тех же talloc/hoard/прочих (что там было в хромиумах?)

x3al ★★★★★
()

Можно почитать про SLAB и SLUB линуксовые, они по-моему и в википедии неплохо описаны.

Кстати, SMP уже сделали? А собираетесь? (От этого зависит наличие целого класса внутриядерных проблем).

LeninGad
()

для начала азы освой:

2.3.5    Списки и "сборка мусора"                   
2.4      МНОГОСВЯЗНЫЕ СТРУКТУРЫ                     
2.5      ДИНАМИЧЕСКОЕ ВЫДЕЛЕНИЕ ПАМЯТИ              

это Кнут.

emulek
()
Ответ на: комментарий от LeninGad

можно подробнее. О каких конкретно проблемах идет речь. SMP не делал, планирую только начать изучать этот вопрос

energyclab
() автор топика
Ответ на: комментарий от anonymous

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

energyclab
() автор топика

Код проекта открыт?

tlx ★★★★★
()
Ответ на: комментарий от emulek

Кнут кусок говна - его говна нет ни в одной вменяемо рабочей стуктуре данных и аллокаторах. Это бездарный кусок говна.

Если ты хочешь по спорить - давай поспорим - выкатывай свой аллокатор, а я выкачу свой. Твой по главам кнута, мой по главам скилла. Когда ты будешь обоссан - ты больше никогда не будешь упоминать это убожество в разделе девелопмент, особенно рядом с ОС и её ведром.

Почитал я твоё 2.5 - это убожество, мало того, что это животное ничего не знает о вмеме - он ничего не знает о треадсейфе, нитях, да и вообще о свойвства текущего железа. Никогда в ведре НЕ БУДЕТ аллокатора на брёвнах и линкедлистах - это то же убожество, что описанно в ссылке выше.

И я очень рад, как я не раз тебе говорил, что есть на этом свете люди, а не жалкие животные типа тебя, благодаря которым мы имеем хоть что-то, что не тормазит как говно.

В этом мире есть только пуллы - запомни это, и прямая индексация. Это основа всех вменяемых аллокторов, системы страничтной адресации, на которой строится текушая модель вмема.

Аллокатор в глибц сделан на идеях кнута, только вот его даже жалкая жаба обоссывает. Но тут емулек-идиот советует пацану засунуть это говно в ведро - инфа сотка, что пацана ждёт явный успех.

Ах да ещё одно, там темку почистили - но погугли пожалуйста животное про то, почему на ссд есть 2-хки - это линейная скорость r/w и рандомные иопсы, подумай, почему рандомное io сливает лейному раз в 5 на топвых лоулатенси ссд, подумай причем тут префетч, а потом уже начни понимать - какое же гвоно ты несёшь.

anonymous
()
Ответ на: комментарий от energyclab

Кому ты говоришь спасибо? Мне вот инетересно, почему ты решил делать по мануалу на ОСдеве от бездарей, которые к ОСдеву отношения не имеют, но на реальные вещи, которые используются в реальных ОС - ты клал? Тебе уже упоминали про слаб? Почему ты не почитал, неподумал почему ни в одной вменяемой ОС нет аллокатора на линкедлистах?

Как напишешь - отпишись сдесь. Посмотрим на твой аллокатор, а потом посмотрим на то, как это делают норм пацаны. Возможно ты прозреешь.

anonymous
()
Ответ на: комментарий от energyclab

Лучше, наверное, кроме той статьи почитать ещё эту http://wiki.osdev.org/Page_Frame_Allocation (вот ещё есть, не знаю, насколько протухшее, про Linux https://www.kernel.org/doc/gorman/html/understand/understand009.html ), потому что чаще всего ядро всё-таки выделяет юзерспейсу только целые страницы, а куча со списками и прочим уже его проблема. А для внутриядерной динамической памяти лучше, наверное, SLAB/SLUB, про который выше писали.

anonymous
()

1) интерфейс ос - это только выделение страниц виртуальной памяти, типа там brk-sbrk

2) напиши GC

lovesan ★★★
()
Ответ на: комментарий от anonymous

Анон, ты пишешь хорошие, годные мысли, но их подача в духе «жрите быдло что я даю» неприемлема. Ты так самоутверждаешься, пар выпускаешь или ищешь дешёвой популярности? Мы будем тереть те посты что не отвечают формату сайта.

Кстати, какой у тебя был ник?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

У меня «норм» падача, просто меня бомбит от того, что люди нихрена не хотят слушать. Я отношусь к людям очень хорошо и стараюсь говорить так, чтобы до них дошло, даже если прийдётся орать «кнут - животное», чтоб хотябы на багете пронять.

В этой теме я сначала написал норм коммент - т.е. там небыло «Жритебыдло» и прочее, а потом меня бомбануло от емулека - я выкатил тот каммент, что выше и все мои комменты потёрли(т.е. там где я рассказывал про оверкоммит(ниодного плохого слова в том комменте небыло), коммент в этом треде, где тоже ниодного плохого слова небыло). От этого у меня ещё больше бомбануло ну и пошло-поехало.

Вот тот же емулек - ему похрен что он несёт, ибо он балаболит ради балабльства( а таких тут 90%). Как мне с ним нормально говорить? Как мне отвечать людям, которые тыкают кнутом? Естественно у меня уже алергия на кнута, причем его адепты ничего не воспринимают.

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

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

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

Ты так самоутверждаешься, пар выпускаешь или ищешь дешёвой популярности?

Как я могу таким образом сомоутвердиться? Пар мне тоже выпускать не надо - мне абсалютно пофиг на этот мир и на то, что с ним станется. Дешевая популярность просто нереальна с моим подходом - это скорее антипопулярность.

Если бы я хотел дешевой популярности - я бы наобород боготворил то, что принято в мейнстриме. Это как в секте, если я прийду в секту кнутиансво(80%+ программистов) и скажу: «кнут идиот» - какую популярность я получу? Никакую. Если же я буду молиться на идола-кнута, то да - я получу популярность, да и других идолов из бородатых годов.

Мы будем тереть те посты что не отвечают формату сайта.

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

Мне не нужна вежливость, мне не нужна сохранность моего попца от багета - это раздел, где я могу встретиться с пацанами и чему-то научиться, о чем-то поговорить. Притворная лесть, вежливость, «защита чувст верующих в кнута» и прочего тут не должно быть. С таким подходом лор превратится в хабр, либо любой другой жалкий девелопнет-ресурс, а я этого не хочу.

Если человек хоть что-то понимает - мне похрен как он говорил, правильно/нет и прочее. Так и должно быть в любом техразделе. Лучше пусть будет тотальный неадекват, чем тотальный анскилл. А формат и адекват - это уже вторичное и наживное.

Кстати, какой у тебя был ник?

superhackkiller1997, procoder99, osh5pntp8 в простонародье просто Царь(сишки).

anonymous
()
Ответ на: комментарий от anonymous

а потом меня бомбануло от емулека

Не обращай внимания, он местный клоун.

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

ибо с кнутом в лоулевел делать нечего

Кстати, пользуясь случаем, а что есть действительно годного?

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

[oftop] Ты сделал мой день мэн :)) Спасибо![/oftop]

Twissel ★★★★★
()
Ответ на: комментарий от anonymous

Вот тот же емулек - ему похрен что он несёт, ибо он балаболит ради балабльства( а таких тут 90%). Как мне с ним нормально говорить?

Меня он тоже достал. Но формально он правила не нарушает (в этом слабое место сайта, увы). Просто игнорируй его.

я выкатил тот каммент, что выше и все мои комменты потёрли

Я потёр. Я прилагаю все усилия чтобы не удалять полезную инфу. Но когда она перемешана с руганью и оскорблениями приходится принимать непростые решения. См. ниже почему мы удаляем.

Притворная лесть, вежливость, «защита чувств верующих в кнута» и прочего тут не должно быть

Твоё главное оружие — твои аргументы, а не твои познания в области русского матерного. Оскорбления вызывают только лишь ответную агрессию от которой тред скатывается в говно. Поэтому мы это удаляем.

true_admin ★★★★★
()
Ответ на: комментарий от mix_mix

Кстати, пользуясь случаем, а что есть действительно годного?

Каких-то общих годных толмудов, аля кнут на все случаи жизни я не нашел(ибо там надо не 10страниц про аллокаторы, а все 500).

А так всяких заметок/статеек/мануалов/кода полно. Метод научного тыка. Какбэ почему кнут и прочие идолы так популярны? Просто пацаны не знают(не хотят знать) матчасти, поэтому им хочется найти непогрешимый понятный(примтивный) идеал, который ответит на все вопросы и скажет как им жить/пилить. Т.е. серябрянную идеальную пулю.

И по сей день «кнутовские» аллокаторы сражаются с ГЦ в битве, которая никому не интересна и не нужна.

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

anonymous
()
Ответ на: комментарий от anonymous

Ну так отличная задача, что бы показать свои скиллы. ;) Если ты, конечно, можешь запилить что-то серьезней strcpy. И покажешь всяким емулекам сотоварищи, что ты царь. Давай менеджер памяти, если тепловодность не пошла.

anonymous
()
Ответ на: комментарий от anonymous

запилить что-то серьезней strcpy

Любые memcpy на самом деле тоже не самые тривиальные функции. Это только в относительно новых процах быстрее всего будет на «rep movsb», до этого многие с SSEx+prefetch извращались

mix_mix ★★★★★
()
Ответ на: комментарий от true_admin

Я потёр. Я прилагаю все усилия чтобы не удалять полезную инфу. Но когда она перемешана с руганью и оскорблениями приходится принимать непростые решения. См. ниже почему мы удаляем.

А какая была ругань и оскарбления в моём первом комменте в этой теме, и Как получить размер максимального объема памяти, которую может занять процесс? тут. Максимум, что ты было это: «Это не то, что вы под этим понимаете - это то, что есть на самом деле».

Твоё главное оружие — твои аргументы, а не твои познания в области русского матерного.

Я уважаю и хорошо отношусь к своим собеседникам, поэтому я никогда не скажу «животное» перед этим не поняв, что человек просто клал на мои аргументы, слился и просто пытается тему свести в срач.

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

Мне какой-то модератор говорил, что такой «отборной цензурной ругани» он никогда не видел. Я за всю свою жизнь ниаразу матерного слова не сказал/написал - это один из моих челенджей, поэтому все мои посты крайне цензурны.

Оскорбления вызывают только лишь ответную агрессию от которой тред скатывается в говно.

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

бла-бла<>бла-бла->животное<>сам животное->ко-ко-ко<>ко-ко-ко - вы думайте, что любой разговор с «оскарблениями» имеет именно этоу цепочку, со мной же это не так. Когда я спорю - я не пытаюсь доказать, что аппонент идиот - я пытюсь добиться победы для правильной ТЗ - во имя всеобщего понимания. Поэтому называя аппонента идотом я не выигрываю для себя спор.

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

Я буду говорить меньше плохих слов и не буду давать повода людям оскарбляться.

anonymous
()
Ответ на: комментарий от anonymous

Запили уже аллокатор памяти, наконец! Только не надо нам слив типа слаба. Все такими умными стали только после того как Сан в 2000-м опубликовал solaris internals. Запили что-то своё и слей уже наконец этот труп. Ты же царь, не?

anonymous
()
Ответ на: комментарий от anonymous

Запили уже аллокатор памяти, наконец!

Аллокатор нужен для нищих, норма пацанам он не нужен. Я вообще не представляю юзкейса в котором нужен аллокатор в твоём понимании.

Только не надо нам слив типа слаба.

Это не слив - это банальная идея. Я такое пилил ещё до того, как начал копаться в ведре и читать про всякие слабы.

Все такими умными стали только после того как Сан в 2000-м опубликовал solaris internals.

Я даже не знаю что это - расскажи мне.

Запили что-то своё и слей уже наконец этот труп.

В моём мире не существует аллокаторов - это вся нужно для нищих бомжей. Я не создают общих объектов. Если у меня есть куча - эта куча своя для каждой программы и для каждой нити, а так же для каждой «структуры данных» в твоём понимании.

Слить саму реализацию слаба можно, как и половину его идей, но основую идею - пулл слить нельзя - это абсолют в текущем положении дел.

Ты же царь, не?

Хорошо, я запилю тебе аллокатор - свой, существование которого я считаю опраданным.

anonymous
()
Ответ на: комментарий от anonymous

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

Но, строго говоря, generic purpose аллокатор тебе уже потребуется как раз для этих пулов.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Только не надо рассказывать что мне понадобиться, единственное, что мне нужно от ОС - поставить rw на нужный мне диапазон - это спокойно делает mmap(). Никакие аллокаторы и прочая фигня мне не нужна.

anonymous
()
Ответ на: комментарий от anonymous

Ну так напиши менеджер памяти для ОС, только классный, что бы пасаны оценили. Это же интересно и там не понадобится плавающая точка.

anonymous
()
Ответ на: комментарий от anonymous

Господа, что тут происходит, пришлось даже отвлечься от кода и по-изучать споры... Вот не понятно мне, народ, ну ведь не секрет что на лоре в любой теме найдется один выпендрежник, ну без этого просто априоре не бывает... Так чтоже, теперь на каждого реагировать... На всех нервов не хватит. Я, если вижу, что комментарии мало информационные, даже не всегда на них реагирую, потому что нету смысла... Что касается алокаторов, я прочитал про слаб еще до принятия решения про linked list, да вещь хорошая... Но у меня для начального этапа достаточно любого простого и быстро реализуемого решения, так как менеджер памяти всегда можно переписать, а у меня горит драйвер ahci, где обмен через DMA происходит, а на скорую руку придумать ничего не смог, вот и попросил помощи у обитателей лора... За пару часов отладил аллокатор, и дальше спокойно драйвером занимался...

з.ы. в жабисты не уйду, не переживайте, не «пацан» я, и знаю где мне интересно а где нет

sudo cast energyclab

energyclab
() автор топика
Ответ на: комментарий от anonymous

А, ну то есть ты предлагаешь во-первых, все пулы делать одного заранее установленного размера (не применительно к типу), во-вторых, стыковать их друг к другу, образуя один большой мета-пул. Это прокатит.

mix_mix ★★★★★
()
Ответ на: комментарий от energyclab

За пару часов отладил аллокатор, и дальше спокойно драйвером занимался...

Выкати сюда, я какраз анону обещал слить слаб. Заодно поглядим каков твой.

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

anonymous
()
Ответ на: комментарий от anonymous

Вот про нормальный я и говорю. Запили. А то ты про свои скили распинаешься,а кроме strcpy мы от тебя ничего не видели. А тут и польза какая для всех и тебе шанс показать как надо. ;)

anonymous
()
Ответ на: комментарий от mix_mix

Я даже не заметил.

Любые memcpy на самом деле тоже не самые тривиальные функции.

Любая функция запиленная идеально является сложной.

Это только в относительно новых процах быстрее всего будет на «rep movsb»

Не будет, сливает минимум 10% норм функции.

до этого многие с SSEx+prefetch извращались

Сейчас так же, а то по ссылке - кусок говна.

anonymous
()
Ответ на: комментарий от anonymous

Не будет, сливает минимум 10% норм функции.

При условии выровненных данных сливает только на блоках до 128 байт.

Сейчас так же

Ну фишка как раз в том, что для Ivy Bridge в этом нет необходимости. Ищи по ERMSB. http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimizati...

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Сваял я тебе побыстрому бенч - затесть.

При условии выровненных данных сливает только на блоках до 128 байт.

Проблемы ущербанов меня не волнуют, до 128байт инфа сотка - хасвелл + http://pastebin.com/QuV8Y3XR -> http://pastebin.com/dcT02iXN

Причем заметь - гцц абсалютно не умеет гинерировать норм код из интринсиков - он делает из ник кусок говна - т.е. апнуть ещё 3-5% можно.

Это л1д:

BLOCK SIZE: 1KB
SPHK:
259.118124GB/s
259.576305GB/s
memcpy:
122.142704GB/s
120.247517GB/s

268,220901489GB/s - это теоретический максимум для моего хасвела 4.5ггц.

На л2 так же обоссыват, а с л3 проблема - он тотальное говно, но мне щас разбераться почему.

Ну фишка как раз в том, что для Ivy Bridge в этом нет необходимости.

У тебя есть IB - запусти мой тестец с 1кб. На моём хасвелле профит есть, на коре2тоже.

Вы хоть пишите за что меня баните, вам не надоело?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.