|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Глава 31. Управление памятью в NetWare 4.0NetWare 4.0 предусматривает упрощенную архитектуру управления памятью, которая позволяет более эффективно использовать память и выполнять ее быстрое распределение/освобождение. Кроме того, упрощенный API позволяет разработчикам быстрее писать программы. Как уже упоминалось, NetWare 4.0 предусматривает кольцевую и доменную защиту на основе сегментации и страничной организации процессоров Intel 386/486. Кольцевая защита - это принцип построение логической модели в виде концентрических колец, где в каждое кольцо допускаются только NLM с определенными привилегиями. Доменная защита - это логическое адресуемое пространство для процесса или NLM, где каждый домен определяется и ограничивается таблицами страниц. Кольцевая защитаИспользуя для реализации кольцевой защиты архитектуру с сегментацией, NetWare присваивает селекторам сегмента уровни привилегий. В текущей реализации защиты памяти NetWare используется только два уровня привилегий: уровень 0 для операционной системы NetWare и уполномоченных NLM и уровни 1, 2 и 3 для тех NLM, которые нужно изолировать от операционной системы. Отметим, однако, что хотя вы можете загружать NLM на уровни 1, 2 или 3, защита памяти NetWare рассматривает эти уровни как идентичные. Домен, где на уровне 0 выполняется операционной система и уполномоченные NLM-модули, называется системным доменом (домен OS). Домен, в котором на уровне 1, 2 или 3 работают другие NLM, называется защищенным доменом (домен OS_Protected). При выполнении NLM-модуля (или процесса) он наследует уровень привилегий, присвоенный дескриптору сегмента, который описывает занимаемую процессом память или домен. Таким образом, процесс не может получить доступ к памяти, описанной дескриптором сегмента с более высоким уровнем защиты (пока это не разрешено явным образом или косвенно через механизм сетевого интерфейса). Кроме уровней защиты сегментация обеспечивает для сегментов памяти физические ограничения, если программный код получает доступ к памяти вне границ дескриптора памяти сегмента, аппаратное обеспечение Intel генерирует прерывание. Доменная защитаИспользуя для реализации доменной защиты страничную архитектуру, NetWare и NLM-модули NetWare могут адресоваться к 4-килобайтовым блокам памяти или страницам оперативной памяти (ОЗУ). Каждая страница памяти может быть помечена как присутствующая или отсутствующая, защищенная от чтения, от записи, доступная для чтения или доступная для записи. NLM-модули или процессы получают доступ к памяти, используя двухуровневую таблицу страниц, показанную на следующем рисунке. Первый уровень - это таблица каталога страниц Page Directory Table, которую имеет каждый домен. Page Directory Table каждого домена содержит адреса таблиц страниц домена, которые составляют второй уровень. Таблицы страниц содержат адреса 4-килобайтовых блоков или страниц памяти, используемых NLM. На основе адреса таблицы в таблице страниц аппаратное обеспечение Intel транслирует линейный адрес в соответствующий физический адрес. Использование двухуровневой таблицы страниц позволяет процессу адресоваться к памяти, которая физически не является непрерывной, как к логически непрерывному диапазону памяти. Двухуровневая таблица страниц
2-ой уровень: таблица
1-ый уровень: таблицы страниц Page Table,
Page Directory Table содержащая блоки 4-килобайтовые
(одна на каждый домен) памяти по 4К. страницы памяти,
+---------------+ +--------------+ используемые NLM
¦Запись каталога¦--+ ¦ ¦ или процессом.
¦ страниц ¦ ¦ ¦ ¦ +--------------+
+---------------+ ¦ +--------------+ +-->¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ +--------------+
+---------------+ ¦ +--------------+ ¦ +--------------+
¦ ¦ ¦ ¦Запись таблицы¦-+ +>¦ ¦
¦ ¦ ¦ ¦ страниц ¦ ¦ ¦ ¦
+---------------+ ¦ +--------------+ ¦ +--------------+
¦Запись каталога¦-+¦ ¦Запись таблицы¦---+ +--------------+
¦ страниц ¦ ¦¦ ¦ страниц ¦ +->¦ ¦
+---------------+ ¦¦ +--------------+ ¦ ¦ ¦
¦ ¦ ¦¦ ¦Запись таблицы¦--+ +--------------+
¦ ¦ ¦¦ ¦ страниц ¦ +--------------+
+---------------+ ¦¦ +--------------+ +>¦ ¦
¦ ¦ ¦+-->¦Запись таблицы¦---+ ¦ ¦
¦ ¦ ¦ ¦ страниц ¦ +--------------+
+---------------+ ¦ +--------------+ +--------------+
¦ ¦ ¦ +--------------+ +-->¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
+---------------+ ¦ ¦ ¦ ¦ +--------------+
¦ ¦ ¦ +--------------+ ¦ +--------------+
¦ ¦ ¦ ¦ ¦ ¦+->¦ ¦
+---------------+ ¦ ¦ ¦ ¦¦ ¦ ¦
¦ ¦ ¦ +--------------+ ¦¦ +--------------+
¦ ¦ ¦ ¦Запись таблицы¦-+¦ +--------------+
+---------------+ ¦ ¦ страниц ¦ ¦+>¦ ¦
¦ +--------------+ ¦¦ ¦ ¦
¦ ¦Запись таблицы¦--+¦ +--------------+
¦ ¦ страниц ¦ +-+ +--------------+
¦ +--------------+ ¦ +>¦ ¦
¦ ¦Запись таблицы¦-+ ¦ ¦ ¦
¦ ¦ страниц ¦ ¦ +--------------+
¦ +--------------+ ¦
+--->¦Запись таблицы¦---+
¦ страниц ¦
+--------------+
Каждый диапазон памяти или домен в NetWare 4.0 отображается с помощью своей таблицы. Таким образом, эта таблица страниц определяет адреса физической памяти, доступные для этого домена. Работающий в домене процесс не может видеть адреса памяти, не отображенные явно на этот домен. Следовательно, для одного домена пространство памяти (адресов) других доменов логически не существует. Как уже упоминалось, NetWare поддерживает в данный момент только домены OS и OS_Protected, однако в будущих версиях NetWare, где домены будут реализованы полностью, коммуникации между доменами будут осуществляться с помощью механизма копирования, который называется междоменным обращением XDC (Cross-Domain-Call). Средство копирования XDC моделируют технологию вызова удаленной процедуры RPC (Remote Procedure Call). Хранимая в каждом домене информация включает в себя схему точек входа домена для механизма копирования XDC. Когда процесс вызывает одну из этих точек входа, механизм XDC будет получать управление и копировать стек и другую информацию вызывающей процедуры в специальную область памяти, образующую шлюз вызова. Шлюз вызова позволяет механизму копирования XDC передавать выполнение (от вызывающего процесса в вызываемый и обратно) без возможного нарушения границ защиты памяти сервера. Оба процесса, вызываемый и вызывающий, при операциях механизма XDC, который является в итоге источником параметров стека и конечным назначением возвращаемых значений, игнорируются. В итоге селекторы сегмента с их уровнями привилегий используются для предотвращения непреднамеренного или намеренного обращения к памяти вне диапазона адресов домена. Они предотвращают также увеличение структур данных за определенные ранее границы. Каждый домен в Page Directory Table и таблицы страниц, на которые он указывает, используются для отображения различных диапазонов памяти в различные домены. Эти таблицы и флаги, обеспечивающие защиту по чтению и записи для отдельных страниц, предотвращают доступ любого домена к страницам памяти другого домена. Команды защиты памятиПервые четыре команды, описанные в данном разделе, доступны только как часть домена NLM. Остальные команды являются частью операционной системы и доступны в любое время. Каждую команду защиты памяти определяют следующие соглашения:
domain
Данная команда перечисляет текущий домен и все другие существующие домены. Когда вы загружаете NLM-модуль, он всегда будет загружаться в текущий домен. При запуске по умолчанию назначается домен OS. Эта команда перечисляет также NLM-модули, загруженные в каждый домен.
domain={имя_домена}
Данная команда устанавливает текущий домен в имя_домена (внутренние пробелы в этом имени не допускаются).
domain ring 1-3
Данная команда изменяет номер кольца защиты домена OS_Protected на 1, 2 или 3. По умолчанию домен OS_Protected имеет номер кольца 1. Помните о том, что в настоящее время NetWare поддерживает только домены OS и OS_Protected. Таким образом, не важно, зададите вы 1, 2 или 3, поскольку все три кольца представляют домен OS_Protected.
domain_help
Данная команда выводит на экран основную информацию о доменных командах.
set read fault emulation={on/off}
Данная команда определяет действие, которое будет выполнять операционная система, когда в известной памяти происходит обращение к отсутствующей странице. Обращение к отсутствующей странице происходит, когда процесс пытается считать адрес памяти, не отображенный в его домен. Если в этой команде установлено ON, операционная система временно отображает страницу памяти в текущий домен и считывает ячейку памяти. Затем страница отображается вне домена. Получение уведомления об отсутствии страницы зависит от установки флага "set read fault notification". Если эта команда устанавливается в OFF, а "set allow invalid pointers" также установлено в OFF, то попытка считать несуществующую память дает в результате ситуацию чтения отсутствующей страницы. Предпринимаемое доменом NLM действие зависит от флага "set developer option", но может включать в себя карантин процесса, NLM и/или весь домен. Кроме того, может произойти аварийное завершение работы сервера. По умолчанию устанавливается OFF. Термин "карантин" означает изоляцию всего домена. Система запрещает вызовы из поставленного на карантин домена. Операционная система предусматривает также для разработчиков средство регистрации своих собственных подпрограмм обработки карантина.
set read fault notification={on/off}
Данная команда определяет, когда операционная система выводит сообщение на консоль или записывает его в файл регистрации. Если команда "set read fault emulation" или "set allow invalid pointers" установлены в ON, и происходит чтению по отсутствующему адресу, то, если эта команда установлена в ON, операционная система посылает на экран консоли и в файл регистрации сообщение, описывающее детали по чтению отсутствующей страницы.
set write fault emulation={on/off}
Данная команда определяет действие, выполняемое операционной системой, когда в известной памяти происходит запись в несуществующую страницу. Когда данная команда устанавливается в ON, операционная система временно отображает запрошенную страницу памяти в текущий домен, и операционная система выполняет инструкцию записи. Затем операционная система отменяет отображение страницы в текущем домене. Уведомление об обращении к несуществующей странице зависит от флага "set write fault notification". Если эта команда установлена в OFF, и "set alloow invalid pointers" также установлено в OFF, то попытка записи в отсутствующую страницу памяти приводит к ситуации обращения к несуществующей странице. Предпринимаемое доменом NLM действие зависит от состояния флага "set developer option", но может включать в себя карантин процесса, NLM и/или всего домена. Кроме того, может происходить аварийное завершение работы сервера. По умолчанию устанавливается значение OFF.
set write fault notification={on/off}
Данная команда определяет, когда операционная система записывает сообщение на экран консоли или в файл регистрации. Если "set write fault emulation" или "set allow invalid pointers" устанавливается в ON, и происходит запись в несуществующую страницу, то, если данная команда установлена в ON, операционная система посылает сообщение, описывающее детальную информацию по обращению к несуществующей странице, на экран консоли и в файл регистрации.
set allow invalid pointers={on/off}
Данная команда определяет действие, выполняемое операционной системой при чтении или записи в несуществующую страницу, и эта ситуация не обрабатывается эмуляцией чтения или записи в несуществующую страницу. Если данный параметр установлен в ON, то операционная система отображает недопустимую (несуществующую) страницу памяти по данному адресу, что позволяет обработать обращение к памяти. Отсутствующая страница остается отображенной, пока данный параметр не будет выключен, или пока отображенная станица памяти не будет повторно использована для отображения другого отсутствующего адреса. Уведомлением пользователя о ситуации обращения по несуществующему адресу управляют команды "set read fault notification" и "set write fault notification". Если данная команда установлена в OFF, то попытка чтения или записи отсутствующей страницы дает ситуацию обращения к несуществующей странице. Выполняемое доменом NLM действие зависит от состояния флага "set developer option", и может включать в себя карантин процесса, NLM и/или всего домена. Кроме того, может происходить аварийное завершение работы сервера. По умолчанию устанавливается значение OFF.
set developer={on/off}
Данная команда позволяет вам разрешить или запретить параметр, связанный с операционной средой разработчика. Если эта команда установлена в ON, то необработанная исключительная ситуация или прерывание приводит к аварийному завершению или вызову отладчика. Если эта команда установлена в OFF, то необработанная исключительная ситуация или прерывание будет вызывать карантин текущего домена. Команды отладчикаСредства защиты памяти включают в себя команды отладчика, предназначенные для работы со средой защиты памяти и получения информации об этой среде. Команды отладчика кратко поясняются и описываются ниже.
Для повторения команд D, DL, M, P, S, T и U используйте клавишу Enter. Команды защиты памятиНиже перечислены команды защиты памяти.
|
|
CITForum © 1997–2025