QNX/UNIX: Анатомия параллелизма

QNX/UNIX: Анатомия параллелизма

Владимир Зайцев , Егор Горошко , Олег Иванович Цилюрик

Описание

Эта книга посвящена программистам, работающим с ОС UNIX. Она углубленно рассматривает параллельные вычисления, делая акцент на потоках (threads) и их возможностях. На реальных примерах кода показаны преимущества и приемы параллельной организации вычислений. Книга доступна для начинающих, требуя лишь базовое знание C/C++ и понимание многозадачных ОС UNIX. Используя QNX в качестве платформы, книга демонстрирует специфику микроядерной архитектуры и универсальные POSIX-механизмы. Она будет полезна и тем, кто не использует QNX, но работает с Linux, FreeBSD, NetBSD или Solaris. Книга содержит примеры кода, тесты, и анализирует нюансы реализации POSIX-механизмов в QNX и других ОС. В ней рассматриваются вопросы синхронизации, использования потоков, и другие аспекты параллельного программирования. Книга поможет разобраться в тонкостях параллелизма в современных операционных системах.

<p>QNX/UNIX</p><p>Анатомия параллелизма</p><p>Олег Цилюрик, Егор Горошко</p><p>Предисловие</p>

Зачем написана эта книга и кому она предназначена? Различные аспекты построения программных приложений для операционной системы реального времени QNX, родственные тем, которые мы обсуждаем в данном издании, весьма обстоятельно описаны в литературе. Это и основополагающие труды Э. Дейкстры [10] и других авторов, и общая литература по POSIX (Portable Operating System Interface) и ОС UNIX [2, 3, 5–7]. Другие, сугубо специфические аспекты для ОС QNX, такие как обмен сообщениями микроядра, построение менеджеров ресурсов, пулы потоков и еще ряд других приятных вещей, прекрасно описаны в книге Р. Кертена [1].

Однако все эти источники имеют ряд недостатков:

• Техническая документация по QNX, тщательно описывающая API и детали реализации, оставляет в стороне (возможно, как относительно известные) общие вопросы построения параллельных приложений и их взаимодействия.

• Несмотря на наличие множества кратких примеров кода по использованию отдельныхвызовов API, в технической документации явно недостаточно примеров их применения в логической последовательности и организации их совместного взаимодействия.

• Издания по UNIX, посвященные общим вопросам, напротив, изобилуют образцами кода, но в силу объективных причин, связанных с длительностью издательского процесса, не отображают новые механизмы, появившиеся в стандартах начиная с конца 90-х годов.

• И наконец, подавляющее большинство переводных книг по программированию для UNIX рассчитано на начальный уровень. Счастливое исключение — книги У. Стивенса, которые мы с удовольствием используем сами и рекомендуем читателям.

В итоге возник замысел написать книгу, в которой будет подведен итог некоторого периода нашего собственного использования ОС QNX и которая будет насыщена примерами в виде законченных проектов или отдельных фрагментов кода. Для удобства читателей *.tgz-архив описываемых в книге приложений размещен по адресу http://www.symbol.ru/library/qnx-unix/pthread.tgz, что позволит полноценно работать с текстом.

По большей части проекты трансформировались из реальных задач, из которых исключалась вся специфика конкретного заказа, только затуманивающая смысл примера. Многие примеры программного кода и приложения подготовлены так, что несут двойную нагрузку: они построены как тесты тех или иных механизмов ОС и, иллюстрируя рассматриваемые аспекты, одновременно позволяют получить численные характеристики тестируемых параметров. Этим книга существенно отличается от технической документации и описательных статей по QNX, которые не слишком богаты численными показателями, подтверждающими то, о чем в них говорится.

Первоначально предполагалось создать достаточно компактный текст, систематизирующий механизмы, итак хорошо известные и понятные… Но по ходу работы объем материала, который необходимо было хотя бы затронуть, начал разрастаться как снежный ком: уточнение незначительного вопроса порождало два новых и часто гораздо более существенных, чем первоначальный; начали «вылезать» несоответствия документации и результатов тестирования; слабо связанные, на первый взгляд, механизмы (например, примитивы синхронизации POSIX и сигналы UNIX) при перекрестном взаимодействии порождают такие эффекты, которые просто нельзя оставить без внимания.

