суббота, 2 февраля 2013 г.

отличие константы от readonly поля

Эта статья будет полезна системным администраторам и программистам, работающим в ядре FreeBSD. Осмыслив изложенное здесь, можно понять, почему же бывает паника по kmem, что такое состояние keglim/zoneli, как читать непонятные циферки в выводе vmstat -m / vmstat -z, и что же такое эти самые mbuf и nmbclusters. Программистам, приступающим к работе не в сетевой подсистеме, всё равно будет интересно узнать о дополнительных интерфейсах, помимо привычных malloc()/free(), и отличиях этих стандартных функций.Поскольку эта статья ЂЂЂ введение в комплекс связанных обширных тем, она предполагает наличие некоторых базовых понятий (например, чем виртуальная память отличается от физической), и не углубляется в некоторые специфичные вещи (типа packet secondary zone), особенно появившиеся не так давно.Операционная система делает три вещи ЂЂЂ управляет оборудованием, распределяет память и мешает работе программиста. Причем ни с первым, ни со вторым она обычно не справляется.(с) фольклор Виртуальная память и адресное пространствоРассмотрим традиционное распределение виртуальной памяти процесса на i386 (рисовано по картинке Matthew Dillon псевдографикой):То, что относится к процессу, нас не интересует, а интересует сейчас та часть, которая KERNEL. Эта часть, которая при параметрах компиляции по умолчанию на i386 составляет 1 Гб ЂЂЂ общая для всех процессов на машине, и при этом присутствует (отображается) в адресном пространстве каждого из них. Представим себе, что у нас работает 10 процессов на машине архитектуры i386 с 40 Гб физической памяти (Нет, это не опечатка. Представьте). Тогда каждый процесс мог бы использовать полные доступные ему 2^32 = 4 Гб виртуальной памяти, и все 10 поместились бы в 40 Гб физической? Нет, потому что каждому доступно только 3 Гб адресного пространства ЂЂЂ и если они съедят доступную им память по полной, и то же самое сделает ядро, будет всего 31 Гб в сумме.Откуда эти цифры берутся? Один элемент таблицы страниц, то есть описывающий 1 страницу памяти, занимает 4 байта на i386. Размер страницы ЂЂЂ 4 Кб. Один уровень таблицы страниц занимает опять же 1 страницу, т.е. 4 Кб ЂЂЂ это 1024 записи, итого охватывающих 4 Мб виртуальной памяти (далее используется следующий уровень таблицы страниц). Вот об этих страницах каталогов, охватывающих по 4 Мб, и идёт речь в KVA_PAGES. В случае PAE цифры другие, там один элемент 8 байт, а 1 уровень каталога страниц занимает 4 страницы, охватывая 2 Мб виртуальной памяти ЂЂЂ поэтому цифры KVA_PAGES умножаются на 2. Подробнее можно посмотреть в файлах pmap.h, param.h, vmparam.h в /sys/i386/include/ (или аналоге для другой архитектуры), в районе определений с зубодробительным

Управление памятью в сетевой подсистеме и ядре FreeBSD в целом [2012]

[0] [281] [25] [30] [26] [17] [20] [0] [4]RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет. [51] [58] [17] [504] [40] [57] [14]Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Управление памятью в сетевой подсистеме и ядре FreeBSD в целом [2012] - Установка и настройка - Каталог статей - Документация по ОС FreeBSD

Комментариев нет:

Отправить комментарий