LINUX.ORG.RU

концепция памяти в linux. дефрагментация памяти.


0

0

здравствуйте все! объясните чайнику как-нить попроще и по-русски об управлении памятью в linux. из англ. книг (при моем его знании) все видится оч.туманно. особенно оттого, что упор там делается на х86, а мне нужно по sparc. вижу, что есть разница. я не понимаю что означает "верхняя память", почему ядро не может замапить напрямую больше 800Мб нижней памяти, итд. есть ли толковые книги по-русски ?

и вот вопрос: у нас память в общем случае может быть физически оч.сильно дефрагментирована, причем достаточно маленькими блоками (по 1 Мб). может ли выдержать такое linux без страшных перемен в ядре? сможет ли он загрузится?

anonymous

>я не понимаю что означает "верхняя память"

существует при области(на деле больше, но они есть далеко не на все архитектурах): dma (с нем может обшаться "кривое" оборудование), normal (ну тут все в общем понятно), и high (ее ядро не может размапить напрямую)

для x86 область high временно отображается на 1Gb-128Mb..1G и от туда с ней уже можно работать. этот костыль придуман из-за ограницения ахритектуры. на sparc'а ситуация обстоит подобным же образом.

>есть ли толковые книги по-русски ?

нет.

>и вот вопрос: у нас память в общем случае может быть физически оч.сильно дефрагментирована, причем достаточно маленькими блоками (по 1 Мб).

ну разве это маленькие блин? не смешите мои копыта. современные алгоритмы мэммори аллокатора в ядре очень хороши и добится большой фрагментации (>3-5%) практически не возможно (ну ладно, не возможно с нормальный аллокатором памяти)..

>может ли выдержать такое linux без страшных перемен в ядре?

ага.. не сможет так кэш сократит или того хуже прибъет какой-нибудь пользовательских процесс (почти не возможная ситуация).

>сможет ли он загрузится?

о, как все оказывается запущено... ну когда ядро запускается в памяти ничего нет => нет фрагментации

ps: может здесь есть неточности, давно дело было..

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

большое спасибо за ответ.

> ну когда ядро запускается в памяти ничего нет => нет фрагментации я говорю о _физической_ (причем случайной) фрагментации. т.е. банки памяти могут отсутствовать кое-где (сгореть) ... ядро обязательно необходимо грузить по какому-то точному адресу? т.е. оно может быть перемещаемо? или это как его слинковать?

>этот костыль придуман из-за ограницения ахритектуры не разясните ли - каких именно ограничений ? может это всё мне прояснит :)

>>есть ли толковые книги по-русски ? >нет. а переводы? :) нигде не найду ссылок. только на частичные переводы типа www.iakovlev.org причем без самого интересного

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

Re^2: концепция памяти в linux. дефрагментация памяти.

> я говорю о _физической_ (причем случайной) фрагментации. т.е. банки памяти могут отсутствовать кое-где (сгореть) ...

> ядро обязательно необходимо грузить по какому-то точному адресу? т.е. оно может быть перемещаемо? или это как его слинковать?

Был какой-то патч для ядра(вроде badram называется), который позволяет указывать, какие части памяти трогать не надо. Наверно, оно должно помочь.

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

>я говорю о _физической_ (причем случайной) фрагментации. т.е. банки памяти могут отсутствовать кое-где (сгореть) ... ядро обязательно необходимо грузить по какому-то точному адресу? т.е. оно может быть перемещаемо? или это как его слинковать?

в linux "плоская" модель памяти, и такая ситуация не возможно (по крайней мере на x86'ой архитектуре). а если бы и была возможно то по логике вещей должна обрабатываться не ядром, а контролером памяти.

>не разясните ли - каких именно ограничений ? может это всё мне прояснит :)

гм.. ядро по дефолту линкуется на смешение в 1Gb. и все адресное пространство разбивается на две чати - 1Gb -- ядро, 3Gb -- пользовательские процессы. (опытным путем было установленно что это наилучшее разбиение). однако из-за этого как раз и возникает проблема: ядро не может на прямую адрисовать 3Gb.

>а переводы? :)

переводы... из актуальных есть три книжки

1. "азбука ядра"("A Top-Down Approach for x86 and Power PC Architectures") чтобы ее читать в переводе надо знать ангицкий (как это не парадоксально), т.к приходится догадываться о чем же говорилось в первоисточнике (перевод крайне корявый)

2. ядро linux (Understanding the Linux Kernel, 3rd Edition, OReilly) с нормальным переводом (хотя в оригинале опять же лучше, и при том в открытом доступе) стоит кучу денег.

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

вроде больше переводов небыло.

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

1) в принципе необязательно, ядро можно грузить по любому физическому адресу (если там конечно RAM/flash :) ) если pre-MMU код это позволяет.

2) Ядро занимает один гигабайт в виртуальном адресном пространстве на IA32 (0xc0000000 - 0xffffffff), так что напрямую (1:1) можно отмапить только 1 гигабайт памяти. Окно виртуальных адресов оставлено для того чтобы туда можно было мапить железяки, etc)

3) нет, не видел таковых

int_0dh
()

> я не понимаю что означает "верхняя память",

Костыль для убожества под названием x86.

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