Опубликован: 06.12.2004 | Доступ: свободный | Студентов: 1087 / 122 | Оценка: 4.76 / 4.29 | Длительность: 20:58:00
ISBN: 978-5-9556-0021-5
Лекция 10:

Заключение

Аннотация: Подводится итог курса, кратко суммируются полученные знания.
Ключевые слова: программирование, POSIX, мобильное программирование, поток управления, процесс, атрибутный объект, ПО, исключение, функция, планирование, политика планирования, операции, синхронизация, синхронизация потоков, потоки управления, общее адресное пространство, мьютекс, блокировка чтение-запись, спин-блокировка, барьер, разделяемые данные, переменная условия, предикат, поток, доступ на чтение, доступ, запись, множества, захват, критический интервал, ожидание, разделы, часы, таймер, средство межпроцессного взаимодействия, рекомендательный интерфейс, очередь, очереди сообщений, разделяемый сегмент памяти, класс, время доступа, объект, компонент, трассировка, база данных учетной информации о пользователях, поиск, сортировка, пользовательский контекст, вещественная арифметика, обход файловой иерархии, контроль переполнения, защитная область, операционная система, атрибут потока управления, атрибут, маска блокированных сигналов, пространство, ключ, инициализирующие действия, индивидуальные данные потока управления, fork, маска сигналов, среда вещественной арифметики, выход, терминирование извне, тип терминирования, стек обработчиков завершения, деструктор индивидуальных данных, терминирование потока управления, динамическое обособление, частичный результат, код ошибки, приложение, верхняя грань приоритетов выполнения, разделяемая переменная, цикла, разрушение переменной условия, интеллектуальное средство синхронизации, многопроцессорная конфигурация с разделяемой памятью, переключение контекста, расходы, установка спин-блокировки, снятие спин-блокировки, средство синхронизации, устройство управления памятью, файловый дескриптор, идентификатор группы, параметр планирования, контроль, уведомление о событии, extension, RTS, жизненный цикл, значение, генерация сигнала, вызов функции, сигнал реального времени, доставка сигнала, альтернативный стек, обработка сигналов, нелокальный переход, открытие очереди, отправка сообщения в очередь, атрибут очереди, контроль прав доступа, отправка, приоритет сообщения, установка атрибута очереди, верхняя граница размера сообщений, дескриптор, семафор реального времени, механизм синхронизации, ресурс, значение семафора, именованный семафор, неименованный семафор, освобождение семафора, бинарный семафор, объект в разделяемой памяти, объект в типизированной памяти, адресное пространство процесса, отображение, отмена отображения, согласование состояния оперативной и долговременной памяти, интерфейс, пул памяти, адрес, поведение приложения, отмена удержания, место, длительность ожидания, процессор, процессорное время, опрос, опрос параметров планирования, циклическое планирование, операции передачи данных, постановка запроса в очередь, список запросов, асинхронный ввод/вывод, sync, оптимизация работы с файлами, случайный доступ, однократный доступ, конфигурационные константы, байт, поток трассировки, программа, пользовательское событие, системное событие, журнал трассировки, правила обработки ситуации заполнения, приостановка трассировки, создание потока трассировки, атрибутный объект потоков трассировки, поведенческий атрибут, статус потока трассировки, опрос атрибутов потока трассировки, идентификатор типа события, имя события, завершение работы, статус ошибки, подкласс, контекст, стек выполнения, управляющие, режим округления, Типовая, псевдотерминал

Основные понятия и объекты, рассматриваемые в курсе

Настоящий курс является продолжением курса [1]. В принципе, разделение единой темы "Программирование в стандарте POSIX" на две части носит скорее технический, чем принципиальный характер, однако у второй части есть свой стержень – мобильное программирование приложений реального времени.

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

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

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

Для приложений реального времени исключительно важно и активно используется понятие планирования.

Планированием, согласно стандарту POSIX-2001, называется применение политики выбора процесса или потока управления, готового к выполнению, для его перевода в число активных, а также политики изменения списков равноприоритетных потоков управления.

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

Операции с потоками управления можно подразделить на две группы:

  • создание, терминирование, выполнение других управляющих операций;
  • синхронизация.

В таком порядке они и рассматриваются в настоящем курсе.

При анализе средств синхронизации потоков управления следует учитывать, что, по сравнению с процессами, потоки управления характеризуются двумя особенностями:

  • на порядок меньшими накладными расходами на обслуживание;
  • существенно более тесным взаимодействием в общем адресном пространстве.

