QNX Neutrino

Детальный разбор дистрибутивов и других UNIX-like ОС

Модераторы: Olej, bellic, adminn, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Olej » 21 янв 2013, 23:02

Olej писал(а):
Olej писал(а): 2. Все мои статьи того времени были включены в книгу "Практика работы с QNX"
Ещё можете посмотреть (не эту статью, но другие вещи, ... проливающие свет на ту же тему ;-) ) вот здесь: QNX/UNIX: анатомия параллелизма.
Изображение

Вот здесь можете эту книжку свободно скачать.
По этой книге был большой архив примеров кода, на сайте издательства, но я не могу URL найти (да и в книге он с ошибкой написан). Так что я архив примеров сюда в тему приложу.
Вложения
anatomy_QNX_orig.tgz
(107.41 КБ) 732 скачивания

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение SimpleUser » 23 янв 2013, 17:05

Olej писал(а): А если вам только эту статью, то вот вам ссылка, где она ещё сохранилась для чтения: QNX: служба времени.
Спасибо Olej ещё раз! Прекрасная статья, особенно по функционалу службы времени!(с поправкой на время написания)
Разрешите задать по ней один вопрос ;-)
Уже не в первый раз в коде попадаются мне константа СLOCKS_PER_SEC и функция clock(), с какими же единицами измерения они работают? Судя по СLOCKS_PER_SEC, которое на всех компах, независимо от процессора, непонятный миллион :-?, это микросекунда. Но определение функции clock() говорит, что она возвращает истекшее количество тиков часов, а я не могу себе представить в системе часов, работающих с периодом ровно 1мкс. Значит сlock() просто возвращает время в микросекундах, несмотря на определение?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Olej » 23 янв 2013, 20:44

SimpleUser писал(а): Уже не в первый раз в коде попадаются мне константа СLOCKS_PER_SEC и функция clock(), с какими же единицами измерения они работают? Судя по СLOCKS_PER_SEC, которое на всех компах, независимо от процессора, непонятный миллион :-?, это микросекунда. Но определение функции clock() говорит, что она возвращает истекшее количество тиков часов, а я не могу себе представить в системе часов, работающих с периодом ровно 1мкс. Значит сlock() просто возвращает время в микросекундах, несмотря на определение?
Там же по тексту есть цитата из документации:
Дословно из HELP: "The clock() function returns the number of clock ticks of processor time used by the programm since it started executing. You can convert number of tics in seconds by dividing by the value CLOCK_PER_SEC.". Это - чистое процессорное время, диспетчированное потоку:
...
посмотреть значение константы CLOCK_PER_SEC, установленное в системе:
CLOCK_PER_SEC = 1000000
CLOCK_PER_SEC - число тиков в секунду.
В QNX может динамически произвольно переустанавливаться вызовом:

Код: Выделить всё

_clockperiod clcold;
ClockPeriod( CLOCK_REALTIME, NULL, &clcold, 0 );
...
Структура _clockperiod имеет вид:
struct _clockperiod {
   uint64_t nsec,	// наносекунды
   fract            // фемтосекунды, рассчитано на будущие развития
                    // и должно быть равным 0!
};
Это (возможность переустановить тик) отличает QNX от других OS (в Linux это можно сделать только пересборкой ядра, в Windows - никак).
По умолчанию CLOCK_PER_SEC = 1000000, т.е. системный тик = 1мсек.
Может быть уменьшен до 10мксек. (!)

Вызов clock() (как сказано в цитате) - число системных тиков от загрузки системы. Это вызов POSIX, ищите там.

Вызов ClockCycles() - это совсем другое: число тактов (периодов частоты) процессора от загрузки системы (счётчик RDTSC x86). Это величина наносекундного диапазона, если у вас процессор 1Ghz, то будет прибывать на 10**9 каждую секунду.

Ещё:

Код: Выделить всё

uint64_t cps = SYSPAGE_ENTRY( qtime )->cycles_per_sec;
Так в QNX вы получаете рабочую частоту процессора, и потом можете пересчитывать ClockCycles() (счётчик) в единицы времени.

Всё это есть в интерактивном HELP установленной системы QNX.

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение SimpleUser » 24 янв 2013, 13:40

Olej писал(а): Всё это есть в интерактивном HELP установленной системы QNX.
Естественно я первым делом залез в HELP, только ответа там к сожалению не нашёл.
Olej писал(а): По умолчанию CLOCK_PER_SEC = 1000000, т.е. системный тик = 1мсек.
Может быть уменьшен до 10мксек. (!)

Вызов clock() (как сказано в цитате) - число системных тиков от загрузки системы. Это вызов POSIX, ищите там.
Наверное я что-то не понимаю, но я считал что в 1 секунде 1000 миллисекунд, и при системном тике 1мс CLOCKS_PER_SEC должно равняться 1000... поэтому так и не могу понять почему там 1000000 вне зависимости от величины системного тика или частоты процессора -- значит ни к тому, ни к другому CLOCKS_PER_SEC отношения не имеет?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Olej » 24 янв 2013, 16:53

SimpleUser писал(а):Наверное я что-то не понимаю, но я считал что в 1 секунде 1000 миллисекунд, и при системном тике 1мс CLOCKS_PER_SEC должно равняться 1000... поэтому так и не могу понять почему там 1000000 вне зависимости от величины системного тика или частоты процессора -- значит ни к тому, ни к другому CLOCKS_PER_SEC отношения не имеет?
Я не помню деталей... Но:

