Вы здесь

Вопрос о виртуальной памяти процесса

Всем привет!

Никак не могу найти ответ на вопрос, может подскажите...
При создании процесса ядро создает виртуальное адресное пространство в 4 Гб (для 32-х разрядных x86 систем). Эта виртуальная память разделена, по большому счету, на 2 области — User Space и Kernel Space. Так вот меня интересует, из каких соображений сделано разделение только 2:2 и 3:1? Почему нет 3.5:0.5, например? Хочу понять принципы, но нигде ничего подробно не написано на эту тему...

Буду благодарен за подробное объяснение или за ссылки.

Ну основной принцип - чтобы и приложению и ядру было достаточно. Кроме того на x86 системах оперативной памяти как правило сильно меньше, чем виртуальной. Да и приложения (обычные для x86, не жесткие научные пакеты) обычно не требуют гигабайты памяти на одной машине.
А те, которые требуют, обычно распаралеливают, у каждого процесса будет свое ядресное пространство, свои 3 гига памяти.
В ядерном пространстве же еще всякие кэши хранятся. Если оставишь ядру мало памяти, то общее использовании оперативки получится неэффективным. Она, например пустая будет, я ядро не сможет её под кэши захапать.
Так что 3.5:0.5 - это уже ты маловато ядру оставляешь, на многих машинах больше полгига оперативки.

Это все пустые разглагольствования, меня не интересующие. Вы уж извините, но мне интересны исключительно точные принципы, точная теория, а не личные мнения...

Секта Черных Пингвинов
http://blackpenguins.ru

Какая точная теория? Мегаформула которая выдает наилучшее разделение? Её нет. Сделаешь много памяти приложениям - ядро не сомжет организовать кэширование и все будет тормозить, сделаешь много памяти ядру - приложения не смогут обрабатывать большие объемы данных.
У тебя много памяти (скажем все 4 гигабайта) и очень обильные операции ввода-вывода - деление памяти пополам будет более результативным, а если ввод-вывод маленькие но есть приложение в один поток обсчитывающее очень большой кусок данных - большая производительность окажется при меньшем объеме памяти у ядра.
А если у тебя меньше 2х гигов памяти, то разницы в разбиении скорее всего не заметишь. Если много мелких приложений и нет сильного ввода-вывода, тоже разницы не будет.
Ясно только, что наибольшая производительность будет достигаться где-то в середине, поэтому и предлагаются варианты, близкие к середине.

Меня интересует не этот наколенный детсадовский бред, извини. Есть очень хорошая книга: "Разработка ядра Linux", автор Роберт Лав, издатель Novell Press. Эта книга дает ответы почти на все вопросы функционирования узлов ядра на достаточно высоком уровне. Но вопрос, заданный мной изначально, подробно не освещен. Так вот меня интересует не детский бред, а профессиональное изложение или ссылки на такую информацию.

Секта Черных Пингвинов
http://blackpenguins.ru

Если такой умный, то тогда скажи, зачем иное разделение памяти, что ты можешь выиграть за счет иного разделения памяти?

видимо челу не нужно твоё мнение, ему нужно дать ссылку на мифического Гуру, который скажет тоже самое - НО он Гуру, а мы можем и дальше лаптем щи хлебать...

+1:(

Я не хочу делить иначе, я хочу понять, почему именно так разделено. Но ответы из разряда "Если сделать крылья самолету короткими - он не полетит, а если длинными - они отвалятся" мне не нужны, потому что такие ответы не объясняют, какие все-таки точно делать крылья.

Секта Черных Пингвинов
http://blackpenguins.ru

так народ давайте без наездов друг на друга!
ЗЫ есть софт который свободно отжирает гигов 30-40 оперы и я им пользуюсь...
ЗЗЫ про точную теорию поговорим после того как ты представишь точное квантовомеханическое решение для чего нибудь сложнее атома водорода... Возьми гелий например и посторайся точно решить... А потом и поговорим если желание останеться...

_________________
Gentoo GNU/Linux 2.6.20 GCC 4.1.2 Dual Xeon
Working on Gentoo for iPAQ hx4700 :-)

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

найди книгу Мела Гормана (Mel Gorman) Understanding The Linux Virtual Memory Manager в ней дается более-менее ясное представление по интересующему тебя вопросу..
явно там не написано почему используются такие соотношения, но как говорится, между строк, .. в общем прочитав ты поймешь на что и сколько выделяется памяти и соответственно почему 3.5 на 0.5 не есть гуд :)
_________________
acer aprire 3002 (sempron 3000, 2Gb, sis, 80Gb)

Спасибо за ссылку на книгу! Обязательно ее посмотрю.

Секта Черных Пингвинов
http://blackpenguins.ru

Кстати, как найдёшь из каких соображений, гуру, отпишись, интересно будет узнать. )

что бы понять принцЫп поробуй кушать суп чайной ложкой и сравни скорость поглощения супа, если будешь кушать столовой ложкой.
Ваш gUrU_gUrU :D

+1
_________________
Linux ns 2.6.18-suspend2-r1 #2 SMP Sat Feb 3 13:56:55 KRAT 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux

Как я и думал, детишки, на этом форуме мне никто ответа дать не сможет... Жаль, я думал, что здесь есть профессионалы.

Секта Черных Пингвинов
http://blackpenguins.ru

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

Усвоил? Подотри сопельки и выполняй.

Ingirami написал:
Мальчик, сначала научись не хамить людям, которые искренне пытаются тебе помочь - а потом уже можешь попробовать начать вопросы задавать. Тихим и вежливым тоном.

Усвоил? Подотри сопельки и выполняй.

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

Секта Черных Пингвинов
http://blackpenguins.ru

Может это не полностью объясняет принцип, но дает некоторую информацию:

http://www.citforum.ru/operating_systems/winntadm/winntadm_01.shtml написал:
Процессор MIPS R4000 требует, чтобы 2 Гб адресного пространства были зарезервированы для системы.

http://www.developing.ru/com/virtual_memory_04.html написал:
Почему сделано так? Давайте представим себе, а можно ли было сделать иначе... Представим себе, что при старте процесса система это отображение делает сама и прозрачно для программы пользователя. Поскольку заранее система ничего не знает о том сколько и где программе понадобится памяти она будет вынуждена "отмаппировать" всё. Программа может обратиться к двум гигабайтам? Может. Вот два гигабайта система и будет предварительно размещать. Как мы видели из предыдущего раздела – размещать эти два гигабайта она будет в файле подкачки, т.е. его минимальный размер для запуска одного процесса должен быть не менее 2 Гб.

PS: ничё что статьи про вражескую ось :D
PS: в исходниках ядра можно изменить это распределение
PS: а вообще чисто научно такое разделение сделано из соображения симмертии +) кстати, это не шутка

/ Enchant /
"Никакую проблему нельзя решить на том же уровне, на котором она возникла"

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

Был вопрос вида: "А зачем ему это нужно?". Отвечаю - информация требуется для практического применения.

Секта Черных Пингвинов
http://blackpenguins.ru