2014-09-19 5 views
0

Расположение пространства пользователя в адресном пространстве процесса хорошо известно, они принимают 1G ~ 4G виртуальной памяти (32 бит) и состоят из данных (bss), стека, области кучи. Но я не могу найти макет пространства ядра.Что такое расположение адресного пространства ядра в ядре linux?

Интересно, как тезисы:

когда VFS (виртуальная файловая система) код получить памяти через kmalloc, где же память проживает в? где-то в пространстве ядра (~ 1G)? и как найти их позже?

благодаря

+0

Я думаю, вы могли бы просто спросить об этом из любой поисковой системы и получить множество достаточно надежных ответов, таких как [this] (http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your- Память/). –

+0

Linux отображает макет памяти во время загрузки. Попробуйте 'dmesg'. Он может варьироваться от версии к версии. Существуют также файлы proc, такие как */proc/vmalloc * и т. Д., Которые сообщают вам, что были некоторые записи. Как есть, вы сомневаетесь слишком широко или неправильно понимаете. 'kmalloc()' для VFS поступит за тот же пул, что и почти любой 'kmalloc()'. * .config *, версия ядра и т. д. изменят ответ. –

ответ

0

Как правило, адрес выше 3G (0xC0000000) зарезервированы пространстве ядра. Вы можете изменить это во время процесса настройки ядра.

Проверьте это, все символы, экспортированные ядром, укладываются по адресу более 0xC0000000. Просто запустите 'sudo cat/proc/kallsyms | head -n 10 'вы их увидите.

Теперь на ваш вопрос. Я думаю, вы действительно можете сами найти ответ, напечатав данный адрес (например, kmalloc). Или даже использовать макрос из ядра для перевода физического адреса на виртуальный и наоборот.

Смежные вопросы