Распределение и защита основной памяти
На рисунке 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.