Что такое функционирование в «Реальном масштабе времени»
Download 1.86 Mb. Pdf ko'rish
|
Луканов А.С. Системы реального времени 2020
Neutrino
поддерживает два механизма: условные переменные (condvars ) и блоки взаимного исключения (mutexes). Для этих объектов микроядро поддерживает механизм наследования приоритетов. Реализация mutexes отличается высокой эффективностью. Получение или освобождение несвязанного объекта типа mutex требует выполнения всего одного кода. Для сравнения, в Windows NT эта операция может занимать время до 700 мс. Модель событий и средства обмена сообщениями. Модель событий Neutrino представляет собой еще одно значительное достижение этой системы. Учитывая сложность и многообразие форм событий и способов уведомления о них, реализация такой системы в каждой паре "клиент-сервер" может занять значительный объем кода и затруднить разработку надежной модели взаимодействия. Поэтому Neutrino использует другой подход, 81 называемый event steering, при котором сервер может передать микроядру форму уведомления клиента, которую он у него запросил. Практически нити получают уведомления от одного из трех типов источников: сообщение от другой нити, прерывание или таймер. События существуют в форме синхронных сообщений, асинхронных пульсов, Unix или POSIX-сигналов, прерываний, а также специального события ForceReady, вызывающего безусловный переход нити в состояние Ready без доставки какого- либо события. Механизм event steering работает следующим образом: • клиент посылает серверу сообщение, содержащее структуру с описанием желаемого механизма уведомления; • сервер регистрирует эту форму в микроядре и отвечает клиенту, выводя его из блокировки; • когда возникает необходимость в уведомлении клиента, сервер посылает ему сообщение, а микроядро транслирует его в заказанную форму. Сигналы в Neutrino поддерживаются в двух разновидностях: классические сигналы Unix и real-time сигналы POSIX, c которыми можно передавать короткую порцию данных (4 байт). Еще одно различие между ними заключается в том, что сигналы POSIX при поступлении к процессу буферизуются, пока какая-либо из нитей процесса не проявит к ним интерес. Neutrino расширяет семантику POSIX тем, что такое поведение можно заказать выборочно для любого сигнала, в том числе для стандартных сигналов Unix. Кроме того, Neutrino позволяет адресовать сигнал к конкретной нити внутри процесса, а не просто к процессу. Сообщения являются классическим механизмом QNX, который сохранился и в Neutrino, но несколько расширился и усложнился. Помимо синхронных сообщений Neutrino поддерживает короткие асинхронные сообщения, называемые "пульсами" (Pulses), позволяющие передать 4 байт данных и 82 реализованные на той же основе, что и сигналы POSIX. Пульсы представляют собой заменитель недостаточно гибкого механизма Proxy , применяемого в QNX. Введение полноценного понятия нитей потребовало также усложнения механизма передачи сообщений. Если в QNX процессы устанавливали виртуальный канал непосредственно друг с другом, то в Neutrino они должны использовать для этой цели Соединения (connections ) и Каналы (channels). Каналы используются нитями на стороне сервера, поскольку они необходимы для приема сообщений (но не для получения ответов на посланные сообщения). Соединения используются нитями клиентов для посылки сообщений или пульсов в каналы. Несколько нитей могут посылать сообщения в один канал, разделяя между собой одно соединение. При этом несколько нитей могут быть одновременно блокированы на канале. И соединения и каналы идентифицируются в программах числовыми идентификаторами, аналогично файловым дескрипторам и гнездам. Download 1.86 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling