Научная статья на тему 'Генератор текста программ в исходном виде для систем реального времени'

Генератор текста программ в исходном виде для систем реального времени Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
315
61
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Генератор текста программ в исходном виде для систем реального времени»

<Тр^). Заменим пару полуинтервалов Zj, Zj+1 на пару полуинтервалов yj, yj+1. Пусть 1| - левая граница Zj, rj+1 - правая граница Zj+1.

Пусть Li обозначает ресурсную длительность задания с номером 1. Тогда примем Уj=[lj, lj+Lq) и Уj+l=[lj+Lq9 г(|+1)), где q=p(zj+l). Очевидно, что полуинтервалы у| и у|+1 смежные, и их объединение совпадает с объединением Zj и Zj+1. На у| и у|+1 определим р1ф, полагая p1(yj)=p(Zj+l) и р1(у|+0= =p(Zj). В остальных точках определения системы 8 положим р1(1)=рф. Можно проверить, что р1© -последовательная разрешающая функция планирования системы 8, такая, что р1)=6^, р)-1.

Если функция р1(1) немонотонная, то, снова применив процедуру уменьшения дефекта, получим новую функцию планирования с еще меньшим дефектом. И так далее, до тех пор, пока дефект не станет нулевым, а функция планирования монотонной. Теорема о монотонном планировании доказана.

Критерий разрешимости синхронных систем

Пусть дана синхронная система 8={(10, Ь1, Т1)}, 1=1, ..., N. Предположим нумерацию заданий системы такой, что Т1<Т1+1. Из теоремы о монотонном

планировании следует, что система разрешима тогда и только тогда, когда она монотонно разрешима. Отсюда вытекает следующий критерий разрешимости: система разрешима тогда и только тогда, когда для каждого к=1, ..., N выполняется неравенство Ь1+.+Ьк<Тк.

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

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

Дальнейшая работа связана с анализом разрешимости произвольных несинхронных систем.

Литература

Годунов А.Н. [и др.]. Введение в ос2000 // Вопросы кибернетики. Информационная безопасность. Операционные системы реального времени. Базы данных [под. ред. В.Б. Бете-лина]. М.: НСК РАН, 1999. С. 76-106.

УДК 658.512.011.56:004.42

ГЕНЕРАТОР ТЕКСТА ПРОГРАММ В ИСХОДНОМ ВИДЕ ДЛЯ СИСТЕМ реального времени

К.Г. Нархов (НИИСИРАН, г. Москва, kostas@niisi.ras.ru)

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

Ключевые слова: программирование, системы реального времени, генерация исходных текстов, XML, UML, моделирование, модель, надежность, многопоточность, исходный код.

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

Разработанные НИИСИ РАН технологические средства автоматизированной генерации СПО

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

ТСАГ СПО представляют собой совокупность следующих взаимодействующих программных средств: подсистема графического интерфейса (11111 И РВ), подсистема графического представления (ПГП РВ), подсистема текстовой поддержки графического представления (ПТП РВ) и подсистема генерации текстов программ в ис-

ходном виде (ПГЕН РВ). Программные средства ТСАГ СПО функционируют под управлением операционной системы типа Linux (например Red Hat Fedora Core 7).

ТСАГ СПО реализованы на основе стандарта унифицированного языка моделирования UML [1] и расширяемого языка разметки XML [2]. Согласно стандарту UML особенности моделируемого объекта должны изображаться графически в виде совокупности связанных между собой графических элементов.

В процессе проектирования программ ТСАГ СПО используют заготовки UML, которые представляются XML -документами и визуализируются ТСАГ СПО графическими вершинами (graphic node [1]) типа action [1]. XML-документы содержат представления конструкций языка программирования Си в соответствии со стандартом [3] в виде XML-разметки, а также данные, требуемые для отображения этих заготовок на диаграммах (количество графических вершин, отображаемый в графических вершинах текст).

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

Среди диаграмм проекта особое место занимают диаграммы программной деятельности (ДПД), представляющие собой новый вид диаграмм деятельности UML (таким образом, ДПД расширяют стандарт UML). Создавая программу, пользователь переносит заготовки UML из библиотеки заготовок UML (отражающие конструкции языка программирования Си) на ДПД и заполняет значения параметров этих заготовок. Такой перенос может предполагать вставку заготовки UML внутрь уже имеющейся. Заполнение значений параметров заготовки UML предполагает установку и сохранение значений полей диалогового окна «Параметры» ДПД.

