Сети NetWare 3.12-4.1.Книга ответов

       

Распределение памяти



1.1 Распределение памяти

Основным ресурсом платформы сервера является оперативная память. В NetWare-386 ее использование основано на 32-битных регистрах, позволяющих адресовать до 4 Гбайт в одном непрерывном сегменте. Объем реально устанавливаемой памяти ограничивается возможностями системной платы и разрядностью контроллеров DMA и Bus-Master дисковых (и, возможно, сетевых) адаптеров. При установке памяти свыше 16 Мбайт обычно требуется выполнение команды REGISTER MEMORY beg size из файла AUTOEXEC.NCF сразу же после задания номера внутренней сети. Здесь beg и size - шестнадцатеричные значения начала (обычно 1000000) и размера области памяти свыше 16 Мбайт.

В системах с шиной EISA автоматическая регистрация памяти выше 16 Мбайт разрешается командой

SET AUTO REGISTER MEMORY ABOVE 16 MEGABYTES = ON (OFF) в файле STARTUP.NCF.

Логически память организована в виде пулов и выделяется для различных нужд динамически, по мере необходимости и возможности. Параметры, регулирующие выделение памяти, рекомендуется изменять не ранее, чем через 15 минут функционирования сервера при рабочей нагрузке. Распределение памяти в NetWare 3.x и 4.x существенно различается.
В NetWare 3.x память разделяется на три пула:

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

Из этого сегмента память выделяется в пулы постоянной и кратковременной памяти безвозвратно до перезагрузки сервера.



Размер пула в установившемся режиме должен составлять не менее 20% от общего объема памяти, рекомендуется 40-60%.


Кэш-буфер файлов имеет подпулы динамического и статического кэша.
Динамический кэш является подпулом, используемым для внутренних системных таблиц с изменяющимся размером (хеш-таблиц, таблиц размещения файлов и каталогов). Подпул нефрагментируемый, расширяемый. Освободившаяся область может возвращаться в кэш-буфер файлов непрерывными блоками.
Статический кэш - фрагментируемый, расширяемый подпул, используемый для загрузки NLM.
Освободившаяся область может возвращаться в кэш-буфер файлов несмежными блоками.



Частая загрузка и выгрузка модулей может приводить к фрагментации памяти и невозможности удовлетворения запроса на непрерывную область памяти.

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

Пул кратковременно выделяемой памяти (Alloc Short Term Memory) используется планами драйвов (drive maps), таблицами SAP, RIP, управления очередями, соединений пользователей. Неиспользуемая память остается в пуле для повторного применения.

Максимальный размер пула кратковременно выделяемой памяти (только в NetWare 3.x) задается командой

SET MAXIMUM ALLOC SHORT TERM MEMORY = 8388608 (50000-33554432 байт).
В NetWare 4.x память разделяется на пять пулов:
Пул выделенных блоков (allocated blocks pool) - область буферов размером 4 Кбайт, выделенных из пула кэш-буферов для загрузки NLM. Освободившиеся блоки возвращаются обратно в пул кэш-буферов.
Пул кэш-буферов (cache buffers pool) - в него собирается вся свободная память сервера. Используется для кэширования чтения и записи файлов, из него память обратимо выделяется в пул выделенных блоков.
Пул перемещаемой кэш-памяти (cache movable memory pool) - память для внутренних системных таблиц с изменяющимся размером (хеш-таблиц, таблиц размещения файлов и каталогов).
Пул фиксированной кэш-памяти (cache non-movable memory pool) - небольшая область для хранения системной информации и работы компрессора файлов.
Операционная система (operating system) - 3-4 Мбайт памяти для кода и данных ОС (Code and Data Memory).

Управление проверкой повреждений памяти при выделении блоков:

SET ALLOC MEMORY CHECK FLAG=OFF (ON)
В NetWare 4.x решена проблема фрагментации памяти. Для этого периодически запускается процесс "сборки мусора" (garbage collection), который при наличии достаточного количества и объема освободившихся блоков производит дефрагменацию памяти пула кэш-буферов, собирая всю свободную память в одну непрерывную область.



Управление процессом сборки мусора (доступно и из STARTUP.NCF)

SET GARBAGE COLLECTION INTERVAL=15 (1-60 минут) - периодичность инициирования "сборки мусора"

SET NUMBER OF FREES FOR GARBAGE COLLECTION=5000 (100-100000) - количество освободившихся областей, при которых запускается сборка мусора

SET MINIMUM FREE MEMORY FOR GARBAGE COLLECTION=8000 (1000-1000000) - суммарный объем освободившихся областей, при которых запускается сборка мусора
Процессор сервера работает в защищенном режиме, что, однако, не гарантирует устойчивости работы системы при неполадках в отдельных модулях, поскольку и они, и само ядро ОС NetWare работают в нулевом кольце защиты памяти (аппаратный супервизор процессора 80386 и старше), чем объясняется высокая скорость их работы. При этом защиты памяти как таковой нет, и любой модуль может обращаться ко всему объему памяти даже по записи, что может приводить к краху системы. В других ОС защищенного режима пользовательские задачи работают в кольце 3 - медленно, но надежно.
В NetWare 4.x по умолчанию все модули так же загружаются в нулевое кольцо,но существует возможность создания "карантинной зоны" для загрузки модулей, которые подозреваются в залезании в чужие области памяти. Такая зона создается загрузкой модуля DOMAIN.NLM. Этот модуль помещается в каталог DOS и может запускаться раньше всех из первой строки файла STARTUP.NCF, разделяя память на два домена: "OS"- привелигированный домен (кольцо 0), служащий для загрузки ядра ОС и "верных" модулей, "OS_PROTECTED" - защищенный (точнее, изолированный) домен кольца 3. Загрузка модулей происходит в текущий домен, по умолчанию - "OS". Смена текущего домена для загрузчика выполняется командами

DOMAIN=OS_PROTECTED и DOMAIN=OS

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



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



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


Содержание раздела