Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 90
Текст из файла (страница 90)
Определены в QNX еще и двадополнительных метода передачи сообщений — метод представителей (proxy) иметод сигналов (signal).Представители используются в случаях, когда процесс должен передать сообщение,но не должен при этом блокироваться на передачу. Тогда вызывается функцияqnx_proxy_attach() и создается представитель. Он накапливает в себе сообщения, которые должны быть доставлены другим процессам.
Любой процесс, знающий идентификатор представителя, может вызвать функцию Trigger(), после чего будет доставлено первое в очереди сообщение. Функция Trigger() может вызываться несколько раз, икаждый раз представитель будет доставлять следующее сообщение. При этом представитель содержит буфер, в котором может храниться до 65 535 сообщений.Как известно, механизм сигналов уже давно используется в операционных системах, в том числе и в UNIX.
Операционная система QNX также поддерживает множество сигналов, совместимых с POSIX, большое количество сигналов, традиционноиспользовавшихся в UNIX (поддержка этих сигналов требуется для совместимостис переносимыми приложениями, ни один из системных процессов QNX их не генерирует), а также несколько сигналов, специфичных для самой системы QNX.По умолчанию любой сигнал, полученный процессом, приводит к завершениюпроцесса (кроме нескольких сигналов, которые по умолчанию игнорируются).Но процесс с приоритетом уровня суперпользователя может защититься от нежелательных сигналов. В любом случае процесс может содержать обработчик длякаждого возможного сигнала.
Сигналы удобно рассматривать как разновидностьпрограммных прерываний.Редиректор прерываний является частью ядра и занимается перенаправлениемаппаратных прерываний в связанные с ними процессы. Благодаря такому подходу344Глава 10. Краткий обзор современных операционных системвозникает один побочный эффект — с аппаратной частью компьютера работаетядро, оно перенаправляет прерывания процессам — обработчикам прерываний.Обработчики прерываний обычно встроены в процессы, хотя каждый из них исполняется асинхронно с процессом, в который он встроен. Обработчик исполняется в контексте процесса и имеет доступ ко всем глобальным переменным процесса. При работе обработчика прерываний прерывания разрешены, но обработчикприостанавливается только в том случае, если произошло более высокоприоритетное прерывание.
Если это позволяется аппаратной частью, к одному прерыванию может быть подключено несколько обработчиков, каждый из которых получит управление при возникновении прерывания.Этот механизм позволяет пользователю избегать работы с аппаратным обеспечением напрямую и тем самым избегать конфликтов между различными процессами, работающими с одним и тем же устройством. Для обработки сигналов от внешних устройств чрезвычайно важно минимизировать время между возникновениемсобытия и началом непосредственной его обработки. Этот фактор существен влюбой области применения: от работы терминальных устройств до обработки высокочастотных сигналов.Блок планирования выполнения задач обеспечивает многозадачность.
В этом планеоперационная система QNX предоставляет разработчику огромный простор длявыбора той дисциплины выделения ресурсов процессора задаче, которая обеспечит наиболее подходящие условия для выполнения критически важных приложений, а обычным приложениям обеспечит такие условия, при которых они будутвыполняться за разумное время, не мешая работе критически важных приложений.К выполнению своих функций как диспетчера ядро приступает в следующих случаях:•какой-либо процесс вышел из блокированного состояния;•истек квант времени для процесса, владеющего центральным процессором;О работающий процесс прерван каким-либо событием.Диспетчер выбирает процесс для запуска среди неблокированных процессов в порядке значений их приоритетов в диапазоне от 0 (наименьший) до 31 (наибольший). Обслуживание каждого из процессов зависит от метода его диспетчеризации (приоритет и метод диспетчеризации могут динамически меняться во времяработы).
В QNX существуют три метода диспетчеризации:Q очередь (First In First Out, FIFO) — раньше пришедший процесс раньше обслуживается;•карусель (Round Robin, RR) — процессу выделяется определенный квант времени для работы, после чего процессор предоставляется следующему процессу;Q адаптивный метод (используется чаще других).Метод FIFO наиболее близок к невытесняющей многозадачности. То есть процессвыполняется до тех пор, пока он не перейдет в состояние ожидания сообщения,в состояние ожидания ответа на сообщение или не отдаст управление ядру. Припереходе в одно из таких состояний процесс помещается последним в очередь про-Сетевая операционная система реального времени QNX345цессов с таким же уровнем приоритета, а управление передается процессу с наибольшим приоритетом.В методе RR все происходит так же, как и в предыдущем, с той разницей, что период, в течение которого процесс может работать без перерыва, ограничивается неким квантом времени.Процесс, работающий в соответствии с адаптивным методом, ведет себя следующим образом:а если процесс полностью использует выделенный ему квант времени, а в системе есть готовые к исполнению процессы с тем же уровнем приоритета, его приоритет снижается на 1;О если процесс с пониженным приоритетом остается необслуженным в течениесекунды, его приоритет увеличивается на 1;Q если процесс блокируется, ему возвращается исходное значение приоритета.По умолчанию процессы запускаются в режиме адаптивной многозадачности.
В этомже режиме работают все системные утилиты QNX. Процессы, работающие в разныхрежимах многозадачности, могут одновременно находиться в памяти и исполняться. Важный элемент реализации многозадачности — приоритет процесса. Обычноприоритет процесса устанавливается при его запуске. Но есть дополнительная возможность, называемая вызываемым клиентом приоритетом. Как правило, она реализуется для серверных процессов (исполняющих запросы на какое-либо обслуживание). При этом приоритет процесса-сервера устанавливается только на времяобработки запроса и становится равным приоритету процесса-клиента.Сетевой интерфейс в операционной системе QNX является неотъемлемой частьюядра. Он, конечно, взаимодействует с сетевым адаптером через сетевой драйвер,но базовые сетевые службы реализованы на уровне ядра.
При этом передача сообщения процессу, находящемуся на другом компьютере, ничем не отличается с точки зрения приложения от передачи сообщения процессу, выполняющемуся на томже компьютере. Благодаря такой организации сеть превращается в однороднуювычислительную среду. При этом для большинства приложений не имеет значения, с какого компьютера они были запущены, на каком исполняются и куда поступают результаты их работы.Все службы операционной системы QNX, не реализованные непосредственно в ядре, работают как обычные стандартные процессы в полном соответствии с основными концепциями микроядерной архитектуры. С точки зрения операционнойсистемы эти системные процессы ничем не отличаются от всех остальных.
Как,впрочем, и драйверы устройств. Единственное, что нужно сделать, чтобы новыйдрайвер устройства стал частью операционной системы, — изменить конфигурационный файл системы так, чтобы драйвер запускался при загрузке.Основные механизмы организациираспределенных вычисленийQNX является сетевой операционной системой, которая позволяет организоватьэффективные распределенные вычисления. Для этого на каждой машине, называ-346Глава 10. Краткий обзор современных операционных системемой узлом, помимо ядра и менеджера процессов должен быть запущен уже упомянутый ранее менеджер Net.
Менеджер Net не зависит от аппаратной реализации сети. Эта аппаратная независимость обеспечивается за счет сетевых драйверов.В операционной системе QNX имеются драйверы для сетей с различными технологиями: Ethernet и FastEthernet, Arcnet, IBM Token Ring и др. Кроме того, имеется возможность организации сети через последовательный канал или модем.В QNX версии 4 полностью реализовано встроенное сетевое взаимодействие типа«точка-точка». Например, сидя за машиной А, вы можете скопировать файл с гибкого диска, подключенного к машине В, на жесткий диск, подключенный к машине С.