1 / 14

Система реального времени

Система реального времени. 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

merlin
Download Presentation

Система реального времени

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Особенности 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

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

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

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

  7. 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); Обмен сообщениями

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

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

  10. Мутексы (POSIX) <pthread.h> • 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».

  11. Условные (сигнальные переменные) int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);int pthread_cond_destroy(pthread_cond_t *cond);создание/удалении условной переменной <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);Блокирует текущий поток на базе мутекса до изменения условной переменной <cond> с таймаутом <time>.

  12. 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);

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

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

More Related