- •Ответы по дисциплине: «Системное программное обеспечение»
- •Задачи не прелагаются!
- •Ос реального времени.
- •Технические требования к ос реального времени
- •Инверсия приоритетов и реальное время
- •Ос qnx характеристика
- •Концепция приоритетов в ос qnx
- •Типы диспетчеризации в ос qnx (fifo, rr). Основные правила (4 штуки) диспетчеризации.
- •Состояние потоков в qnx
- •Запуск процессов в qnx
- •Запуск потока
- •11. Синхронизация по отношению к моменту завершения потока.
- •Барьеры
- •Неявный обмен сообщения в qnx(open, close)
- •Привилегии обмена сообщениями. Установление соединения
- •Передача сообщений со стороны клиента
- •Общая структура сервера
- •Особенности обмена сообщениями. Каналы и потоки
- •Сообщения типа «имульс»
Концепция приоритетов в ос qnx
Потоки имеют приоритеты от 1 до 63.
Синхронизация в основном с помощью мютексов и семафоров. 0(ноль) – приоритет использовать нельзя. Он зарезервирован для ОС.
Sched_get_priority_min – функция для определения минимального приоритета.
Sched_get_priority_min – функция для определения максимального приоритета.
Вытесняющая многозадачность. Поток с наименьшим приоритетом вытесняет поток с наименьшим приоритетом.
Типы диспетчеризации в ос qnx (fifo, rr). Основные правила (4 штуки) диспетчеризации.
1)FIFO
2)RR-Карусельная
В первом случаю процессор предоставляет потоку столько времени – сколько ему необходимо. После его завершения и щуться потоки с таким же приоритетом. Если таких нет, то выполняються потоки с более низким приоритетом.
Во втором случае: аналогично первому, но потоку процессор выделяет квант времени
sched_rr_get_interval(pid_t pid, struct timespec *q_ptr) - записывает по указателю q_ptr в структуру типа timespec величину кванта процессорного времени, выделяемого заданному процессу.
1 – В данный момент времени может выполняться только один поток
2 – Всегда должен выполняться поток с наибольшим приоритетом
3 – поток выполняеться до тех пор, пока он не блокируеться или завершаеться
4 – В случае RR после истечения кванта времени выделенного потоку он обязательно перепланируеться к выполнению
Состояние потоков в qnx
DEAD – поток мертв
RUNNING – поток выполняеться
READY – поток готов
STOPPED – останов. По сигналу SIG_STOP
SEND – ожидает приема своего сообщения другим потоком
RECEIVE – ожидает сообщения от другого потока
REPLY – ожидает ответ на свое сообщение
STACK – ожидает распределения
WAITPACE – ожидает устранения админом процессов повреждения на страницы
SIGSUSPEND – поток ожидает сигнала
NANOSLEEP – поток спит (приостановлен на некоторое время)
MUTEX – ожидает захвата мютекса
SEMAFORE – ожидает захвата семафора
Запуск процессов в qnx
(1) Запуск процесса в поле system( ):
Эта функция запускает копию командного интерпретатора, для выполнения команд в командной строке.
(2) Запуск процесса с помощью свойства exec() и spawn():
- семейство функций exec() подменяет текущий процесс другим, то есть процесс вызвавший exec() прекращает выполнение и начинает выполнять другую программу,
При этом идентификатор процесса не меняется.
- семейство spawn() создает другой процесс с новым идентификатором, который выполняет указанную программу.
(3) Запуск процессов с помощью функции fork
Функция vfork создает процесс потомок и приостанавливает родительский процесс до тех пор, пока потомок не выховет exec() или пока не завершится. После создания потока нельзя создавать процессы по fork().
Cледует избегать применения функции Fork по следующим причинам.
fork не работает с несколькими потоками.
процессы созданные по fork копируют все открытые дескрипторы файла
Запуск потока
Любой поток может запустить любой поток в том-же процессе
#include<pthread.h>
int
pthread_create(pthread_t*thread,
const pthread attr_t*attr, -"2"
void*(*start_routine)(void*), -"3"
void*arg);-"4"
2-й атрибктная запись, обычно=0
3-й программа,которая буде выполять поток
4_й аргументы которые передатся этой программой.
