На рисунке 2.5 представлена структура оперативной памяти файлового сервера NetWare 3.х.
Структура ОП для NetWare 4.х отличается тем, что области памяти Permanent Memory Pool и Alloc Short Term Memory Pool объединены в один пул Allocated Memory Pool.
В системной области располагаются ОС DOS, модуль SERVER.EXE, программы BIOS. В пулах памяти хранятся буферы приема пакетов, таблица соединений, таблица открытых файлов, блоки, динамически выделяемые NLM-модулям, и т.д. Всю оставшуюся память занимает кэш-буфер (Cache Buffers). В этой области выделяются кэш неперемещаемой памяти (Cache Non-Movable Memory) и кэш перемещаемой памяти (Cache Movable Memory). В кэше перемещаемой памяти в основном хранятся кэш-таблицы, которые могут быть перемещены операционной системой в другое место ОП в случае возникновения фрагментации памяти. Кэш неперемещаемой памяти расширяется, если в ОП загружается NLM-модуль. NLM-модули не являются перемещаемыми. После выгрузки NLM-модуля из ОП освободившаяся память вновь возвращается в кэш-буфер.
Рис. 2.5. Структура ОП файлового сервера NetWare 3.x
В NetWare 3.х защита оперативной памяти не предусмотрена: любой NLM-модуль имеет доступ к любой области ОП. Поэтому в NetWare 3.х нельзя отлаживать новые NLM-модули на работающей системе, т.к. ошибка в программе может привести к "зависанию" всей системы.
NetWare 4.х предусматривает кольцевую и доменную защиту ОП на основе сегментации и страничной организации процессоров Intel 80386/80486.
Прежде всего рассмотрим, как процессор выполняет обращение к ОП из программы файлового сервера NetWare 4.х (рисунок 2.6).
Адрес ОП состоит из селектора и смещения. 13-битовый индекс селектора определяет дескриптор в таблице страниц. Из этого дескриптора извлекается 32-битовый адрес требуемой страницы в ОП и к нему прибавляется 16-разрядное смещение. В результате получается требуемый физический адрес данных в оперативной памяти.
Но перед формированием физического адреса определяется возможность доступа программы к требуемой странице. Для этого в поле RPL селектора адреса копируется 2-битовый уровень привилегий из селектора сегмента кода, загруженного в регистр CS. Таким образом, поле RPL определяет уровень доступа программы к странице. Если значение RPL не превышает значения DPL дескриптора, то программе разрешается доступ к странице. Описанный механизм ограничения доступа называется кольцевой защитой памяти. NetWare 4.х поддерживает только два уровня доступа: 0 и 3 (значения поля RPL). Уровни 1 и 2 эквивалентны уровню 3. В NetWare 4.х самый привилегированный уровень 0 обозначается как OS, а уровень 3 - как OS_PROTECTED.
Доменная защита памяти в NetWare 4.х заключается в том, что для каждого уровня доступа (OS и OS_PROTECTED) определена своя двухуровневая таблица страниц (Page Table). Работающий в кольце (домене) процесс не может видеть адреса памяти, не отображ╦нные явно на этот домен. Следовательно, для одного домена логически не существует пространства памяти (адресов) другого домена.
Рис. 2.6. Организация доступа программы к ОП
Таким образом, в NetWare 4.х оперативную память можно разделить на два домена (рисунок 2.7).
Рис. 2.7. Домены NetWare 4.x
В домен OS загружаются ядро ОС и системные NLM-модули, а в домен OS_PROTECTED можно загружать отлаживаемый NLM-модуль. При попытке несанкционированного доступа к страницам домена OS отлаживаемый NLM-модуль будет аварийно заверш╦н. Таким образом, в NetWare 4.х можно отлаживать новые программы на работающей системе. После отладки модуля его рекомендуется загружать в домен OS. Это связано с тем, что время переключения между доменами достаточно велико.
Для создания двухдоменной структуры памяти достаточно перед загрузкой NetWare 4.х поместить в конфигурационный файл команду
LOAD DOMAIN
Далее в процессе функционирования системы с консоли файлового сервера можно вводить следующие команды: DOMAIN=OS - последующие NLM-модули, загружаемые по LOAD, будут принадлежать домену OS, DOMAIN=OS_PROTECTED - последующие NLM-модули, загружаемые по LOAD, будут принадлежать домену OS_PROTECTED.