XML-документы, представляющие заготовки UML, соответствуют XML-схеме, разработанной на основе стандарта языка Си [3] и позволяющей устанавливать синтаксическую правильность генерируемых из ДПД программ без предварительной компиляции. Кроме конструкций языка программирования Си, описанных в стандарте [3], библиотеки заготовок UML могут содержать заготовки, объединяющие несколько конструкций языка программирования Си, а также заготовки, представляющие собой XML -представления вызовов специальных функций, относящихся к работе на конкретной платформе (например, на платформе ос2000 [4]).

XML-документы, представляющие заготовки UML, содержат специальные технологические теги <parameter>, позволяющие настраивать заго-

товки UML в процессе составления ДПД, а также специальные разделительные теги <action-separator>, при помощи которых заготовки UML разбиваются на логические части, отображаемые на ДПД, со своими именами и графическими вершинами.

Для каждой ДПД можно построить результирующий XML-документ, объединяющий в себе XML-документы, которыми представлены на ДПД заготовки UML. Порядок объединения XML-доку -ментов соответствует порядку следования заготовок UML на конкретной ДПД. Результирующий XML-документ содержит конкретные значения параметров XML-документов, которыми представлены заготовки UML. ДПД считается корректной, если построенный из нее результирующий XML-документ соответствует XML-схеме языка Си. Проверка корректности ДПД обеспечивается на лету, непосредственно в момент ее построения. Единственным источником синтаксических ошибок могут быть параметры заготовок UML, значения которых определяет пользователь.

Представленные XML-документами данные удобны для автоматизированного разбора. Существуют программные библиотеки функций, например LibXML 2.0 или Expat, которые предоставляют программисту интерфейс для работы с XML-документами. В ТСАГ СПО для работы с XML-документами используется библиотека LibXML 2.0.

Следует отметить, что данные, представленные XML-документами, удобны для обмена между программами. В ТСАГ СПО результирующий для ДПД XML-документ генерируется утилитой xmlgen, входящей в состав ТСАГ СПО. Этот документ преобразуется в текст программы в исходном виде на языке Си программой ПГЕН РВ, а также может быть открыт для просмотра и редактирования в программе ptp-editor, входящей в состав ТСАГ СПО.

Так как язык XML является стандартом представления данных де-факто, XML-документы можно просматривать и редактировать с помощью программ, входящих в стандартные поставки операционных систем Linux, например gedit и kate. Просмотр и редактирование XML-документов возможны и в коммерческих программных продуктах, например, SyncRO Soft Oxygen XML editor или Altova XMLSpy.

Программа ПГЕН РВ

ДПД являются основой для получения программы на языке программирования Си. Преобразование ДПД в текст программы в исходном виде выполняет входящая в состав ТСАГ СПО программа ПГЕН РВ, предназначенная для перевода программных моделей ВС РВ в набор файлов с текстом в исходном виде на языке Си. Программа

ПГЕН РВ поддерживает программный протокол обмена данными между программами, входящими в состав ТСАГ СПО. Программа использует библиотеки GTK2.0 и LibXML 2.0.

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

Алгоритм преобразования XML-документов, реализованный в ПГЕН РВ, предполагает, что в документе присутствуют теги <long_desc>, <short_ desc>, <param_desc>, <description>, <lparen>, <header-file>, <action_separator>, <new-line>. Эти теги являются управляющими для алгоритма: по ним ПГЕН РВ определяет начало, конец и тип синтаксических конструкций.

Таким образом, ПГЕН РВ, используя структурированные в XML-документах данные, порожда-

ет форматированную последовательность символов, являющуюся текстом программы в исходном виде на языке Си. Правила обработки XML-документов определяются как в схеме XML, так и непосредственно в алгоритме преобразования.

Вызов ПГЕН РВ в ТСАГ СПО выполняют программа ППГИ РВ, программа ПГП РВ, утилиты xmlgen, ptp-editor.

В ПГЕН РВ реализованы дополнительные функции, такие как форматирование файлов, проверка на соответствие схеме XML, отображение документа XML в виде дерева, вывод информации о результатах преобразования документов XML, вывод отладочной информации, вывод конфигурации ПГЕН РВ, запуск ПГЕН РВ в оконном режиме. Наличие этих функций позволяет использовать ПГЕН РВ отдельно от ТСАГ СПО как самостоятельную программу.

Логическая структура ПГЕН РВ

Программа ПГЕН РВ реализована на языке программирования Си. Список программных модулей с кратким описанием приведен в таблице 1.