Для того чтобы хоть как-то бороться с лавинным нарастанием объема, было принято решение выделить те механизмы, программные техники и элементы API, которые наиболее слабо затронуты в литературных источниках, и рассматривать их с максимально возможной обстоятельностью (это относится, например, к базовой форме вызова spawn). Напротив, те элементы, которые достаточно детально описаны и обсуждены или интуитивно понятны (например, все семейство вызовов [1], производных от spawn), лишь поверхностно перечисляются (даже если позже в примерах кода мы и используем именно эти формы). В конце концов, мы не собирались пересказывать техническую документацию QNX, а хотели детально рассмотреть тонкие механизмы и их несоответствия (между собой или с изложением в документации) на работающих образцах кода.

При написании этого материала нам не были доступны никакие внутренние или специфические материалы разработчиков, кроме официальной технической документации ОС QNX, общедоступной литературы, информации, циркулирующей в Интернете в обсуждениях QNX-сообществ (в первую очередь http://qnx.org.ruи http://qnxclub.net), и контактов с коллегами-разработчиками. Многие тонкие детали приходилось восстанавливать путем тестирования и последующего толкования наблюдаемых результатов.

Похожие книги

Основы программирования в Linux

Татьяна Коротяева, Нейл Мэтью

В четвертом издании книги "Основы программирования в Linux" вы найдете подробное руководство по программированию в операционной системе Linux. Книга охватывает использование библиотек C/C++, системных вызовов, файлового ввода/вывода, взаимодействия процессов, программирования командной оболочки и создания графических интерфейсов с помощью GTK+ или Qt. Вы узнаете, как компилировать, компоновать программы с библиотеками и работать с терминальным вводом/выводом. Учебник также содержит практические советы по написанию приложений для GNOME и KDE, хранению данных с использованием MySQL и отладке программ. Четкая структура и понятные примеры делают процесс обучения быстрым и эффективным. Идеально подходит для начинающих Linux-программистов, стремящихся освоить основы программирования в этой мощной операционной системе.

1001 совет по обустройству компьютера

Юрий Всеволодович Ревич

Это практическое руководство, обобщающее советы по решению проблем, возникающих при использовании компьютеров, от нетбуков до настольных моделей. Охватывает аппаратное обеспечение, компьютерные сети, установку и настройку ОС Windows, работу в интернете и защиту от вирусов. Книга содержит не только готовые решения, но и ответы на вопросы, возникающие до покупки компьютера. Приведен необходимый минимум технических сведений для осознанного выбора. Идеально подходит для начинающих пользователей и тех, кто хочет углубить свои знания в области компьютерной техники.

Искусство программирования для Unix

Эрик Стивен Реймонд

Эта книга не просто руководство по Unix, а исследование его философии и культуры. Она не ориентирована на технические подробности, а на понимание "почему это следует сделать", а не "как". Автор, Эрик Стивен Реймонд, обращается к опыту ведущих разработчиков Unix, чтобы показать, как коллективная культура и традиции влияют на создание эффективных и устойчивых программ. Книга разделена на четыре части: Контекст, Проектирование, Реализация и Сообщество. Каждый раздел раскрывает различные аспекты Unix-культуры, от истории и философии до практических рекомендаций для программистов. Книга подходит для тех, кто хочет понять не только "как", но и "почему" Unix-программирование так эффективно. Понимание принципов проектирования, заложенных в Unix, поможет вам создавать более качественные и гибкие программы.

Access 2002: Самоучитель

Павел Юрьевич Дубнов

Данный самоучитель посвящен работе с программой Access 2002, мощным инструментом для создания баз данных. Книга детально описывает процесс проектирования таблиц, форм, отчетов, запросов и модулей в Access 2002. Вы научитесь создавать интегрированные базы данных, конвертировать данные из других систем (Clarion, FoxPro), и формировать запросы с использованием SQL, VBA и макросов. Работа с базами данных без установки на компьютер с помощью ODBC также подробно рассмотрена. Книга полезна для специалистов, занимающихся разработкой баз данных и приложений, а также для студентов, изучающих информатику. Практические примеры и подробные объяснения помогут вам быстро освоить Access 2002.