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

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

Аннотация: Анализируются основные идеи, понятия и объекты, обслуживающие мобильные приложения реального времени. Детально рассматриваются одношаговое порождение процессов, сигналы реального времени, часы и таймеры.
Ключевые слова: POSIX, мобильное программирование, целый, одношаговое порождение процесса, сигнал реального времени, часы, таймер, средство межпроцессного взаимодействия, объект в памяти, удержание процесса в памяти, приоритетное планирование, асинхронный ввод/вывод, рекомендательный интерфейс, fork, сигнал, очередь сообщений, семафор, разделяемый сегмент памяти, время доступа, ПО, объект, файл, отображенный в память, разделяемая память, типизированная память, отображение объекта, доступ, адресное пространство, пул, порт, приоритет, политика планирования, очередь, устройство управления памятью, эффективная реализация, приложение реального времени, библиотечная реализация одношагового порождения, execv, execvp, идентификатор, порожденный процесс, контроль, файловый дескриптор, идентификатор группы процесса, идентификатор пользователя процесса, параметр планирования, маска сигналов, способ обработки сигналов, игнорируемый сигнал, родительский процесс, встраивания, значение, функция, дескриптор, вывод, атрибутный объект, действующий идентификатор пользователя процесса, идентификатор родительского процесса, бит ПДИП, бит ПДИГ, аргумент, подразумеваемая обработка сигналов, обработчик разветвления процессов, потоки управления, перенаправление стандартного ввода, перенаправление стандартного вывода, файл, стандартный ввод, накладные расходы на одношаговое порождение процессов, программа, детерминированная доставка уведомлений о событиях, асинхронная доставка уведомлений о событиях, надежная доставка уведомлений о событиях, ранжированная по приоритетам доставка уведомлений о событиях, дифференциация между сигналами одного типа, extension, RTS, реальное время, жизненный цикл, срабатывание таймера, операции, способ уведомления, событие, уведомление о событии, значение сигнала, объединение, вызов функции, поле, указатель, функция уведомления, прерывание, доставка сигналов в порядке возрастания номеров, права, очередь ждущих сигналов, монотонные часы, альтернативный стек, структурный тип, OSS, стек, расходы, приложение, нелокальный переход, обед философов, восстановление маски сигналов после нелокального перехода, создание таймера, разрешающая способность часов, общесистемные часы, часы реального времени, конфигурационные константы, часы процессорного времени, идентификатор часов, абсолютный момент времени, приостановка выполнения, периодический процесс, текущее время, вычисление, вытесненный поток управления, поток, идентификатор таймера, EVP, удаление таймера, избыточное срабатывание таймера, деструктор индивидуальных данных, терминирование извне, запрос, статус завершения

Основные идеи, понятия и объекты

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

В качестве средств для решения этой подзадачи в стандарте POSIX-2001 присутствует целый ряд идей, понятий, объектов и функций, которые можно сгруппировать в следующие предметные области:

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

Одношаговое порождение процессов (в противоположность традиционной для ОС Unix двухшаговой модели fork()/exec() ) основано на применении функций posix_spawn() и posix_spawnp(). Оно в любом случае менее тяжеловесно (хотя и тяжеловеснее порождения потоков управления), но особенно актуально для аппаратных конфигураций, в которых отсутствует поддержка виртуальной памяти и, как следствие, реализация функции fork() проблематична.

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

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

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

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

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

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

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

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

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

Отметим, что объект в памяти не обязательно должен быть резидентным в физической памяти.

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

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

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

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