Введение

Программное обеспечение, читаемое компьютером, совместимое с Novell.

NetWare Loadable Module (NLM) – это загружаемый модуль ядра (модуль двоичного кода), который можно загрузить в операционную систему NetWare от Novell. NLM могут реализовывать драйверы оборудования, серверные функции (например, кластеризацию), приложения (например, GroupWise), системные библиотеки или утилиты. Поддержка NLM началась с версии NetWare 3.x, основанной на процессоре Intel 80386. Более ранние версии NetWare использовали монолитное ядро, и существенные изменения в аппаратном обеспечении или функциональности требовали перекомпиляции ядра из объектных модулей. Из-за проблем со стабильностью ранних NLM сторонних разработчиков, они не получили широкого распространения для разработки серверных приложений, за исключением таких программ, как антивирусы, программы резервного копирования и некоторые продукты баз данных.

Функциональность

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

Проблемы программирования

Первоначально Novell выпустила набор инструментов разработки для программирования NLM, включающий документацию по API ядра и компилятор C (Watcom), однако поддержка исполняемых файлов NLM сторонними разработчиками была весьма ограниченной. В ранних версиях NetWare (до v4.x) все процессы выполнялись в адресном пространстве ядра без какой-либо специализированной защиты памяти. В результате ошибки в NLM могли перезаписать адресное пространство ядра или другого NLM и, в конечном итоге, привести к сбою сервера — в терминологии Novell, унаследованной от мейнфреймов, это называлось ABEND (ABnormal END). Более того, NetWare использовала невытесняющую, или кооперативную, многозадачность, что означало, что NLM должен был регулярно передавать управление ядру. Например, NLM, выполняющий бесконечный цикл, не мог быть остановлен. В NetWare v4.x компания Novell представила ограниченную форму защиты памяти, которая была расширена до защищенных адресных пространств в NetWare v5.x. Благодаря этим механизмам, правильно написанные NLM могут быть загружены в собственное адресное пространство, а некорректно работающие NLM могут быть предотвращены от нарушения целостности ядра.