Система реального времени QNX/Neutrino (QNX6). QNX Микpоядеpная Cетевая Мyльтизадачная Многопользовательcкая.

Презентация:



Advertisements
Похожие презентации
Другие примитивы синхронизации Программирование с использованием POSIX thread library.
Advertisements

POSIX Threads. Общая модель Программа Общая память Поток 1 CPU Поток 2 Поток N Потоки – наборы инструкций, исполняющиеся на CPU. Все потоки одной программы.
Блокировки чтения-записи Введение Получение и сброс блокировки чтения-записи Атрибуты блокировки чтения-записи Реализация Отмена выполнения потоков Пример.
Мутексы Программирование с использованием POSIX thread library.
ВСТРОЕННЫЕ ИНФОРМАЦИОННО- УПРАВЛЯЮЩИЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ Лекция 5 Операционные системы реального времени Кафедра АСВК, Лаборатория Вычислительных.
Атрибуты мутекса. pthread_mutexattr_t #include int pthread_mutexattr_init( pthread_mutexattr_t * attr); int pthread_mutexattr_destroy( pthread_mutexattr_t.
Семафоры-счетчики POSIX Программирование с использованием POSIX thread library.
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Основы операционных систем. Тема 6. Механизмы синхронизации.
Многопоточное программирование. Виды параллелизма. Общая память Распределенная память.
Посыпкин М.А. (С) Многопоточное программирование.
Управление процессами Синхронизация процессов и потоков.
POSIX Threads МО ВВС ИВМ и МГ СО РАН Городничев Максим Александрович.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Учебный курс Основы операционных систем Лекция 7 кандидат физико-математических наук, доцент Карпов Владимир Ефимович.
Часы и таймеры. Типы таймеров относительный таймер абсолютный таймер периодический таймер однократный таймер.
Разработка библиотеки нитей POSIX реального времени Магистерская диссертация Студент: Фёдоров Александр, 418 гр. Научный руководитель: Гилязов С.С.
Синхронизация в Win-API. Синхронизационные объекты 1 Синхронизационный объект это такой объект который может быть использован как аргумент в одной из.
Управление процессами 3.Взаимодействие процессов: синхронизация, тупики 3.1.Разделение ресурсов 3.2.Взаимное исключение Проблемы реализации взаимного.
Математическая модель задачи о читателях и писателях Хусаинов А.А.
Транксрипт:

Система реального времени QNX/Neutrino (QNX6)

QNX Микpоядеpная Cетевая Мyльтизадачная Многопользовательcкая

Особенности QNX6 (vs QNX4) полная cовмеcтимоcть c POSIX - cтандатами; планиpование идет междy потоками (threads); поддеpжка мyльтипpоцеccоpных аpхитектyp механизм Send-Receive-Reply теперь требует установления канала между потоками Базовая сущность – это менеджеpы pеcypcов гpафичеcкая оболочка Photon 2.0

Аппаратные требования x86, PowerPC, MIPS, SH-4, ARM, StrongARM, XScale. 64M памяти & диск 600 Мбайт конечные cиcтемы могyт pаботать вообще без диcка. Для разработки: 256Mбайт RAM 1.5Гбайт диcк

Архитектура QNX состоит из небольшого ядра и набора менеджеров ресурсов (процессов) Микро Ядро Process manager Filesystem mgr Device manager Network mgr

Синхронизация Обмен сообщениями (MsgSend/Receive) Мутексы(mutex) Семафоры (semaphore) Барьеры (barrier) Блокировки чтения/записи (r/w locks) Ждущие блокировки (sleepons) Условные переменные (cond variables)

Обмен сообщениями Client int coid = ConnectAttach (0, 77, 1, 0, 0); MsgSend(coid, smsg, s_len, rmsg, r_size); Server int chid = ChannelCreate(0); rid = MsgRecive(chid, m, m_size, 0); ….. MsgReply(rid, sts, m, m_len);

Send/Recive sts = MsgSend(coid, smsg, sbytes, rmsg, rbytes) rid=MsgRecive(chid, rmsg, rbytes, 0); MsgReply(rcvid, sts, smsg, sbytes);

Семафоры (POSIX) int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t * sem); Инициализация/удаление семафора. = 0 – Начальное значение семафора. int sem_getvalue(sem_t * sem, int * val); Возвращает текущее состояние семафора. int sem_post(sem_t * sem); Установка семафора (+1). int sem_wait(sem_t * sem); Ожидает ненулевого значения семафора. При вызове функции значение семафора уменьшается на единицу. int sem_trywait(sem_t * sem); Неблокирующие ожидания ненулевого значения семафора.

Мутексы (POSIX) int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); int pthread_mutex_destroy(pthread_mutex_t *mutex); Создание/удаление мутекса. int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); Захват/освобождение мутекса. Если мутекс уже захвачен - поток блокируется до освобождения. int pthread_mutex_trylock(pthread_mutex_t *mutex); Попытка захвата мутекса без блокировки Если семафор занят возвращается «BUSY».

Условные (сигнальные переменные) int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_destroy(pthread_cond_t *cond); создание/удалении условной переменной. int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); Разблокирует один/все потоки ожидающие условную переменную int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *time); Блокирует текущий поток на базе мутекса до изменения условной переменной с таймаутом.

RW-lock int pthread_rwlock_init(pthread_rwlock_t * lock, const pthread-rwlockattr_t * attr); int pthread_rwlock_destroy(pthread_rwlock_t * lock); int pthread_rwlock_rdlock(pthread_rwlock_t * lock); int pthread_rwlock_wrlock(pthread_rwlock_t * lock); int pthread_rwlock_tryrdlock(pthread_rwlock_t * lock); int pthread_rwlock_trywrlock(pthread_rwlock_t * lock);

Ждущие блокировки while(!data_ready) { phtread_sleepon_wait (&data_ready); } pthread_sleepon_lock(); data_ready = 1; pthread_sleepon_signa l(&data_ready); pthread_sleepon_unlock();

Барьеры barrier_init(&barrier, 0, 3); barrier_wait(&barrier);