Мобильное программирование приложений реального времени в стандарте POSIX

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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




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

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

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


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

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

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

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

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

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

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

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

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


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



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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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



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

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

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


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

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

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

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

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

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

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

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

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


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



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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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


Содержание раздела