Спустя несколько лет после того, как я приобщился к компьютерам, вышел в продажу первый IBM PC. Я был, наверное, одним из первых в Оттаве, кто купил этот ящик. В нем было 16Кб ОЗУ и не было видеокарты — неопытный продавец просто не знал, что без видеокарты машина будет абсолютно бесполезной. Впрочем, несмотря на бесполезность, на ящике было красиво написано «IBM» (а тогда такое можно было увидеть только на мэйнфреймах и им подобных), и это уже само по себе выглядело достаточно внушительно. Когда я наконец накопил денег на видеокарту, я смог даже запустить БЕЙСИК на телевизоре родителей. Для меня тогда все это было вершиной компьютерной технологии — особенно модем с акустической связью на 300 бод! А теперь представьте себе мою досаду, когда мне позвонил мой друг Пол Транли и сказал: «Эй, залогинься ко мне на компьютер?» Я подумал про себя: «А у него-то откуда VAX?» — поскольку из всех известных мне машин, на которые можно было «залогиниться», VAX была единственной, которая влезла бы в его дом. Я позвонил. Это был PC, работающий под загадочной операционной системой по имени «QUNIX», с номером версии меньше 1.00. Но там можно было сделать «login» — я был в шоке!
Что меня всегда поражало в операционных системах семейства QNX — это небольшой объем требуемой памяти, эффективность и абсолютная элегантность реализации. Я часто за едой развлекал (или утомлял, что более вероятно) приглашенных на ужин гостей своими баснями о программах, параллельно выполнявшихся на моей машине в подвале. Те, кто понимал в компьютерах, начинали прикидывать, какой у меня огромный диск, откуда у меня такой «неограниченный» объем ОЗУ, и т.п. После ужина я тащил их вниз, на мой этаж и показывал им свой простенький PC с 8Мб ОЗУ и винчестером на 70 Мб. На некоторых это действовало очень впечатляюще. Тем, на которых не действовало, я показывал, сколько ОЗУ и дискового пространства было еще доступно, при том что большую часть этого дискового пространства занимали мои собственные данные, которые я накопил за годы работы.
Прошли годы, и я имел счастье поработать во многих компаниях, большинство их которых так или иначе занимались разработкой под 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 — операционная система предыдущего поколения от компании 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
Сайт с официальными обновлениями QNX, демо-версиями программ третьих сторон и свободно-распространяемыми программами для QNX.
Телеконференции USENET:
comp.os.qnx
Телеконференция по QNX (главным образом QNX4, но поток информации по QNX/Neutrino постоянно увеличивается).
QNX Users Interactive Conferencing System — интерактивная система телеконференций службы технической поддержки QSSL Используйте клиента
telnet
, чтобы подключиться к quics.qnx.com
:
telnet quics.qnx.com
Там вы сможете создать себе учетную запись QUICS, а затем использовать
tin
(архаичная программа чтения новостей — прим. ред.) для участия в телеконференциях.
Вы также можете обратиться к QUICS через Интернет, на www.qnx.com.
(Справедливости ради следует отметить, что эта информация устарела — пока готовился перевод данной книги, QSSL изменила структуру технической поддержки. Старая добрая QUICS теперь — достояние истории; на ее место пришла более современная веб-ориентированная QNX Developers Network (QDN) — см.
http://qdn.qnx.com
, nntp://inn.qnx.com
, nntp://nntp.qnx.com
— прим. ред.)
Компания PARSE Software Devices была основана как организация, занимающаяся исследованиями и разработкой, выполняющая заказные работы и предоставляющая консультационные услуги для международного сообщества разработчиков. Наши основные направления:
• системная архитектура и проектирование;
• системы реального времени и встраиваемые системы;
• системное программирование;
• телефония/телекоммуникации/системы передачи данных;
• обучение персонала.
За информацией о заказных работах обращайтесь в компанию PARSE Software Devices по адресу
info@parse.com
.
Готовятся к выпуску новые книги — пожалуйста, пошлите запрос по по адресу
books@parse.com
, чтобы подписаться на нашу информационную рассылку. Отсутствие спама гарантируется. :-)
Отметим также, что данная книга доступна для корпоративного использования компаниями класса OEM, а также он-лайн — обращайтесь по адресу
books@sparse.com
для получения дополнительной информации.
Роб Кёртен выполнял (в основном контрактные) работы в области встраиваемых систем в течение более чем 13 лет, и занимался системным программированием на протяжении более 18 лет. За период работ по трехлетнему контракту с QSSL он разработал и преподавал учебные курсы «Программирование задач реального времени для ядра Neutrino» и «Написание администраторов ресурсов». Он также написал прототип администратора сети QNX/Neutrino (
npi-qnet
), а также часть учебного пособия «Построение встраиваемых систем» («Building Embedded Systems», поставляется в комплекте документации к QNX/Neutrino — прим. ред.).
Предыдущая книга Роба, «Введение в QNX 4: Руководство по программированию приложений реального времени» была удостоена Почетной премии («Award of Merit») Общества технических коммуникаций (Society for Technical Communications;
http://www.stc.org
).
Недавно он выполнял контрактную работу по заказу компании Cisco Systems Inc., в которой он разрабатывал системную архитектуру (проектирование и программирование) семейства продуктов Cisco GSR-12000 (Gigabit Switch Router — гигабитный коммутирующий маршрутизатор).
Роб имеет широкий круг интересов — от компьютерной музыки и графики до виртуальных файловых систем. Он также заядлый коллекционер машин серии PDP-8. Если у вас есть что-нибудь от PDP-8 — детали, документация или еще что — пожалуйста, пришлите ему весточку на
rk@parse.com
? Вы также можете посмотреть его домашнюю страничку по адресу http://www.parse.com/~rk/
, чтобы увидеть, что он из себя представляет (на этой неделе :-).
По истечении почти четырех лет работы в технической издательской группе QSSL Крис решил, что пришло время создать что-нибудь свое. Объединив свои навыки технического писателя, редактора и программиста, он создал компанию Arcane Dragon Software (что-то типа «Программного обеспечения таинственного дракона» — прим. ред.).
Компания Arcane Dragon Software (
http://home.beoscentral.com/chrish/ads/
) предоставляет следующие услуги:
• написание и редактирование технической литературы;
• программирование на С, С++ и Python для BeOS (см.
http://www.be.com
), QNX4, QNX/Neutrino и Linux;
• создание интерфейсов пользователя.
Крис — лауреат премии BeOS Masters Outstanding Contribution Award («За выдающиеся заслуги», одной из двух вообще когда- либо врученных) и обладатель трех высших наград Сообщества технических коммуникаций (две Почетных премии («Award of Merit») и одна Премия за мастерство («Award of Excellence»). Он также был техническим редактором книги Роба Кёртена «Введение в ОС QNX 4» (издательство PARSE), книги Мартина Броуна «BeOS: Перенос UNIX-приложений» (издательство Morgan-Kauffman) и книги Скота Хакера «Библия BeOS» (издательство Peachpit).
Появление данной книги было бы невозможным без помощи и поддержки моих коллег, которые щедро одаривали меня своими многочисленными предложениями и комментариями. Это: Люк Базинет (Luc Bazinet), Джеймс Чанг (James Chang), Дэн Додж (Dan Dodge), Дейв Донахо (Dave Donaho), Мария Годфри (Maria Godfrey), Майк Хантер (Mike Hunter), Прадип Кафейл (Pradeep Kathail), Стив Марш (Steve Marsh), Дэнни Н. Прайэри (Danny N. Priarie) и Эндрю Вернон (Andrew Vernon).
Особую благодарность я хотел бы выразить Брайену Стечеру (Brian Stecher), который терпеливо и внимательно рассмотрел не менее трех черновых вариантов данной книги, а также Питеру Ван Дер Вину (Peter van der Veen), который провел много ночей в моем доме (был подкуплен пивом и пиццей), выдавая мне тайны функционирования администраторов ресурсов QNX/Neutrino.
Спасибо Ким Фрейзер (Kim Fraser) за уже вторую прекрасную обложку для моей книги.
Отдельное спасибо Джону Острандеру (John Ostander) за его превосходные предложения по грамматике и внимательное чтение корректуры :-).
И, конечно, особую благодарность я хочу выразить моему редактору, Крису Херборту — за то, что он нашел время редактировать эту книгу, помогать мне иногда с применением мрачных SGML/LaTeX, умудряясь при этом еще делать дюжину вещей одновременно! («Ну я же тебя просил напомнить мне, чтобы я не делал так больше!» — цитата из Криса.)
Я также хотел бы выразить глубокую благодарность за поддержку и понимание моей жене Кристине за то, что она каждый раз терпела мое многочасовое торчание в подвале с полнейшим ее игнорированием!
В тексте данной книги для обеспечения различимости технической терминологии используется ряд типографских соглашений. В целом, примененные здесь стандарты оформлении текстового материала соответствуют таковым в публикациях документов POSIX. Ниже в таблице приведены образцы принятых типографских соглашений.
Тип текста | Пример оформления |
---|---|
Тексты программ |
|
Опции команд |
|
Команды |
|
Переменные окружения | PATH |
Файлы и имена путей |
|
Имена функций | exit() |
Комбинации клавиш | Ctrl-Alt-Del |
Клавиатурный ввод |
|
Клавиши | Enter |
Вывод программ |
|
Именованные константы | NULL |
Типы данных |
|
Литералы |
|
Имена переменных | stdin |
Этот значок указывает на что-либо важное или полезное в тексте книги.