У каждого программного модуля имеется пре-процессорная директива #include с одноименным заголовочным файлом. Заголовочные файлы содержат объявления используемых в программном

ppgiSyncFolder(), ppgiMessage(), AwakeXmlgen(), clearstr()

Рис. 1. Логические связи между программными модулями

модуле функций и располагаются в подкаталоге

include.

Таблица 1

Программные модули логически связаны между собой объявлениями внешних функций (extern). Список внешних функций приведен в таблице 2. Под внешней для программного модуля функцией понимается функция, не входящая в состав стандартных библиотек и определенная в другом модуле ПГЕН РВ.

Логические связи между программными модулями на уровне объявлений внешних функций (extern) представлены на рисунке 1.

После запуска ПГЕН РВ порождает следующие процессы: главный процесс ПГЕН РВ pgen_start; процесс графического интерфейса ПГЕН РВ (создание окон ПГЕН РВ, интерфейсных компонентов и т.д.) pgen_graph; процесс pgen_parse, обеспечивающий генерацию текстов

Рис. 3. Р-схема функции PgenfileParseQ

программ в исходном виде на языке Си из документов XML и проектов ТСАГ СПО; проверку на корректность и соответствие документов XML схеме XML. Модель реализации ПГЕН РВ в контексте взаимодействия с подсистемами ТСАГ СПО представлена на рисунке 2.

Имя модуля Функция

gui_interface.c Построение интерфейсных компонентов окна ПГЕН РВ (функции построения меню, элементов ввода, кнопок, списка, панелей инструментов)

pgengraph.c Работа с главным окном ПГЕН РВ (создание, закрытие)

pgenparse.c Разбор XML-документов

pgenutils.c Разбор документов XML (резервное копирование файлов, обработка комментариев, обработка проектов ШЛИ РВ)

regularexpr.c Разбор документов XML (используется механизм регулярных выражений)

spawns.c Запуск подсистем ППГИ РВ и ПГП РВ (xmlgen) из ПГЕН РВ

fifo_io_channels. c Обеспечение обмена данными между ПГП РВ (xmlgen) и ПГЕН РВ

package_info.c Работа с диаграммами ПГП РВ (получение списка ДПД проекта)

codeformat.c Форматирование исходного кода

Функция PgenfileParse() является основополагающей в ПГЕН РВ - в ней реализован алгоритм анализа и обработки XML -данных, выполняющий генерацию текста программы в исходном виде на языке Си. Функция PgenfileParse() определена в программном модуле pgenparse.c и является внешней для программных модулей pgenutils.c и guiinterface.c (см. табл. 2). Объявление Pgenfile-Parse() выполнено в заголовочном файле include/ pgenparse.h.

Функция PgenfileParse() реализована в соответствии с поточно-событийным принципом разбора XML-данных. Функция получает дескриптор XML-документа (вызов open) и начинает последовательное чтение строк этого документа, тем самым напоминая канал, исходными данными для которого выступает XML-разметка. Этот канал условно называется потоком событий. Р-схемы функции PgenfileParse() представлены на рисунках 3-5.

Таблица 2

Список внешних функций (extern) ПГЕН РВ

Вызывающий модуль Внешняя функция Модуль внешней функции Краткое описание внешней функции

gui interfaces PgenfileParse (); pgenparse.c Функция генерации текста программы в исходном виде на языке Си из XML-документа

getfile from_path(); pgenutils.c Функция извлечения подстроки имени файла из строки полного пути к файлу

clearstr(); pgenutils.c Функция очистки строки

pgengraph.c - - -

pgenparse.c regexpreplace (); regularexpr. c Дополнительная функция замены подстроки с использованием регулярных выражений

regexpr (); regularexpr. c Функция поиска подстроки, соответствующей регулярному выражению; функция возвращает подстроку, если таковая найдена

RE_replace (); regularexpr. c Основная функция замены подстроки с использованием регулярных выражений (перед заменой выполняется проверка на наличие заменяемой подстроки)

mainCODEFRMTFunc (); codeformat.c Функция форматирования текста программы в исходном виде на языке Си

clearstr(); pgenutils.c Функция очистки строки

get schemaname(); package info.c Функция получения пути к файлу XML-схемы проекта ПГП РВ

AwakeXmlgen(); spawns.c Функция запуска подпрограммы xmlgen в отдельном процессе (параметры запуска специфицированы в теле функции)

ppgiSyncFolder(); spawns.c Функция запуска ППГИ РВ в отдельном процессе (параметры запуска назначают синхронизацию проекта ППГИ РВ с файловой системой)