- Всё, что относится к clock() и CLOCKS_PER_SEC - это не из области QNX, это из области определения POSIX, общих для всех UNIX систем...

- можете детальнее посмотреть описания в Linux:

Код: Выделить всё

bash-4.2$ man 3 clock
...
DESCRIPTION
       The clock() function returns an approximation of processor time used by the program.
RETURN VALUE
       The value returned is the CPU time used so far as a clock_t; to get the number of seconds used, divide by CLOCKS_PER_SEC.  If
       the processor time used is not available or its value cannot be represented, the function returns the value (clock_t) -1.
CONFORMING TO
       C89, C99, POSIX.1-2001.  POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
...
- результат clock() относится не к системе, а к отдельному процессу, считается для каждого процесса раздельно... время процессора, которое занимал процесс.

- как я полагаю, результат возвращается в микросекундах, независимо от системного тика, используемого в той или иной ОС.

В любом случае, man говорит ;-) : умножьте clock() на CLOCKS_PER_SEC - и вы получите число секунд, на протяжении которых этот процесс использовал процессор (как в хоккее - "чистое время").

Аватара пользователя
Виктория
Писатель
Сообщения: 113
Зарегистрирован: 28 дек 2012, 14:05
Откуда: Самара
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Виктория » 28 янв 2013, 15:21

Поправьте меня, если я не в той теме задаю свой вопрос.
Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Olej » 28 янв 2013, 18:49

Виктория писал(а):Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
Я не понял вопроса...
Виктория писал(а):Объект измерения требует три таймера, независимых в вероятностном смысле.
Что значит "в вероятностном смысле"?
Таймеры периодические?
Виктория писал(а):Предположим, процессорные средства это позволяют реализовать. А есть ли в QNX программная поддержка со стороны микроядра и/или QNet для обработки прерываний от этих таймеров-генераторов? Период между прерываниями 1-10 мкс, хотя бы так для начала.
Если вы имеете в виду некоторые аппаратные таймеры...? то обработка прерываний от них может быть реализована, средствами native API QNX для обработки прерываний.
А при чём здесь QNET или как может быть использована? QNET это чисто сетевая протокольная часть для передачи тех же сообщений микроядра, но между разными хостами.

По поводу 1-10 мкс...
Это какой-то совершенно мизерный интервал (период), чтобы он осознанно распознавался QNX. Самый минимальный размер системного тика, который может быть принудительно установлен в QNX - 10мкс. Любые события, следующие чаще системного тика - неразличимы системой.

P.S. Если это обсуждения некоторых гипотетических возможностей, то их обсуждение лучше перенести а). на примеры Linux, и б). где-то в отдельную новую тему.
Почему лучше Linux?
Потому что QNX закрытая система, в общем, всё, что выходит за рамки их техдокументации - можно только гадать.
В Linux можно попытаться разобраться с тем, что не освещено документацией. Кроме того в Linux начиная с ядер (очень примерно!) 2.6.18 и далее, есть такая вещь, как поддержка таймеров высокого разрешения, реализованная на таймерах APIC.

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение SimpleUser » 05 мар 2013, 16:59

Здравствуйте Olej! Хотел поинтересоваться, как прошла у вас установка Моментикса на Федору? Я вот на свою FC17_64 пытаюсь поставить версию для 6.3.2 -- заканчивается на точках.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение Olej » 05 мар 2013, 17:24

SimpleUser писал(а):Хотел поинтересоваться, как прошла у вас установка Моментикса на Федору?
В виртуальной машине VirtualBox?
Замечательно! ;-) Поставил я, кажется, QNX 6.5, несколько виртуальных машин (уточню версию QNX когда буду использовать VirtualBox).
Можно даже QNET поднять сеть, думаю, если организовывать QNET over IP (т.е. не над MAC уровнем).
SimpleUser писал(а):Я вот на свою FC17_64 пытаюсь поставить версию для 6.3.2 -- заканчивается на точках.
Это может быть связано с типом процессора, на котором у вас работает FC17_64 - нужно чтобы процессор поддерживал аппаратную виртуализацию (расширение архитектуры):
- QNX поддерживается, где-то я читал, только если есть поддержка аппаратной виртуализации.
- поддержка 64-бит виртуальных машин на 32-бит VirtualBox обеспечивается только при поддержке аппаратной виртуализации (это из документации VirtualBox), думаю, что наоборот: 32-бит VM в 64-бит VirtualBox - то же самое.

P.S. SimpleUser, а на кой хрен вам понадобилось устанавливать FC17 на 64 бит?
У вас что? а). особо нагруженный сервер массового коллективного доступа? б). RAM в размере 50Gb и вам её некуда девать? ;-)

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Re: QNX Neutrino

Непрочитанное сообщение SimpleUser » 06 мар 2013, 09:30

Я имел ввиду среду разработки QNX Momentics Development Suite 6.3.2, не саму RTOS. На работе срочно понадобился драйвер для ПЛИСовского контроллера PCIe под QNX, для начала надо бы среду разработки установить.
Olej писал(а): P.S. SimpleUser, а на кой хрен вам понадобилось устанавливать FC17 на 64 бит?
У вас что? а). особо нагруженный сервер массового коллективного доступа? б). RAM в размере 50Gb и вам её некуда девать? ;-)
Обычный 2-ядерный i3, 2Gb RAM. Хотел продвинутую версию попробовать, Винда-то вся что, Pro -- 64. Опять же, скорость.

Ответить

Вернуться в «Дистрибутивы Linux и родственные ОС»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей