ЖУРНАЛ СТА №1/2000
ОБ ЗО Р / П Р О Г Р АММНО Е ОБ Е С П Е Ч Е НИ Е 34 QNX/Neutrino. Если уп- равление получает по- ток, отличный от теку- щего, то производится переключение контекста активной задачи. Пере- ключение контекста производится в том слу- чае, если текущий поток блокируется (например, в результате вызова функции ожидания со- общений), добровольно передает управление (на- пример, посредством вызова функции sched_yield()), или если в системе существует по- ток, выполнение которо- го по ряду причин явля- ется более предпочти- тельным (рис. 3). Каждый поток имеет определенный приоритет от 0 (наименьший) до 31 (наивысший). QNX/Neutrino выбирает для выполнения поток, готовый к вы- полнению (незаблокированный) и имеющий наивысший приоритет. Для обеспечения большей гибкости при перераспределении процессорно- го времени QNX/Neutrino использует 3 алгоритма диспетчеризации для каж- дой очереди потоков с одинаковым приоритетом: ● FIFO, ● Roundrobin, ● адаптивный алгоритм. Поток может установить для себя любой из данных алгоритмов, однако он будет применяться в том случае, ес- ли существует хотя бы еще один поток с таким же приоритетом и данным ал- горитмом диспетчеризации. Перерас- пределение времени процессора, со- гласно одному из приведенных алго- ритмов, нарушается в том случае, если поток с боль- шим приоритетом становит- ся готовым к выполнению, в этом случае он немедленно получает управление, преры- вая выполнение менее при- оритетного потока. Алгорит- мы FIFO и Roundrobin в комментариях не нуждаются. Адаптивный алгоритм дис- петчеризации подразумевает следующее: ● если поток исчерпал выде- ленный ему интервал вре- мени, то его приоритет по- нижается на 1 при условии, что существует готовый к выполне- нию поток с таким же приоритетом; ● если поток переходит в заблокиро- ванное состояние, то его приоритет восстанавливается до первоначаль- ного значения. У ПРАВЛЕНИЕ АППАРАТНЫМИ ПРЕРЫВАНИЯМИ QNX/Neutrino полностью обеспечи- вает управление аппаратными прерыва- ниями. Для обработки прерывания приложению требуется привязать необ- ходимую функцию обработки к иско- мому прерыванию, используя вызовы ядра. Данный обработчик прерывания не содержит кода, связанного с аппа- ратной реализацией прерывания (вход в прерывание, выход из прерывания, со- хранение текущего контекста), и ничем не отличается от обычной функции. К одному прерыванию может быть привязано несколько обработчиков, получающих управление в соответст- вии с приоритетами потоков, которым они принадлежат. С ОСТАВ ОС QNX/N EUTRINO В операционную систему QNX/Neutrino наряду с микроядром Neutrino входят следующие компонен- ты: ● менеджер процессов — procnto; ● менеджеры файловых систем — ioblk, fsnfs, fscifs; ● менеджеры символьных устройств; ● графический интерфейс пользовате- ля — Photon; ● менеджер очередей; ● менеджер TCP/IP. Модуль procnto (рис. 4) служит для поддержки определенных POSIXпро- цессов, каждый из которых может со- держать множество потоков. Менед- жер процессов добавляет к функциям, обеспечиваемым ядром, три новые: ● управление процессами — создание, уничтожение процессов и управле- ние их атрибутами; ● управление памятью — обеспечение различных механизмов защиты па- мяти, поддержка разделяемых биб- лиотек и работа с общей памятью для межпроцессного взаимодействия; ● управление пространством имен, ис- пользуемым менеджерами ресурсов. Ф АЙЛОВЫЕ СИСТЕМЫ QNX/N EUTRINO QNX/Neutrino поддерживает не- сколько типов файловых систем. Каж- дому типу файловой системы соответ- ствует свой менеджер, который может быть запущен или выгружен в любой момент времени. Файловая система QNX наряду с вы- сокой производительностью обеспе- чивает необходимый уровень надеж- ности. СТА 1/2000 www.cta.ru Рис. 4. Модульность архитектуры QNX/Neutrino позволяет легко добавлять любые модули для поддержки устройств Рис. 3. Состояния и приоритеты нитей в очереди
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy