Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Назовите известные вам функции для запуска дочерних процессов в QNX Neutrino




QNX поддерживают три примитива создания процесса:

• fork(); • exec(); • spawn().

Примитивы fork() и exec() определены стандартом POSIX, а примитив spawn() реализован только в QNX.

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

Примитив exec() Примитив exec() заменяет вызвавший процесс новым. После успешного вызова exec() возврата не происходит, т.к. образ вызывающего процесса заменяется образом нового процесса. Обычной практикой в POSIX-системах для создания нового процесса - без удаления вызывающего процесса - является сначала вызовfork(), а затем вызов exec() из порожденного процесса.

Примитив spawn() Примитив spawn() создает новый процесс как потомок вызывающего процесса. С его помощью можно избежать вызовов fork() и exec(), используя более быстрый и эффективный способ создания новых процессов. В отличие от fork() и exec(), которые по своей природе выполняются на том же самом узле, что и вызывающий процесс, примитив spawn() может создавать процессы на любом узле сети.

178. Какие характеристики дочерних потоков можно задавать при их создании с помощьюатрибутов?

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

Наследуемый параметр fork() exec() spawn()

Идентификатор процесса нет да нет

Открытые файлы да по выбору* по выбору

Блокировка файлов нет да нет

Ожидающие сигналы нет да нет

Маска сигналов да по выбору по выбору

Игнорируемые сигналы да по выбору по выбору

Обработчики сигналов да нет нет

Переменные окружения да по выбору по выбору

Идентификатор сеанса да да по выбору

Группа процесса да да по выбору

Реальные UID, GID да да да

Эффективные UID, GID да по выбору по выбору

Текущий рабочий каталог да по выбору по выбору

Маска создания файлов да да да

Приоритет да по выбору по выбору

Алгоритм диспетчеризации да по выбору по выбору

Виртуальные каналы нет нет нет

Символьные имена нет нет нет

таймеры реального времени нет нет нет

*по выбору: вызывающий процесс может по необходимости выбрать - да или нет.

179. Что вы можете рассказать про использование сигналов?

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

QNX поддерживает большой набор сигналов, соответствующих стандарту POSIX, кроме того, сигналы, исторически присущие некоторым UNIX-системам, и ряд сигналов, уникальных для QNX.

Как породить сигнал

Считается, что сигнал доставлен процессу тогда, когда выполняется определенное в процессе для данного сигнала действие. Процесс может посылать сигнал самому себе.

Если вы хотите: Используйте:

Породить сигнал из командной строки Утилиты: kill и slay

Породить сигнал внутри процесса Функции Си: kill() и raise()

Получение сигналов

Процесс может принять сигнал одним из трех способов, в зависимости от того, как в процессе определена обработка сигналов:

• если процесс не определил никаких специальных мер по обработке сигнала, то выполняется предусмотренное для сигнала действие по умолчанию - обычно таким действием по умолчанию является завершение работы процесса;

• процесс может игнорировать сигнал. Если процесс игнорирует сигнал, то сигнал не оказывает на процесс никакого воздействия (учтите, что SIGCONT, SIGSTOP и SIGKILL не могут быть игнорированы в обычных обстоятельствах);

• процесс может предусмотреть обработчик сигнала - функцию, которая будет вызываться при приеме сигнала. Если процесс содержит обработчик для какого-либо сигнала, говорят, что процесс может "поймать" этот сигнал. Любой процесс, который "ловит" сигнал, фактически получает особый вид программного прерывания. Никакие данные с сигналом не передаются.

В промежутке времени между моментом, когда сигнал порожден, и моментом, когда он доставлен, сигнал называется ожидающим. Для процесса ожидающими одновременно могут быть несколько различных сигналов. Сигналы доставляются процессу, когда планировщик ядра делает этот процесс готовым к выполнению. Процесс не должен строить никаких предположений относительно порядка, в котором будут доставлены ожидающие сигналы.

Перечень сигналов

Сигнал: Описание:

SIGABRT Сигнал ненормального завершения, порождается функцией abort().

SIGALRM Сигнал тайм-аута, порождается функцией alarm().

SIGBUS Указывает на ошибку контроля четности оперативной памяти (особая для QNX интерпретация). Если во время выполнения обработчика данного сигнала произойдет вторая такая ошибка, то процесс будет завершен.

SIGCHLD Завершение порожденного процесса. Действие по умолчанию - игнорировать сигнал.

SIGCONT Если процесс в состоянии HELD, то продолжить выполнение. Действие по умолчанию - игнорировать сигнал, если процесс не в состоянии HELD.

SIGDEV Генерируется, когда в Менеджере устройств происходит важное и запрошенное событие.

SIGFPE Ошибочная арифметическая операция (целочисленная или с плавающей запятой), например, деление на ноль или операция, вызвавшая переполнение. Если во время выполнения обработчика данного сигнала произойдет вторая такая ошибка, то процесс будет завершен.

SIGHUP Гибель процесса, который был ведущим сеанса, или зависание управляющего терминала.

SIGILL Обнаружение недопустимой аппаратной команды. Если во время выполнения обработчика данного сигнала произойдет вторая такая ошибка, то процесс будет завершен.

SIGINT Интерактивный сигнал "внимание" (Break)

SIGKILL Сигнал завершения - должен быть использован только в экстренных ситуациях. Этот сигнал не может быть "пойман" или игнорирован. Сервер может защитить себя от этого сигнала посредством функции языка Си qnx_pflags(). Для этого сервер должен иметь статус привилегированного пользователя.

SIGPIPE Попытка записи в программный канал, который не открыт для чтения.

SIGPWR Перезапуск компьютера в результате нажатия Ctrl-Alt-Shift-Del или вызова утилиты shutdown.

SIGQUIT Интерактивный сигнал завершения.

SIGSEGV Обнаружение недопустимой ссылки на оперативную память. Если во время выполнения обработчика данного сигнала произойдет вторая такая ошибка, то процесс будет завершен.

SIGSTOP Сигнал приостановки выполнения (HOLD) процесса. Действие по умолчанию - приостановить процесс. Сервер может защитить себя от этого сигнала посредством функции языка Си qnx_pflags(). Для этого сервер должен иметь статус привилегированного пользователя.

SIGTERM Сигнал завершения.

SIGTSTP Не поддерживается QNX.

SIGTTIN Не поддерживается QNX.

SIGTTOU Не поддерживается QNX.

SIGUSR1 Зарезервирован как определяемый приложением сигнал 1.

SIGUSR2 Зарезервирован как определяемый приложением сигнал 2.

SIGWINCH Изменился размер окна.

Управление обработкой сигналов

Чтобы задать желаемый способ обработки для каждого из сигналов, вы можете использовать функции языка Си signal() стандарта ANSI или sigaction() стандарта POSIX.

Функция sigaction() предоставляет большие возможности по управлению обработкой сигналов.

Вы можете изменить способ обработки сигнала в любой момент времени. Если вы укажете, что сигнал данного типа должен игнорироваться, то все ждущие сигналы такого типа будут немедленно отброшены.

Обработчики сигналов

Некоторые специальные замечания касаются процессов, которые ловят сигналы посредством обработчиков сигналов.

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

Если в вашей программе не предусмотрен возврат из обработчика сигнала, то могут быть использованы функции siglongjmp() либо longjmp() языка Си, однако, функция siglongjmp() предпочтительнее. При использовании функции longjmp() сигнал остается блокированным.

Блокирование сигналов

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

Пока ваша программа выполняет обработчик сигнала для определенного типа сигнала, QNX автоматически блокирует этот сигнал. Это означает, что нет необходимости заботиться о вложенных вызовах обработчика сигнала. Каждый вызов обработчика сигнала - это неделимая операция по отношению к доставке следующих сигналов этого типа. Если ваш процесс выполняет нормальный возврат из обработчика, сигнал автоматически разблокируется.

180. Для чего служат примитив синхронизации Барьер?

Барьер это средство синхронизации, которое используется для того, чтобы некоторое множество потоков ожидало окончания друг друга в некотором месте, являющемся барьером или точкой синхронизации. После того, как все потоки достигли точки синхронизации, они разблокируются и могут продолжать выполнение.

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

Барьер предназначен для ожидания условия несколькими заданными потоками точки синхронизации, достигнув этой точки, потоки освобождаются "одновременно", и с этой точки продолжают своё независимое развитие.

181. Какие средства синхронизации, предоставляемые QNX Neutrino,вам известны?

Блокировки взаимного исключения (mutex). Наследование приоритетов и

инверсия приоритетов. Условные переменные (condvar). Барьеры. Ждущие

блокировки. Блокировки по чтению/записи. Семафоры (semaphores).

Синхронизация с помощью алгоритма планирования и атомарных операций.

182. Какие средства обмена данными между потоками в пределах одного процесса и разных процессов вам известны?

Набор средств межпроцессного обмена данными в большинстве современных ОС выглядит следующим образом:

§ конвейеры (pipes); rj именованные конвейеры (named pipes);

§ очереди сообщений (message queues);

§ разделяемая память (shared memory).

 

183. С помощью каких событий периодический POSIX-таймер может уведомлять заинтересованный поток о срабатывании?

- Извещение сигналом

- Извещение импульсом

- Извещение с помощью прерывания

- Извещение путем разблокирования

Все POSIX функции, связанные с отработкой заданных интер-

валов времени, используют семантику “не раньше, чем”. Это значит,

что таймер гарантированно выдержит задержку не менее заданного

интервала. Никаких требований на верхнюю границу фактической

длительности отрабатываемой таймером задержки POSIX не устанав-

ливает.

TimerAlarm() B QNX6 нс + + + + -

Периодически посылает вызы-

вающему потоку SIGALRM.

Задаётся базис часов.

timer_settime() A

POSIX 1003.1

(Realtime ext.)

нс + + + + +

TimerSettime() B QNX6 нс + + + + +

При срабатывании доставляют

импульсы и др. события процес-

су или потоку

setitimer() C Standard Unix мкс + + + + -

При срабатывании таймера дос-

тавляется сигнал SIGALRM

184. Какие требования накладывает стандарт POSIX на интервал срабатывания однократного таймера?




Поделиться с друзьями:


Дата добавления: 2014-12-24; Просмотров: 570; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.039 сек.