Автор работы: Пользователь скрыл имя, 11 Января 2012 в 11:36, реферат
ОС РВ предназначена для разработки программного обеспечения для систем (программно-аппаратных комплексов), работающих в режиме жесткого реального времени.
Разработка ОС РВ базируется на следующих принципах:
• соответствие международным стандартам,
• мобильность,
• масштабируемость (конфигурируемость),
• использование концепции микроядра,
• использование объектно-ориентированного подхода,
• кросс-разработка.
Завершение потоков
Поток может быть завершен по его собственной инициативе (нормальное завершение) или принудительно (функцией pthread_cancel() или посылкой сигнала). Нормальное завершение происходит в результате вызова функции pthread_exit() или возврата управления из функции, указанной при порождении потока.
Функция pthread_cancel() позволяет в рамках одного потока выдать запрос на удаление другого потока. Собственно удаление потока происходит в рамках удаляемого потока (то есть удаление произойдет тогда, когда удаляемый поток получит управление в соответствии с его приоритетом) асинхронно с тем потоком, в котором вызвана функция pthread_cancel().
Так как потоки управления могут использовать общие ресурсы, то удаление потока в произвольный момент времени может помешать нормальной работе других потоков. Например, если удалить поток, добавляющий элемент в двусвязный список, то список может остаться в состоянии непригодном для дальнейшего использования. Для решения подобного рода проблем поток может запретить или разрешить свое удаление. Если удаление запрещено, то запрос на удаление потока откладывается (запоминается) до тех пор, пока удаление не будет разрешено.
Завершение
потока без освобождения ресурсов,
которые, вообще говоря, следовало бы
освободить, приводит к растратам
этих ресурсов. Особенно это важно
при принудительном удалении потоков.
Для решения этой проблемы служат
так называемые функции свертывания,
которые выполняются во время
завершения потока (как нормального,
так и принудительного). Функции
свертывания создаются
Состояния потоков
Порожденный, но не завершенный поток управления может быть готовым к выполнению или быть неработоспособным. Поток может быть неработоспособен по следующим причинам (причина указывается флагом в описателе потока):
Потоки, ожидающие какого-либо ресурса (семафора, сообщения и др.) находятся в очереди к этому ресурсу. Для каждого ресурса существует своя очередь. Потоки, ожидающие истечения интервала времени, находятся в очереди к таймеру. Потоки управления, ожидающие какого-либо события (сигнала, конца операции ввода/вывода), не помещаются в связи с этим в какую-либо очередь.
Время ожидания ресурса или события может быть ограничено. В этом случае описатель потока будет также находиться в очереди к таймеру. Поток станет работоспособным, если истечет интервал времени или ресурс станет доступным (произойдет событие).
Очередь готовых к выполнению потоков, а также очереди потоков, ожидающих какого-либо ресурса, упорядочены по приоритету, а среди потоков с одинаковым приоритетом потоки обслуживаются по принципу "первый пришел, первый ушел".
Поток может быть приостановлен отладочными средствами, если он достиг точки останова, установленной отладчиком, или если при выполнении потока произошла ошибка (например, деление на 0).
Планирование потоков
Стратегия планирования определяет способ распределения процессорного времени между готовыми к исполнению (работоспособными) потоками управления. Для удобства изложения мы будем предполагать, что имеется очередь готовых к выполнению потоков управления (хотя в реализации может быть несколько таких очередей, например, по одной для каждого приоритета).
В соответствии с POSIX операционная система позволяет использовать следующие три стратегии планирования:
SCHED_FIFO | приоритетное планирование, | |
SCHED_RR | приоритетное планирование с разделением времени, | |
SCHED_OTHER | дополнительная стратегия планирования. |
С каждым
потоком управления должна быть связана
соответствующая стратегия
Независимо
от используемых стратегий планирования
очередь готовых к выполнению
потоков управления упорядочена
по приоритетам (потоки с наивысшим
приоритетом находятся в начале
очереди). При установке в очередь
поток занимает место перед потоками,
имеющими более низкий приоритет
и после потоков имеющих
Стратегия и приоритет потока задаются при его порождении, но они могут быть впоследствии изменены.
При приоритетном планировании (SCHED_FIFO) поток выполняется до тех пор, пока он не перестанет быть работоспособным или пока не появится более приоритетный работоспособный поток.
Приоритетное
планирование с разделением времени
(SCHED_RR) аналогично стратегии SCHED_FIFO с
дополнительным условием: если текущий
поток управления занимает процессор
в течение определенного
Смысл этой стратегии заключается в том, чтобы запретить монопольное использование процессора. Более точно, поток управления со стратегией планирования SCHED_RR не может монопольно использовать процессор, если есть другие потоки с тем же приоритетом.
В настоящей версии SCHED_OTHER совпадает с SCHED_RR.
Назначение и основные сведения
Сигналы во многом схожи с прерываниями. Они позволяют прервать выполнение прикладной программы и отреагировать на породившее сигнал событие. Сигналы, в частности, используются
Сигналы могут генерироваться (посылаться прикладной программе) как операционной системой, так и прикладной программой.
В системе
имеется несколько видов
Возможна
как асинхронная, так и синхронная
обработка сигналов. В случае асинхронной
обработки при поступлении
Асинхронная обработка сигналов может быть временно запрещена. Запрет обработки сигналов производится в рамках потока, а не прикладной программы. Каждый поток имеет свою собственную маску сигналов, обработка которых запрещена (заблокирована, замаскирована). Если сигнал пришел в тот момент, когда его обработка запрещена, факт прихода сигнала запоминается. В этом случае сигнал будет обработан, когда обработка сигналов будет вновь разрешена, если сигнал не будет ранее обработан синхронным образом.
Прикладная программа может указать вид асинхронной обработки сигнала. Например, указать функцию обработки сигнала. Вид обработки сигнала регистрируется в рамках прикладной программы, а не потока. Если вид обработки какого-либо сигнала не был определен прикладной программой, то используется стандартная (по умолчанию) реакция на сигнал.
Синхронная обработка сигналов производится с помощью функций sigwait(), sigwaitinfo() или sigtimedwait(). В этом случае поток приостанавливается до тех пор, пока не придет сигнал. Говорят, что сигнал был принят, если он был обработан синхронным образом.
Сигнал может быть послан либо конкретному потоку управления, либо без указания потока управления. В последнем случае ОС сама выбирает поток, которому будет послан сигнал.
Сигналы реализованы в соответствии с POSIX. При этом надо иметь в виду, что в ОС реализованы только потоки управления, но не процессы (с точки зрения POSIX в системе имеется только один процесс). Доставка сигнала процессу трактуется как доставка сигнала прикладной программе (без указания потока управления).
Сигналы можно разбить на две группы:
Рассмотрим отличия сигналов реального времени от обычных сигналов. Пусть повторный сигнал с тем же именем пришел раньше, чем был обработан предыдущий. В этом случае повторный сигнал реального времени будет поставлен в очередь, а обычный сигнал утерян.
В случае
обычного сигнала функция обработки
сигнала получает только один аргумент
- номер сигнала. В случае сигнала
реального времени имеется
Порождение сигналов
Операционная система использует сигналы для уведомления прикладной программы о произошедших событиях. К примерам таких событий относятся ошибки оборудования, истечение интервала времени таймера, поступление особого кода с терминала и др.
Посылка
сигнала не единственный способ, который
использует операционная система для
уведомления о событии. Для некоторых
событий способ уведомления о
событии может указать
В этих случаях способ уведомления о событии (реакции на событие) указывается прикладной программой в структуре sigevent. Возможны следующие способы уведомления о событии:
Прикладная программа может посылать как обычные сигналы, так и сигналы реального времени, вызывая соответствующие функции ОС.
Обработка сигналов
Прикладная программа может определить действия по асинхронной обработке сигналов с помощью функции sigaction(). Для каждого сигнала можно запросить стандартную (по умолчанию) обработку сигнала, потребовать игнорировать сигнал или указать функцию обработки сигнала. В начале работы прикладной программы для всех сигналов используется стандартная обработка сигнала.
Если
прикладная программа определила функцию
обработки сигнала, то при доставке
сигнала будет выполнена