Прошли годы, и я имел счастье поработать во многих компаниях, большинство их которых так или иначе занимались разработкой под QNX (телекоммуникации, управление производством, драйверы устройств видеозахвата, и т.д.), и где основным требованием была простота — как идеи, так и воплощения. Мне думается, что это требование вытекало из хорошего понимания идеологии QNX главными инженерами проектов — если в основе проекта лежит стройная, изящная архитектура, то велика и вероятность того, что и весь проект в целом будет стройным и изящным (если, конечно, проблема сама по себе не корявая).
В ноябре 1995 года мне улыбнулось счастье работать непосредственно на QNX Software Systems Limited (QSSL), разрабатывая учебные материалы для двух курсов по QNX/ Neutrino, а затем и преподавая эти курсы в течение более чем трех последующих лет.
Именно последние 19 или около того лет моей работы дали мне вдохновение и смелость написать мою первую книгу, «Введение в QNX 4: Руководство по программированию приложений реального времени», которая была издана в мае 1998 года. В данной, новой книге по QNX/Neutrino я надеюсь изложить ряд накопленных мной на личном опыте концепций и идей, чтобы дать вам четкое, фундаментальное восприятие того, как работает QNX/Neutrino, и как ее можно эффективно применять. Хочется верить, что после прочтения этой книги в вашей голове вдруг включится лампочка, и вы воскликнете: «Ага! Так вот почему они сделали это именно так!»
Компания QSSL, разработавшая операционную систему QNX, была создана в 1980 году Дэном Доджом и Гордоном Беллом (оба — выпускники университета Ватерлоо, расположенного в Онтарио, Канада). Сначала компания называлась Quantum Software Systems Limited, а ее продукт назывался «QUNIX» («Quantum UNIX»). После вежливого письма адвокатов компании
AT&T (которой в то время принадлежала торговая марка «UNIX»), имя продукта изменили на «QNX». Спустя некоторое время изменили и название самой компании — на «QNX Software Systems Limited» — поскольку в те дни казалось, что у всех и у каждого и у их собак были компании по имени «Quantum что-то» или как-нибудь в этом духе.
Первый программный продукт, получивший коммерческий успех, назывался просто «QNX» и работал на процессорах 8088 серии. Затем, в начале 80-х, была выпущена операционная система «QNX2» (QNX, версия 2). Она до сих пор успешно применяется во многих ответственных приложениях. Примерно в 1991 году появилась новая операционная система, «QNX4», с улучшенной поддержкой 32-разрядных операций и стандарта POSIX. И, наконец, в 1995 году была заявлена новая модификация ОС семейства QNX, называемая QNX/Neutrino.
(Несмотря на то, что термином «Neutrino» часто называют саму ОС (сам Роб, кстати, тоже грешит этим), это не так. Neutrino — имя микроядра, а не всей ОС в целом; QNX/Neutrino была названа так, потому что является версией QNX, основанной на микроядре Neutrino. Впоследствии, после выхода пакета QNX Realtime Platform, чтобы не вносить путаницы, ОС QNX/Neutrino стали называть просто QNX6. — прим. ред.)
Данная книга подойдет любому желающему получить фундаментальное понимание ключевых особенностей QNX/Neutrino и принципов ее функционирования. Из этой книги смогут почерпнуть многое даже читатели с небольшим компьютерным образованием (хотя обсуждение в каждой главе, по мере продвижения вперед, становится все более и более техническим). Даже бывалые хакеры смогут почерпнуть из этой книги кое-какие интересные приемы, особенно касательно двух фундаментальных черт QNX/Neutrino — обмена сообщениями и структурной организации драйверов.
Я попытался объяснять сложный материал в легкой для чтения «диалоговой» манере, предвидя некоторые резонные вопросы, которые могли бы возникать по ходу дела, и отвечая на них с примерами и рисунками. Поскольку книга не требует глубокого понимания языка Си, но знание его определенно даст преимущество, в тексте книги есть также и непосредственно примеры программ.
Данная книга призвана рассказать читателю, что представляет из себя и как работает QNX/Neutrino. Главы книги содержат описание состояний процессов, потоков, алгоритмов диспетчеризации, обмена сообщениями, модульной концепции построения ОС, и так далее. Если вы ранее никогда не применяли QNX/Neutrino, но знакомы с операционными системами реального времени, то вам, возможно, захочется уделить особое внимание главам, посвященным обмену сообщениями и администраторам ресурсов, так как именно эти концепции составляют основу QNX/Neutrino.
В этой главе представлено описание процессов и потоков в QNX/ Neutrino, диспетчеризации, системы приоритетов, и дано понятие о реальном времени. Вы узнаете о состояниях потоков и алгоритмах диспетчеризации, которые применяются в QNX/ Neutrino, а также изучите функции, применяемые для управления диспетчеризацией, создания процессов и потоков, а также изменения свойств процессов и потоков, которые уже выполняются. Вы увидите, как в QNX/Neutrino реализована поддержка SMP и все вытекающие из этого как преимущества, так и подводные камни.
В разделе «Диспетчеризация и реальный мир» обсуждается, диспетчеризуются потоки в работающей системе, и что может вызвать перепланирование.
В данной главе вы ознакомитесь с наиболее яркой и фундаментальной особенностью QNX/Neutrino — принципом обмена сообщениями. Вы изучите, что такое обмен сообщениями, как его применять для общения потоков между собой, и как обмениваться сообщениями по сети. Также в этой главе рассмотрен ряд дополнительных вопросов, включая извечное проклятие систем реального времени — инверсию приоритетов.
Это одна из самых важных глав в книге!
Часы, таймеры и периодические уведомления
В этой главе вы изучите системные часы, таймеры, и как заставить таймеры посылать вам сообщения. В ней также много практических советов и изобилие примеров кода.
В этой главе вы научитесь писать обработчики прерываний для QNX/Neutrino и узнаете, как обработчики прерываний влияют на диспетчеризацию потоков.
В этой главе вы изучите все, что относится к администраторам ресурсов в QNX/Neutrino (также известным как «драйверы устройств» и «администраторы ввода-вывода»). Перед написанием своего собственного администратора ресурса вам необходимо будет внимательно изучить главу «Обмен сообщениями». В главе также приведены исходные тексты нескольких готовых администраторов ресурсов.
Администраторы ресурсов — еще один важный компонент любой системы на базе QNX/Neutrino.
Переход с QNX4 на QNX/Neutrino
Неоценимое руководство для всех, кто намерен переносить свои приложения из QNX4 в QNX/Neutrino или писать программы для обеих платформ сразу. (QNX4 — операционная система предыдущего поколения от компании QSSL, а также тема моей предыдущей книги — «Введение в QNX4».) Даже если вы разрабатываете новое приложение, у вас может быть необходимость поддерживать QNX4 и QNX/Neutrino одновременно — если это так, то эта глава поможет вам избежать стандартных подводных камней и написать программу так, чтобы она была переносима в обе операционные системы.
Куда обращаться, если вы зашли в тупик, нашли ошибку или когда вам просто нужен добрый совет.
Здесь дается толкование ряда используемых в книге терминов.
Другие источники информации
В дополнение к специализированному интерфейсу ядра, в QNX/Neutrino также реализованы многие промышленные стандарты. Это позволяет вам подкармливать ваших любимых издателей, покупая литературу по стандартным функциях ANSI, POSIX, TCP/IP и т.д.
Источники информации в Интернет
Веб-сайты:
http://www.parse.com/
Веб-сайт компании PARSE Software Devices. Информацию об опечатках в данной книге и примеры кода из нее доступны по адресу: http://www.parse.com/book_v3/index.html.
http://www.qnx.com/
Сайт компании QSSL; здесь вы найдете всю самую свежую информацию о QNX/Neutrino. (QSSL сейчас зарегистрировала еще несколько URL в домене qnx.com, см. get.qnx.com, qdn.qnx.com, betas.qnx.com, partners.qnx.com — прим. ред.)
http://search.yahoo.com/bin/search?p=QNX
Ищите на Yahoo! Это ссылка на Интернет-каталог QNX-ресурсов.
FTP-сайты:
ftp://ftp.parse.com
FTP-сайт компании PARSE Software Devices. Здесь можно скачать примеры исходных текстов, приведенных в этой книге, в удобном архивном формате.
ftp://ftp.qnx.com