Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vovk.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
456 Кб
Скачать
☆

12. Методи синхронізації потоків.

Процесс- минимальная программная единица, которая способна обладать ресурсами (областями памяти). Процесс может содержать 1 или более потоков, то есть процесс – это контейнер потоков.

Поток – это минимальная диспетчеризуемая программная единица. Он не может обладать другими ресурсами, кроме ресурса процесса который порожден.

К потокам можно применять такие методы синхронизации:

1) мютексы (mutex) – владеть мютексом в каждый момент времени может только один поток. Мютекс – рекомендательная блокировка: если один поток хочет получить доступ к разделяемому ресурсу, доступ к которому синхронизируется через мютекс, то он в начале должен проверить зн-ние мютекса и если он свободен заблокировать его и после этого использовать ресурс связанный с данным мютексом. После окончания работы с ресурсом, поток должен разблокировать (освободить) мютекс, разрешая доступ к ресурсам других потоков. Если же поток не желает проверять мютекс то он сможет воспользоваться ресурсом, однако последствия этого могут быть не предсказуемыми;

2) семафоры (semaphores)- рекомендательная блокировка. Владеть семафором могут несколько потоков (аналогия некоторое кол-во ключей перед дверью) каждый хочет воспользоваться ресурсом;

3) ждущие блокировки (sleepons) – предназначены для блокировки потока на некотором объекте с динамическим назначением к потоку некоторой условной переменной и плюс мютекс, который скрыт внутри библиотеки и программисту не доступен;

4) условные переменные (condvars) – аналогично sleepons, но мютекс назначает программист;

5) присоединение (joining). Предназначен для синхронизации одного потока по отношению к завершению другого. Поток желает ждать завершиться некоторый другой поток;

6) барьеры (barriers). Предназначен для синхронизации работы нескольких потоков: потоки которые желают ждать у барьера должны вызвать соответствующую ф-цию (barrier_wait); обьект типа барьер содержит число потоков которые могут ожидать у барьера. Если число реально ждущих у барьера потоков будет равно или больше чем значения записанные в барьере, то эти потоки одновременно разблокируются. В отличие от присоединения потоки не обязаны умирать.

Мютексы, семафоры и условные переменные могут применяться как методы синхронизации потоков как внутри одного процесса так и в разных. Эти и остальные методы обычно применяются к потокам внутри одного процесса.

Кроме синхронизации потоки можно диспетчеризовать по различным дисциплинам диспетчеризации (FIFO; RR; адаптивная, спорадическая) и назначать приоритеты (0..63).

При создании процесса администратор процессов создает адресное пространство и ядро запускает главный поток, который после выполнения нескольких инструкций стартует с точки входа main или fork.

13. Архітектура ос qnx-6.

ОС QNX-6, кот. также называют QNX/Neutrino2], предназначена для разработки проектов систем РВ на различных аппаратных платформах. ОС QNX-6 имеет клиент-серверную архитектуру и состоит из микроядра и сгруппированных вокруг него взаимодействующих процессов. Микроядро предоставляет только несколько сервисов: планирует потоки, подает сигналы, передает сообщение, выполняет синхронизацию потоков и их диспетчеризацию и обслуживает таймер. Поэтому микроядро имеет небольшой размер, причем микроядро само по себе не поддается диспетчеризации. Его код выполняется только в результате вызова определенной системной функции или в результате возникновения аппаратного прерывания. Дополнительные функциональные возможности ОС QNX-6 обеспечиваются серверними процессами (серверами), которые должны отвечать на запросы клиентских процессов и которые не входят в состав микроядра. Типичная конфигурация ОС QNX-6 имеет следующие стандартные серверные процессы: менеджер процессов (procnto), менеджер файловой системы (fs), менеджер устройств (dev), менеджер сети (qnet). Указанные менеджеры в рамках терминологии ОС QNX-6 часто называют администраторами ресурсов.

В QNX-6 микроядро действует как программная шина, которая разрешает динамично подключать различные менеджеры каждый раз, когда они нужны. Обычно менеджер процессов procnto и микроядро объединяются в один программный модуль, который руководит всеми процессами в ОС QNX-6.

Микроядро запускается на 0 (нулевом) уровне привилегий процессора, а менеджеры и драйверы устройств запускаются на уровнях 1 и 2 (для выполнения действий ввод/вывод). Прикладные процессы запускаются на 3 уровне привилегий и потому могут выполнять только общие команды процессора.

QNX-6 - это ОС, которая основана на механизме передачи сообщений. Этот механизм явл фундаментальным способом реализации взаимодействия процессов между собой собой, то есть он обеспечивает так называемый IPC - InterProcess Communication. Механизм передачи сообщений основан на модели клиент-сервер: клиент присылает сообщение серверу, который потом возвращает результат. Механизм передачи сообщений должен быть прозрачным относительно сети, и потому разрабатываемая система может быть распределена между несколькими сетевыми узлами без любых изменений в коде разработанного программного обеспечения.

Для передачи сообщений между клиентом и сервером, QNX-6 использует механизм приоритетов, управляемый клиентом. Это означает, что серверний процесс наследует уровень приоритета клиентского процесса, кот. требует обслуживание. Когда обслуживание запроса клиента завершен, серверний процесс может восстановить свой первобытный уровень приоритета. Если обслуживания требуют несколько клиентов вместе, серверний процесс принимает уровень приоритета клиентского процесса с наиболее высоким приоритетом.

Архитектура клиента-сервер имеет много преимуществ, одна из которых - устойчивость к ошибкам. Каждый серверний и клиентский процессы загружаются в своих собственных адресных пространствах виртуальной памяти, что приводит к надежности и устойчивости разработанной системы в целом, но выполнение системных вызовов нуждается в переключение контекста активной задачи, что приводит к дополнительным затратам на защиту памяти и к снижению производительности роботы. Для повышения указанной производительности работы разработки программного кода процессов (как серверних, так и клиентских) обычно выполняют в стиле многопоточных приложений.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]