Менеджер процессов QNX - единственный процесс, который работает в адресном пространстве микроядра. Тем не менее, он, как и всякий процесс, использует примитивы передачи сообщений для взаимодействия с другими процессами.
В задачи менеджера процессов входит создание новых процессов, а также управление структурами данных, описывающих процесс. Это значит, что для создания процесса нужно послать соответствующее сообщение менеджеру процессов; при этом надо заметить, что создание процесса прозрачно для приложений в сетевом отношении: неважно, какому именно менеджеру процессов посылается сообщение - локальному или работающему на другом узле.
QNX предоставляет 3 примитива создания процесса:
Реализация первых двух примитивов соответствует стандарту POSIX, а третий специфичен для QNX - именно с его помощью можно создавать процессы на не локальном узле.
Процесс в QNX проходит через 4 стадии
Завершение процесса происходит в 2 стадии: на первой управление получает специальная нить менеджера процессов (termination thread), которая исполняется с идентификатором завершаемого процесса и освобождает все ресурсы, используемые процессом (открытые файлы, динамически выделенная память, виртуальные цепочки, символические имена, главные номера устройств, обработчики прерываний, прокси, таймеры); на второй стадии родительскому процессу посылается уведомление о завершении дочернего. При этом вопросы с "зомби" решаются способом, в целом аналогичном способу, описанному в стандарте POSIX.
На рисунке ниже приведена диаграмма состояния процессов в ОС QNX.
Обычно присутствующее состояние "RUN" здесь опущено. Его нужно узреть на стрелочках, обозначающих переходы между состояниями READY->any_other.
Состояние готовности ("READY") - состояние, в котором процесс способен конкурировать за процесссорное время (то есть ему ничего, кроме этого, не требуется)
Состояние "BLOCKED" ("WAIT", "SLEEP", "SUSPENDED"), как видно из диаграммы, имеет разновидности, в зависимости от того, чего именно ожидает процесс (получения ответа на сообщение, освобождения семафора, заверешения дочернего процесса, получение сообщения процессом, которому оно адресовано и т.п.).
В состояние "HELD" ("ОСТАНОВЛЕН") процесс переходит тогда, когда получает сигнал SIGSTOP. В этом состоянии процесс не может претендовать на процессорное время. Из этого состояния процесс может вернуться только в том случае, если получит сигнал о продолжении своей работы ("SIGCONT") или же получит иной сигнал, на который нужно отреагировать завершением.
В состояние "ЗАВЕРШЕН" ("DEAD", "ZOMBIE") процесс переходит в том случае, если он окончил стадию завершения, но родительский процесс данного процесса его не ждал.
Переходы между состояниями таковы:
Для определения состояния процессов (в интерпретаторе команд, оболочке) можно использовать утилиты ps и sin. Первая реализована в соответствии со стандартом POSIX, вторая специфична для QNX, но зато она позволяет получить информацию, которую невозможно получить с помощью первой.
......
.....
Обработчики прерываний входят в состав различных процессов, например, драйверов устройств, но запускаются асинхронно, то есть процесс, в состав которого они входят, может прерваться в любой момент обработчиками прерываний.
Основные свойства обработчиков прерываний:
Управление по возникновении одного и того же прерывания могут получать несколько процессов в порядке, определяемом микроядром (например, в порядке регистрации обработчиков).
Дата последней модификации: 2009-07-25