Олег Цилюрик - QNX/UNIX - Анатомия параллелизма

Здесь есть возможность читать онлайн «Олег Цилюрик - QNX/UNIX - Анатомия параллелизма» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2006, ISBN: 2006, Издательство: Символ-Плюс, Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

QNX/UNIX: Анатомия параллелизма: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «QNX/UNIX: Анатомия параллелизма»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

QNX/UNIX: Анатомия параллелизма — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «QNX/UNIX: Анатомия параллелизма», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

received signal 39 code = -2 val = 0

received signal 39 code = -2 val = 1

Для них реакция никак не отличается от реакции на другие сигналы, что, впрочем, неудивительно, учитывая замечание в цитировавшемся выше фрагменте документации о том, что возбуждение сигнала и посылка импульса (сообщения) микроядра в QNX — одно и то же, и обрабатываются они единым механизмом.

Посмотрим также реакцию системы на специальные сигналы QNX, номера которых выше SIGRTMAX(в исследуемый диапазон опять для сравнения включим как специальные сигналы (57…64), так и сигналы из диапазона 1… SIGRTMAX):

# ./s5 -b56 -e59 -n2

signal SIGRTMIN=41 - signal SIGRTMAX=56

set signal handler... Invalid argument

set signal handler... Invalid argument

set signal handler... Invalid argument

CHILD: signal mask set

signal sent: 56 with val = 0

signal sent: 56 with val = 1

signal sent: 57 with val = 0

signal sent: 57 with val = 1

signal sent: 58 with val = 0

signal sent: 58 with val = 1

signal sent: 59 with val = 0

signal sent: 59 with val = 1

PARENT: finished!

# CHILD: signal unblock

received signal 56 code = -2 val = 0

received signal 56 code = -2 val = 1

Из вывода видно, что на сигнал с номером 56 реакция ожидаемая, а на остальные сигналы реакции нет вовсе. Как и следует из предупреждения в документации, заблокировать или изменить реакцию на эти сигналы невозможно, и попытка установки sigaction()для них завершается ошибкой.

Таким образом, система фактически никак не выделяет сигналы диапазона реального времени (41…56), но обрабатывает аналогичным образом и стандартные сигналы UNIX (1…31), и специальные сигналы QNX (57…64), и даже сигналы, никак не специфицируемые системой вообще (32…40). Корректнее говорить не об обработке сигналов реального времени и даже не о модели сигналов реального времени, а об еще одном способе работы с любыми сигналами - обработке сигналов на базе очередей сигналов.

Примечание

Для полноты картины приведем конкретную спецификацию типа siginfo_tдля QNX (выше мы рассматривали минимальную спецификацию этого типа, требуемую POSIX). Спецификация весьма объемна (вся информация до конца раздела может быть безболезненно пропущена теми, кому это неинтересно), но предоставляет программисту исчерпывающую информацию о полученном сигнале:

typedef struct {

int si_signo;

int si_code; /* if SI_NOINFO, only si_signo is valid */

int si_errno;

union {

int __pad[7];

struct {

pid_t __pid;

union {

struct {

uid_t __uid;

union sigval __value;

} kill; /* si_code <= 0 SI_FROMUSER */

struct {

_CSTD clock_t __utime;

/* CLD_EXITED status, else signo */

int _status;

_CSTD clock_t __stime;

} __chld;

/* si_signo=SlGCHLD si_code=CLD_* */

} __pdata;

} __proc;

struct {

int __fltno;

void* __fltip;

void* __addr;

} fault; /* si_signo=SIGSEGV,ILL,FPE,TRAP,BUS */

} __data;

} siginfo_t;

#define si_pid __data.__proc.__pid

#define si_value __data.__proc.__pdata.__kill.__value

#define si_uid __data.__proc.__pdata.__kill.__uid

#define si_status __data.__proc.__pdata.__chld.__status

#define si_utime __data.__proc.__pdata.__chld.__utime

#define si_stime __data.__proc.__pdata.__chld.__stime

#define si_fltno __data.__fault.__fltno

#define si_trapno si_fltno

#define si_addr __data.__fault.__addr

#define si_fltip __data.__fault.__fltip

И полный перечень определений символьных констант, используемых для установки значений поля si_code:

#define SI_USER 0

#define SI_RESERVED1 (-1)

#define SI_QUEUE (-2)

#define SI_TIMER (-3)

#define SI_ASYNCIO (-4)

#define SI_MESGQ (-5)

#define SI_NOTIFY (-6)

#define SI_IRQ (-7)

// QNX managers will never use this range.

#define SI_MINAVAIL (-128)

#define SI_MAXAVAIL (-64)

#define SI_NOINFO 127

#define SI_MAXSZ 126

Значение SI_QUEUE, равное -2, — это и есть то значение, которое мы видели в выводе тестовой задачи выше.

Соображения производительности

Ранее мы производили оценку затрат производительности процессора на переключение между контекстами для процессов и для потоков (тестовые задачи, которые мы по их структуре именовали как «симметричные»). Проделаем теперь то же самое, но синхронизацию процессов выполним посылкой и приемом сигнала (переключение контекстов будет происходить именно на операторе pause()— переходе к приему сигнала) ( файл p6s.cc ):

Затраты на переключение процессов посылкой сигналов

#include

#include

#include

#include

#include

#include

#include

// "пустые" обработчики сигналов

static void nhand(int signo) {}

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «QNX/UNIX: Анатомия параллелизма»

Представляем Вашему вниманию похожие книги на «QNX/UNIX: Анатомия параллелизма» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «QNX/UNIX: Анатомия параллелизма»

Обсуждение, отзывы о книге «QNX/UNIX: Анатомия параллелизма» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x