Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 24 июн 2017, 04:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 21 янв 2013, 23:02 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9618
Откуда: Харьков
Olej писал(а):
Olej писал(а):
2. Все мои статьи того времени были включены в книгу "Практика работы с QNX"


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

Вот здесь можете эту книжку свободно скачать.


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


Вложения:
anatomy_QNX_orig.tgz [107.41 КБ]
Скачиваний: 498
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 23 янв 2013, 17:05 
Не в сети
Писатель

Зарегистрирован: 02 авг 2012, 14:22
Сообщения: 69
Откуда: Москва
Olej писал(а):
А если вам только эту статью, то вот вам ссылка, где она ещё сохранилась для чтения: QNX: служба времени.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 23 янв 2013, 20:44 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9618
Откуда: Харьков
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.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 24 янв 2013, 13:40 
Не в сети
Писатель

Зарегистрирован: 02 авг 2012, 14:22
Сообщения: 69
Откуда: Москва
Olej писал(а):
Всё это есть в интерактивном HELP установленной системы QNX.

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 24 янв 2013, 16:53 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9618
Откуда: Харьков
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 - и вы получите число секунд, на протяжении которых этот процесс использовал процессор (как в хоккее - "чистое время").


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 28 янв 2013, 15:21 
Не в сети
Писатель
Аватара пользователя

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 28 янв 2013, 18:49 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9618
Откуда: Харьков
Виктория писал(а):
Объект измерения требует три таймера, независимых в вероятностном смысле. Предположим, процессорные средства это позволяют реализовать. А есть ли в 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.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 05 мар 2013, 16:59 
Не в сети
Писатель

Зарегистрирован: 02 авг 2012, 14:22
Сообщения: 69
Откуда: Москва
Здравствуйте Olej! Хотел поинтересоваться, как прошла у вас установка Моментикса на Федору? Я вот на свою FC17_64 пытаюсь поставить версию для 6.3.2 -- заканчивается на точках.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 05 мар 2013, 17:24 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 9618
Откуда: Харьков
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 и вам её некуда девать? ;-)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: QNX Neutrino
Непрочитанное сообщениеДобавлено: 06 мар 2013, 09:30 
Не в сети
Писатель

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

Обычный 2-ядерный i3, 2Gb RAM. Хотел продвинутую версию попробовать, Винда-то вся что, Pro -- 64. Опять же, скорость.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.067s | 16 Queries | GZIP : On ]