- •О.А. Кононов
- •Реферат
- •Содержание
- •1 Стуктурная организациЯ осрв qnx
- •1.1 Архитектура микроядра системы qnx
- •1.1.1 Настоящее ядро
- •1.1.2 Системные процессы
- •1.2 Микроядро
- •1.3 Системные и пользовательские процессы
- •1.4 Драйверы устройств
- •1.5 Связь между процессами (ipc)
- •Передача сообщений
- •1.6 Qnx как сеть
- •2 Комплекс лабораторных работ
- •2.1 Лабораторная работа №1 «Простейший пример»
- •2.1.1 Теоретические сведения
- •2.1.2 Текст программы
- •2.2.2 Текст программы
- •2.2.3 Последовательность действий
- •2.2.4 Результаты
- •2.3 Лабораторная работа №3 «Обмен сообщениями»
- •2.3.1 Теоретические сведения
- •2.3.2 Текст программы
- •2.3.3 Последовательность действий
- •2.3.4 Результаты
- •2.4 Лабораторная работа №4 «Тайм - ауты»
- •2.4.1 Теоретические сведения
- •2.4.2 Текст программы
- •2.4.3 Последовательность действий
- •2.5.2 Текст программы
- •2.5.3 Последовательность действий
- •2.5.4 Результаты
- •2.6 Лабораторная работа №6 «Условные переменные»
- •2.6.1 Теоретические сведения
- •2.6.2 Текст программы
- •2.6.3 Последовательность действий
- •2.6.4 Результаты
- •Заключение
- •Список использованных источников
2.6.2 Текст программы
#include <stdio.h>
#include <pthread.h>
int data_ready = 0;
int inf = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condvar = PTHREAD_COND_INITIALIZER;
void *consumer (void * notused)
{
printf("Eto potrebitel \n");
while(1)
{
pthread_mutex_lock (&mutex);
printf("W1 \n");
while (!data_ready)
{
printf("W2 \n");
pthread_cond_wait (&condvar, & mutex);
printf("W3 \n");
}
printf("dannie ot proizv = %d \n",inf);
data_ready=0;
pthread_cond_signal(&condvar);
pthread_mutex_unlock(&mutex);
}
}
void *producer (void * notused)
{
printf("Eto proizvoditel \n");
while(1)
{
sleep(2);
printf("proizvoditel polychil dannie ot h/w = %d \n",inf);
pthread_mutex_lock (&mutex);
printf("Wp1 \n");
while (data_ready)
{
printf("Wp2 \n");
pthread_cond_wait (&condvar, & mutex);
}
data_ready=1;
inf++;
printf("Wp3 \n");
pthread_cond_signal(&condvar);
pthread_mutex_unlock(&mutex);
}
}
main()
{
printf("Start \n");
pthread_create(NULL,NULL, consumer,NULL);
pthread_create(NULL,NULL, producer,NULL);
sleep(10);
}
2.6.3 Последовательность действий
Этот пример в значительной степени похож на программу с применением ждущей блокировки, с небольшими отличиями. Первое отличие, которое бросается в глаза, — здесь использован новый тип данных, pthread_cond__t. Это просто декларация для условной переменной; мы назвали нашу условную переменную condvar.
Следующее, что видно из примера, — это то, что структура «потребителя» идентична таковой в предыдущем примере со ждущей блокировкой.
Основное различие здесь состоит в том, что библиотека ждущих блокировок имеет скрытый внутренний мутекс, а при использовании условных переменных мутекс передается явно. Последний способ дает нам больше гибкости.
И, наконец, обратите внимание на то, что мы использовали функцию pthread_cond_signal() (опять же, с явной передачей мутекса).
2.6.4 Результаты
# root/a.out
Start
Eto potrebitel
W1
W2
Eto proizvoditel
proizvoditel polychil dannie ot h/w = 0
Wp1
Wp3
W3
dannie ot proizv = 1
W1
W2
proizvoditel polychil dannie ot h/w = 1
Wp1
Wp3
W3
dannie ot proizv = 2
W1
W2
proizvoditel polychil dannie ot h/w = 2
Wp1
Wp3
W3
dannie ot proizv = 3
W1
W2
proizvoditel polychil dannie ot h/w = 3
Wp1
Wp3
W3
dannie ot proizv = 4
W1
W2
Заключение
Операционная система QNX является мощной сетевой операционной системой, позволяющей проектировать сложные программные комплексы, работающие в реальном времени как на локальном компьютере, так и в рамках распределенной вычислительной системы.
Встроенные средства операционной системы QNX обеспечивают как поддержку многозадачного режима на одном компьютере, в том числе с мультипоточным или мультиядерным процессором, так и взаимодействие параллельно выполняемых задач на разных компьютерах, работающих в среде локальных вычислительных сетей.
Основным языком программирования в системе является язык Си, широко используемый в настоящее время на большинстве персональных компьютеров. Это позволяет с небольшими доработками перенести необходимое накопленное программное обеспечение в среду операционной системы QNX для организации его работы в среде распределенной обработки.
Более подробно ознакомиться с операционной системой реального времени QNX, с особенностями функционирования ее составных частей, таких как, например, графическая оболочка Photon и встроенная ОС РВ Neutrino, а также познакомиться с многочисленными примерами приложений, использующих QNX, Вы можете непосредственно на WEB-сервере фирмы QSSL[5], а также используя отечественные Интернет ресурсы [6,7].