ppgiMessage(); spawns.c Функция запуска ППГИ РВ в отдельном процессе (параметры запуска назначают вывод сообщения ТСАГ СПО и специфицируют это сообщение)

generatePrjSources (); pgenutils.c Функция генерации текста программы в исходном виде на языке Си из проекта ТСАГ СПО (в теле функции выполняется вызов PgenfileParse)

comment replace (); pgenutils.c Функция обработки XML-комментариев

start xml comment replace (); pgenutils.c Функция замены подстроки <!-- на подстроку /*

end xml comment replace (); pgenutils.c Функция замены подстроки --> на подстроку */

replace spaces n tabs (); pgenutils.c Функция замены подстрок из нескольких пробелов или символов табуляции на символ пробела или символ табуляции

open connection(); fifo io channels.c Функция открытия ffo-каналов на чтение/запись

send channel func(); fifo io channels.c Функция передачи данных по ffo-каналу

close connection(); fifo io channels.c Функция закрытия ffo-каналов на чтение/запись

dump report (); pgenutils.c Функция записи строки отладочной информации в текстовый файл

InitWindow(); pgengraph.c Функция-заглушка (return 0)

ExecGraphInterface(); pgengraph.c Функция инициализации главного окна ПГЕН РВ (при работе в оконном режиме g1)

ClosingAppWindow (); pgengraph.c Функция закрытия главного окна ПГЕН РВ

backUpPreviousFile(); pgenutils.c Функция резервного копирования файлов c текстом программы в исходном виде на языке Си

g2 execution routine(); gui interface.c Функция инициализации главного окна ПГЕН РВ (при работе в оконном режиме g2)

pgenutils.c PgenfileParse (); pgenparse.c Функция генерации текста программы в исходном виде на языке Си из XML-документа

get diagrams (); package info.c Функция получения списка диаграмм ДПД для проекта ПГП РВ

get schemaname(); package info.c Функция получения пути к файлу XML-схемы проекта ПГП РВ

get diagram name(); package info.c Функция получения имени ДПД в проекте ПГП РВ

AwakeXmlgen(); spawns.c Функция запуска подпрограммы xmlgen в отдельном процессе (параметры запуска специфицированы в теле функции)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ppgiMessage(); spawns.c Функция запуска ППГИ РВ в отдельном процессе (параметры запуска назначают вывод сообщения ТСАГ СПО и специфицируют это сообщение)

ppgiSyncFolder(); spawns.c Функция запуска ППГИ РВ в отдельном процессе (параметры запуска назначают синхронизацию проекта ППГИ РВ с файловой системой)

regularexpr. c - - -

spawns.c open connection(); fifo io channels.c Функция открытия ffo-каналов на чтение/запись

close connection(); fifo io channels.c Функция закрытия ffo-каналов на чтение/запись

clearstr(); pgenutils.c Функция очистки строки

fifo io channels.c - - -

package info.c - - -

codeformat.c - - -

Прочие функции, реализованные в ПГЕН РВ, в этой статье не рассматриваются, так как они являются утилитарными и используются для обеспечения корректной работы оконного интерфейса ПГЕН РВ (процесс pgen_graph), обмена данными с подсистемами ТСАГ СПО (процессы pgenstart, pgen_parse) и управления протоколированием и отладкой ПГЕН РВ.

Используемые технические и программные средства

Программа ПГЕН РВ эксплуатируется на персональном компьютере типа IBM PC (инструментальная ЭВМ). Необходимая и достаточная для работы ПГЕН РВ конфигурация: корпус ATX,

С

Инициализация локальных переменных

D

Добавление строки в список #include

Добавление строки в список #include

Сохранение данных

Инициализация глобальных переменных

t

Конец

Рис. 4. Р-схема подпрограммы анализа строки функции PgenfileParseQ

Замена подстрок из нескольких пробелов или на символ пробела или соответственно

Объединение йгНпе и последней строки данных из ОП

Сохранение данных в ОП

Сброс флага incomment

( Конец )

Рис. 5. Р-схема обработки XML данных в функции PgenfileParseQ

процессор Intel Celeron 3,06 ГГц, оперативная память 2 Гб, сетевая карта Marvell Technology Group Ltd, 88E8001 Gigabit Ethernet Controller (или аналогичная), жесткий диск не менее 80 Гб, DVD-RW-дисковод.

Для работы в диалоговом режиме требуются цветной графический монитор, клавиатура, манипулятор типа «мышь».

На инструментальную ЭВМ должно быть установлено следующее ПО: операционная система Linux Fedore Core 7, подсистемы ТСАГ СПО, пользовательская среда GNOME 2.18.0, обозреватель файлов для среды GNOME Nautilus 2.18.1.

Вызов и загрузка

Обращение к подсистеме ПГЕН РВ может быть выполнено как из командной строки Unixshell, так и из прикладной программы. Предположим, что /usr/local/bin/pgen - путь к исполняемому файлу pgen подсистемы ПГЕН РВ, тогда вызов из командной строки Unix-shell будет выглядеть следующим образом:

$ ./usr/local/bin/pgen [параметры] При использовании ключа -pgp ПГЕН РВ после завершения обработки входных документов XML отправляет сообщения в канал FIFO. Файл канала FIFO PGEN_xxxx_yyyy_OUT размещается в каталоге /$HOME_DIR/.pgp/, где $HOME_DIR - пользовательский каталог; xxxx - числовой идентификатор родительского процесса; yyyy -числовой идентификатор процесса ПГЕН РВ. Сообщение соответствует следующему формату:

Mxxxx, где xxxx - числовой идентификатор процесса ПГЕН РВ.

При использовании ключей -prj и -isrp ПГЕН РВ создает файлы каналов FIFO XMLGEN_xxxx_ yyyy_OUT и XMLGEN_xxxx_yyyy_IN в каталоге /$HOME_DIR/pgp/, где $HOME_DIR - пользовательский каталог; xxxx - числовой идентификатор процесса ПГЕН РВ; yyyy - числовой идентификатор процесса программы-потомка. ПГЕН РВ ожидает получения сообщения по каналу FIFO XMLGEN_xxxx_yyyy_IN, которое свидетельствует о завершении программы-потомка.

Сообщение соответствует формату Mxxxx, где xxxx - числовой идентификатор процесса программы-потомка.

Входные и выходные данные

Программа ПГЕН РВ выполняет преобразование XML-документов в файлы с текстом в исходном виде на языке Си. Пути к XML-документам в файловой системе инструментальной ЭВМ передаются ПГЕН РВ в качестве параметров. Вызов ПГЕН РВ из командной строки UNIX-shell может быть выполнен, например, следующим образом: $ /usr/local/bin/pgen -in while.xml -out while.c -sch schema.xsd

Входными данными для ПГЕН РВ при работе в текстовом режиме являются входные параметры, которые передаются ПГЕН РВ при запуске (полный список параметров вызова приведен в таблице 3). При работе ПГЕН РВ с документами XML необходимыми являются следующие входные данные:

-in file - ключ специфицирует файл входного документа XML;

-out file - ключ специфицирует файл, в который будут помещены исходные тексты на языке Си;

-sch file - ключ специфицирует схему XML.

При работе ПГЕН РВ с проектами ТСАГ СПО необходимыми являются следующие входные данные:

-prj path - ключ специфицирует каталог, где располагается проект ТСАГ СПО;

-isrp file - ключ специфицирует файл проекта ТСАГ СПО.

Выходными данными для ПГЕН РВ являются один или несколько файлов с текстом в исходном виде на языке Си, сообщения, передаваемые ПГЕН РВ вызывающей подсистеме через канал FIFO, сообщения, передаваемые ПГЕН РВ другим программам, сообщения средств контроля ПГЕН РВ, файл отчета.

При использовании ключей -in и -out ПГЕН РВ генерирует на основании документа XML, специфицированного ключом -in, файл с исходным текстом на языке Си, специфицированный входным параметром -out. Имя и путь к файлу с исходным текстом определяются параметром -out.

Таблица 3

Синтаксис входных параметров Назначение ключа

-in файл1 Определяет входной XML-документ

-out файл Определяет файл, в который будет сохранен исходный текст программы на языке Си

-sch файл Определяет схему XML

-io Вывод в стандартный поток ввода/вывода представления XML-документа в виде дерева

-с Вывод в стандартный поток ввода/вывода внутреннего представления XML-документа в виде конструкций языка Си

-v Вывод текущей версии ПГЕН РВ

-pgp Отправка сообщения в FIFO-канал после завершения обработки входного документа XML

-t Вывод в стандартный поток ввода/вывода времени обработки входного документа XML

-g1 Запуск ПГЕН РВ с выводом окна, отображающего ход процесса обработки входного документа XML в процентах

-g2 Запуск ПГЕН РВ c инициализацией графического (оконного) интерфейса

-r файл Определяет файл, в который будет помещен отчет об анализе выходного документа XML