Чтобы быть практически полезными, средства синхронизации, специально ориентированные на потоки управления, должны быть оптимизированы с учетом обеих отмеченных особенностей.

К числу таких средств, присутствующих в стандарте POSIX-2001, принадлежат мьютексы, переменные условия, блокировки чтение-запись, спин-блокировки и барьеры.

Мьютекс – это синхронизирующий объект, использование которого позволяет множеству потоков управления упорядочить доступ к разделяемым данным.

Переменная условия в качестве синхронизирующего объекта дает потокам управления возможность многократно приостанавливать выполнение, пока некий ассоциированный предикат не станет истинным. Говорят, что поток, выполнение которого приостановлено на переменной условия, блокирован на этой переменной.

Блокировки чтение-запись (много читателей или один писатель) в каждый момент времени позволяют нескольким потокам управления одновременно иметь к данным доступ на чтение или только одному потоку – доступ на запись.

Спин-блокировки представляют собой низкоуровневое средство синхронизации. Как и мьютексы, они предназначены для упорядочения доступа множества потоков управления к разделяемым данным.

Барьеры предназначены для синхронизации множества потоков управления в определенной точке их выполнения.

Средства синхронизации могут использоваться для достижения двух существенно разных целей:

  • захват (как правило, на короткое время) разделяемого объекта для защиты критического интервала;
  • ожидание (долгое или даже потенциально неограниченное) наступления некоторого события, выполнения некоторого условия.

Мьютексы и блокировки можно отнести к первой из выделенных категорий, переменные условия и барьеры – ко второй.

Тема " мобильное программирование приложений реального времени" разбита в курсе на следующие разделы:

  • одношаговое порождение процессов ;
  • сигналы реального времени;
  • часы и таймеры ;
  • средства межпроцессного взаимодействия;
  • объекты в памяти;
  • удержание процессов в памяти;
  • приоритетное планирование ;
  • асинхронный ввод/вывод;
  • рекомендательные интерфейсы.

Одношаговое порождение процессов основано на применении функций posix_spawn() и posix_spawnp().

Под сигналами реального времени понимается не нарушающее совместимости расширение общего механизма сигналов, повышающее детерминированность за счет постановки сигналов, асинхронно доставленных приложению, в очередь.

Основные понятия, ассоциированные с часами и таймерами, были рассмотрены в курсе [1]. В настоящем курсе анализируются необязательные элементы стандарта POSIX-2001, специфичные для реального времени.

В качестве средств межпроцессного взаимодействия в реальном времени в стандарт POSIX-2001 включены очереди сообщений, семафоры и разделяемые сегменты памяти (см. также курс [1], где детально анализируется другой класс средств межпроцессного взаимодействия с аналогичными названиями).

Чтобы время доступа к объекту было по возможности минимальным и не превышало заданной величины, этот объект делают резидентным в физической памяти. Применительно к процессам подобный подход реализуется посредством удержания в памяти страниц, принадлежащих прикладному процессу.

Достижению той же цели – минимизации времени (а также унификации) доступа – служит механизм объектов в памяти.

Приоритетное планирование (или планирование, основанное на приоритетах) – это средство усиления детерминированности, позволяющее приложениям определять порядок, в соответствии с которым потоки управления, готовые к выполнению, получают доступ к процессорным ресурсам.

Средства асинхронного ввода/вывода позволяют прикладным процессам ставить в очередь команды ввода/вывода данных и получать асинхронные уведомления о завершении выполнения этих команд.

Рекомендательные интерфейсы – это средство проинформировать операционную систему о поведении мобильного приложения, чтобы ОС могла принять меры для оптимизации его обслуживания. Например, если прогнозируется последовательный доступ к файлу, ОС может осуществлять предвыборку (опережающее чтение), чтобы совместить во времени ввод и обработку данных.

Приложения реального времени сложно не только разрабатывать, но и отлаживать, поскольку в понятие семантической корректности входит дополнительный компонент – соблюдение временных ограничений. Для решения этой проблемы в стандарте POSIX-2001 предусмотрен механизм трассировки.

Под трассировкой понимается порождение, накопление и анализ данных о событиях, имевших место при выполнении пользовательского приложения.

Применительно к приложениям реального времени трассировка помогает достичь по крайней мере трех целей:

  • оптимизировать структуру приложения на основе анализа трассировочных данных;
  • отладить приложение;
  • выявить причину аварийного завершения работы приложения.

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

Таковы основные понятия и объекты, ставшие предметом рассмотрения в настоящем курсе.

Павел Храмцов
Павел Храмцов
Россия
Денис Комаров
Денис Комаров
Россия, Москва