Модуль – это любая программа, структура данных, компонент ОС или любая строка байтов с идентифицирующим заголовком спереди и кодом CRC сзади.
CRC (циклический избыточный код) предназначен для защиты содержимого модуля от искажения.
Все функциональные компоненты OS -9 реализованы в виде независимых модулей. Такая система позволяет легко динамически реконфигурироваться добавлением или удалением отдельных модулей даже во время работы системы без какой-либо рекомпиляции или релинковании объектного кода.
Заголовок модуля несет системную информацию о самом модуле и его содержимом, необходимую для предотвращения несанкционированного доступа , используется при поиске всех модулей ПЗУ, при запуске системы для инициализации пространства данных программы и защиты данных от разрушения путем контроля модуля кодом CRC.
Все модули, находящиеся в данный момент в памяти, должны иметь разные имена. Адреса модулей хранятся в каталоге модулей. Каждый элемент каталога содержит адрес модуля, текущее количество прикреплений, использования модулей, идентификатор группы (для защиты от использования другими) и значение кода контроля заголовка по четности для защиты его от разрушения. Когда какая-либо программа нуждается в доступе к модулю, она обращается к ядру ОС с соответствующим запросом, передавая имя этого модуля. Ядро по очереди просматривает каждый элемент каталога. Адрес модуля указывает на заголовок модуля, в котором ядро находит имя модуля, и сравнивает его с именем, указанным в запросе. Это продолжается до тех пор, пока имена не совпадут.
Модули могут находиться постоянно в ПЗУ при запуске системы (например, модули ядра ОС) или загружаться с диска утилитой LOAD или по каналу связи в любой момент времени. На внешнем устройстве могут храниться в файлах информация о загруженных модулях, может добавляться. Когда модуль не найден в каталоге, ядро загружает файл, имеющий такое название и записывает его в каталог. Когда модуль уже не нужен его можно выгрузить и освободить занимаемую им память. Модули могут быть загружены неявно, т.е. опосредовано, при выполнении запросов, в которых явно не указано на загрузку этих модулей, так называемые липкие модули. Липкие модули после того, как он использовался, остается в памяти до тех пор, пока его память не понадобится системе. К липким могут относиться утилиты OS -9.
OS -9 различает следующие типы модулей:
- программа;
- подпрограмма;
- модуль данных;
- trap- обработчики;
- компоненты ОС (кроме ввода/вывода);
- менеджер;
- драйвер устройства;
- дескриптор устройства.
ОС загружает модуль в любую свободную память. Это накладывает на программы требование быть позиционно независимыми. Их пространство данных может находиться в любом месте свободной памяти и отделяться от пространства самой программы. Это позволяет записывать модули программы непосредственно в ПЗУ и позволяет им быть реентерабельными (могут быть вызваны сразу несколькими программами).