-debug Вывод в стандартный поток ввода/вывода диагностической информации (активация средств внутреннего контроля)

-valid Проверка входного документа XML на соответствие схеме XML и вывод результатов в стандартный поток ввода/вывода

-sets Вывод конфигурации ПГЕН РВ в стандартный поток ввода/вывода

-prj файл Определяет каталог с проектом ТСАГ СПО (используется совместно с ключом -isrp)

-isrp файл Определяет файл проекта ТСАГ СПО (используется совместно с ключом -prj)

При использовании ключей —рг| и —18гр ПГЕН РВ генерирует один или несколько файлов с исходным текстом на языке Си и помещает их в каталог $18ЯР_РКО,1_РАТН^еп/8гс/1а81, где $18ЯР_РКО^РАТН специфицируется ключом -рг|. Сообщения, передаваемые ПГЕН РВ вызывающей подсистеме через FIFO-кaнaл, соответствуют формату Мхххх, где хххх - числовой идентификатор процесса ПГЕН РВ. Файл отчета создается ПГЕН РВ в случае, если был указан параметр —г, который специфицирует путь к файлу отчета и его имя.

Перспективы развития

ПГЕН РВ может применяться как в виде отельного полнофункционального приложения, так и в составе системы проектирования. В на-

стоящее время активно развиваются приложения, предоставляющие интерфейсы для разработки собственных расширений (add-on) и плагинов (plug-in). Таким образом, генератор исходных текстов может быть реализован для систем типа Eclipse, NetBeans и т.д.

Не менее важны перспектива создания библиотек конструкций для популярных языков типа Java, C#, VisualBasic, а также реализация средств автоматизированного документирования сгенерированного исходного кода.

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

участки кода, обработчики исключений и прерываний [4] и др.

Литература

1. ISO/IEC 19501:2005(E), January 2005. Unified Modeling Language Specification. Version 1.4.2 formal/05-04-01.

2. Extensible Markup Language (XML) 1.0 (Fourth Edition) W3C Recommendation 16 August 2006, edited in place 29 September 2006. URL: http://www.w3.org/TR/REC-xml/ (дата обращения: 16.09.2010).

3. ISO/IEC 9899:1999: Programming languages - C (Second Edition), N.Y.: American National Standards Institute, 1999, pp. 402-416.

4. Безруков В.Л. [и др.]. Введение в ос2000. Вопросы кибернетики. Информационная безопасность. Операционные системы реального времени. Базы данных [под. ред. В.Б. Бете-лина]. М.: НИИСИ РАН, 1999. С. 76-109.

УДК 004.451.21

АЛГОРИТМ ОБЕСПЕЧЕНИЯ ИСКЛЮЧИТЕЛЬНОГО ДОСТУПА К КОММУТАТОРУ RapidIO

А.А. Бакулин (нниси ран, г. Москва, alexander.bakulin@gmail.com)

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

Ключевые слова: RapidЮ, взаимное исключение, алгоритм.

Сеть передачи данных RapidЮ [1] состоит из связанных между собой оконечных устройств (ОУ, или просто устройств) и коммутаторов. Коммутаторы образуют коммуникационную среду, обеспечивающую прозрачную доставку пакетов между ОУ. В сети RapidЮ невозможна доставка пакетов между двумя узлами по нескольким маршрутам, поэтому сообщения, отправленные одним устройством одному адресату, доходят в соответствии с порядком их отправки. Однако пакет, отправленный одним устройством, может дойти до адресата раньше, чем пакет, отправленный до него с другого устройства.

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

Если какой-либо коммутатор не будет настроен, система может стать неработоспособной. Поэтому в целях отказоустойчивости настройку коммутаторов системы могут осуществлять одновременно несколько ОУ; если некоторые ОУ выйдут из строя, перезагрузятся или просто не будут

включены, настройку коммутаторов выполнят остальные.

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

Назовем конечную последовательность действий ОУ по настройке одного коммутатора, вмешательство в которые со стороны других ОУ не допускается, критической секцией (КС). Под исключительным доступом будем понимать, что, во-первых, никакие два ОУ не могут выполнять критическую секцию одновременно и, во-вторых, если в определенный момент несколько ОУ решили выполнить критическую секцию, то через некоторое конечное время одно из этих ОУ должно начать ее выполнение.

Для упрощения реализации исключительного доступа каждый коммутатор содержит особый регистр блокировки [2] (Host Base Device ID Lock

i Надоели баннеры? Вы всегда можете отключить рекламу.