Система реального времени
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

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


  • 137 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3996117

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

QNX/Neutrino

(QNX6)


3996117

QNX

  • Микpоядеpная

  • Cетевая

  • Мyльтизадачная

  • Многопользовательcкая


Qnx6 vs qnx4

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


3996117

Аппаратные требования

  • x86, PowerPC, MIPS, SH-4, ARM, StrongARM, XScale.

  • 64M памяти & диск 600 Мбайт

  • конечные cиcтемы могyт pаботать вообще без диcка.

  • Для разработки:

  • 256Mбайт RAM 1.5Гбайт диcк


3996117

Архитектура

  • QNX состоит из небольшого ядра и набора менеджеров ресурсов (процессов)

Process manager

Filesystem mgr

Микро Ядро

Device manager

Network mgr


3996117

Синхронизация

  • Обмен сообщениями (MsgSend/Receive)

  • Мутексы(mutex)

  • Семафоры (semaphore)

  • Барьеры (barrier)

  • Блокировки чтения/записи (r/w locks)

  • Ждущие блокировки (sleepons)

  • Условные переменные (cond variables)


3996117

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

Send/Recive

sts = MsgSend(coid, smsg, sbytes, rmsg, rbytes)

rid=MsgRecive(chid, rmsg, rbytes, 0);

MsgReply(rcvid, sts, smsg, sbytes);


Posix semaphore h

Семафоры (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);Неблокирующие ожидания ненулевого значения семафора.


Posix pthread h

Мутексы (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».


3996117

Условные (сигнальные переменные)

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>.


Rw lock

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


3996117

while(!data_ready) {

phtread_sleepon_wait (&data_ready);

}

pthread_sleepon_lock();

data_ready = 1;

pthread_sleepon_signa l(&data_ready);

pthread_sleepon_unlock();

Ждущие блокировки


3996117

Барьеры

  • barrier_init(&barrier, 0, 3);

  • barrier_wait(&barrier);


  • Login