<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="ru">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Использование методов модельно-ориентированной обратной разработки для анализа ARINC 653 совместимого функционального ПО</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">С</forename><forename type="middle">Л</forename><surname>Лесовой</surname></persName>
							<email>lesovoy@ispras.ru</email>
						</author>
						<title level="a" type="main">Использование методов модельно-ориентированной обратной разработки для анализа ARINC 653 совместимого функционального ПО</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">761A88EB6DD68AC55092D315C92CF47D</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-23T22:17+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>109004</term>
					<term>Россия</term>
					<term>г. Москва</term>
					<term>ул. А. Солженицына</term>
					<term>д. 25. Тел. +7(495)912-56-59 (доб. 405</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>This paper is dedicated to methods of Model-Driven Reverse Engineering for avionics software analysis. An algorithm for building architecture models from source code of application software is described in this paper. Architecture Analysis &amp; Design Language is used as a target language for architecture modeling. We consider ARINC 653-compatible application software for models building. The algorithm implementation is based on CPAchecker static analyzer.</p><p>Аннотация. Исследуется применение методов модельноориентированной обратной разработки для анализа программного обеспечения (ПО) для авионики. Описывается алгоритм построения архитектурных моделей по исходному коду функционального ПО. Для описания архитектурных моделей используется язык AADL (Architecture Analysis &amp; Design Language). Для построения моделей рассматривается ARINC-653 совместимое ПО. Предложенный алгоритм реализован на базе инструмента статического анализа CPAchecker.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="ru">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Введение</head><p>Представление архитектуры системы в виде формализованных архитектурных моделей позволяет исследовать ее различные статические и динамические характеристики с помощью существующих инструментальных средств. При эксплуатации программно-аппаратных систем часто возникают задачи по их рефакторингу связанные с обновлением отдельных компонентов системы, интеграцией в существующую систему новых компонентов, переносом существующего ПО на другую аппаратную платформу и т.п. В этом случае архитектура системы строится не «с нуля», а на основе уже имеющихся программноаппаратных компонентов. Задача построения архитектурной модели на основе имеющегося программного кода системы относится к классу задач модельноориентированной обратной разработки. В данной работе в качестве языка моде-лирования используется язык AADL (Architecture Analysis &amp; Design Language).</p><p>Для построения моделей используется функциональное ПО для авионики, которое соответствует спецификации ARINC 653 <ref type="bibr" target="#b2">[3]</ref>.</p><p>Целью данной работы является разработка и реализация алгоритма построения архитектурных моделей в формате AADL на основе автоматического анализа исходного кода функционального ПО на языке С для ARINC 653 совместимых ОС. В работе рассматривается двухэтапный алгоритм построения архитектурной модели функционального ПО. На первом этапе производится анализ исходного кода ПО и определяются ARINC 653 сущности и их связи. На втором этапе ARINC 653 сущности трансформируются в AADL модель. Предложенный алгоритм реализован на базе инструмента статического анализа CPAchecker <ref type="bibr" target="#b3">[4]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>2</head><p>Анализ исходного кода   </p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>4 3 .</head><label>43</label><figDesc>Оценка производительности Для оценки производительности алгоритма необходимо исследовать время выполнения этапа анализа исходного кода, на который приходятся основные временные затраты работы алгоритма. На рисунке 3 представлено три графика, отражающие зависимость среднего времени анализа исходного кода от сложности Рис. График зависимости времени анализа исходного кода от сложности ПО. анализируемого функционального ПО. Сложность ПО определяется количеством создаваемых ARINC 653 процессов и количеством используемых ресурсов (портов) в потоковой функции каждого процесса. Для исследования использовалось функциональное ПО, в котором количество ARINC 653 процессов последовательно увеличивалось с двух до тридцати двух с шагом два. Кроме этого, для каждого варианта конфигурации ПО, в котором количество процессов зафиксировано, использовались три разные потоковые функции: первая потоковая функция обращается к двум портам (нижний график), вторая -к четырем (средний график) и третья -к восьми (верхний график). Из графика видно, что при использовании самой простой конфигурации ПО среднее время выполнения этапа анализа исходного кода составляет около 100 миллисекунд. При использовании самой сложной конфигурации ПО среднее время выполнения этапа анализа исходного кода составляет немного больше одной секунды (1067 миллисекунд). Для всех остальных промежуточных конфигураций ПО значение среднего времени анализа не выходило за пределы диапазона значений от 100 до 1067 миллисекунд. Измерения проводились на компьютере с операционной системой GNU/Linux (Ubuntu 16.04) x86_64 с процессором Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz и оперативной памятью 16 Гбайт.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>, при этом поле ENTRY_POINT содержит указатель на потоковую функцию, что позволяет ОС неявно вызывать потоко-вую функцию при выполнении программы. Для проведения анализа потоковой функции в рамках рассматриваемого алгоритма вызов потоковой функции искусственно добавляется уже на этапе анализа программы.Перед началом анализа программы CPAchecker преобразует исходный код анализируемой программы в автомат потока управления -Control-Flow Automaton (CFA). CFA представляет собой направленный граф, узлы которого соответствуют точкам в программе, а ребра -операциям. Анализа исходного кода программы выполняется за два прохода. При первом проходе определяются все создаваемые процессы и их атрибуты. При втором проходе происходит искусственное добавление вызовов всех используемых потоковых функций непосредственно в CFA перед последней программной инструкцией функции main. Для определения фактических значений переменных в любой точке программы используется алгоритм анализа явных значений (explicit-value analysis)<ref type="bibr" target="#b4">[5]</ref>.При анализе функционального ПО для ARINC 653 совместимых ОС особый интерес представляет случай, когда одна и та же потоковая функция используется несколькими процессами, но с разными параметрами. В листинге 2 представлен фрагмент программы в котором функции first_process, second_process и third_process являются потоковыми функциями для трех различных процессов. Каждая из этих функций в свою очередь вызывает одну и ту же функцию shared_process, но с различными значениями для параметров read и write. Фактически функции first_process, second_process и third_process являются лишь оболочками для вызова потоковой функции shared_process с различными пара-Использование параметров в потоковой функции.При анализе потоковой функции, используемой несколькими процессами, может потребоваться информация о том, какому именно процессу она принадлежит. При создании процесса операционная система назначает ему идентификатор. В дальнейшем идентификатор текущего потока можно узнать с помощью вызова функции ОС GET_MY_ID. Учитывая, что при статическом анализе реальных вызовов функций ОС не происходит, на этапе анализа в программу вводится искусственная переменная $PID, в которой хранится идентификатор текущего процесса. 1. в программе создаются три ARINC 653 потока и четыре порта; 2. первый поток обращается к порту RT на чтение и к порту WAZ на запись; 3. второй поток обращается к порту RDELTAE на чтение и к порту WQ на запись; 4. третий поток обращается к портам RT и RDELTAE на чтение и к портам WAZ и WQ на запись. Листинг 5. AADL поток. В листинге 5 представлен фрагмент AADL модели в текстовом формате, содержащий описание AADL потока, который соответствует ARINC 653 процессу из листинга 1. В листинге 6 представлен фрагмент AADL модели содержащий реализацию AADL процесса. AADL процесс состоит из трех AADL потоков, которые соответствуют трем ARINC 653 процессам, использующим одну и ту же потоковую функцию shared_process2 из листинга 4. Эта потоковая функция устанавливает разные правила работы с портами для разных ARINC 653 процессов.</figDesc><table><row><cell cols="2">} Информация, полученная в результате анализа исходного кода, сохраняется Source_Stack_Size =&gt; 8096 Bytes;</cell></row><row><cell cols="2">} в программе во внутреннем формате и используется в дальнейшем при построе-Priority =&gt; 1;</cell></row><row><cell cols="2">нии архитектурной модели. В следующем разделе будет описан второй этап Period =&gt; 63 ms;</cell></row><row><cell cols="2">алгоритма -этап построения архитектурной модели. 3 Построение архитектурной модели Compute_Deadline =&gt; 63 ms; Листинг 2. void CREATE_PROCESS ( end P1_process;</cell></row><row><cell cols="2">PROCESS_ATTRIBUTE_TYPE *attributes,</cell></row><row><cell>PROCESS_ID_TYPE</cell><cell>*process_id,</cell></row><row><cell cols="2">RETURN_CODE_TYPE process implementation main_process.impl *return_code)</cell></row><row><cell cols="2">subcomponents Листинг 3. Прототип функции создания ARINC 653 процесса. P1_process: thread P1_process.impl;</cell></row><row><cell cols="2">P2_process: thread P2_process.impl;</cell></row><row><cell cols="2">P3_process: thread P3_process.impl; Для того чтобы определить какому именно процессу принадлежит потоковая static void shared_process2(void) { static PROCESS_ID_TYPE pid_P1, pid_P2, pid_P3; ... PROCESS_ATTRIBUTE_TYPE P1_process_attrs = { .PERIOD = 63000000LL, .TIME_CAPACITY = 63000000LL, .STACK_SIZE = 8096, .BASE_PRIORITY = 1, .DEADLINE = SOFT, }; P1_process_attrs.ENTRY_POINT = shared_process2; strncpy(P1_process_attrs.NAME, "P1_process", sizeof(PROCESS_NAME_TYPE)); CREATE_PROCESS(&amp;P1_process_attrs,&amp;pid_P1,&amp;ret_process); Листинг 1. Создание ARINC 653 процесса. Создание процесса происходит с помощью вызова функции CREATE_PROCESS, которой в качестве первого аргумента передается структу-ра, содержащая атрибуты создаваемого процесса. В листинге 1 для задания атрибутов процесса используется переменная P1_process_attrs с типом PROCESS_ATTRIBUTE_TYPE. Поле ENTRY_POINT содержит указатель на потоковую функцию, т.е. функцию, которой передается управление при старте процесса. В рассматриваемом примере программы явный вызов потоковой функции shared_process в ней вызываются соответствующие функции для чте-ния и записи в порт READ_FROM_SAMPLING_PORT и WRITE_TO_SAMPLING_PORT. Для определения значения фактических пара-метров read и write используется алгоритм анализа явных значений. В результа-те для разных процессов внутри функции shared_process будут выполняться разные фрагменты кода. shared_process(false, true); } static void shared_process(bool read, bool write) { if (read) { READ_FROM_SAMPLING_PORT(RT); } if (write) { WRITE_TO_SAMPLING_PORT(WAZ); функция при ее вызове в программе в CFA непосредственно перед ее вызовом добавляется операция присваивания переменной $PID значения идентификато-ра текущего процесса. На рисунке 1 представлен фрагмент CFA в графическом формате. RETURN_CODE_TYPE ReturnCode; PROCESS_ID_TYPE MyId; GET_MY_ID ( &amp;MyId, &amp;ReturnCode ); if (MyId == pid_P1) { READ_FROM_SAMPLING_PORT(RT); WRITE_TO_SAMPLING_PORT(WAZ); } if (MyId == pid_P2) { thread P1_process features RT: in data port {Source_Name =&gt; RT; ARINC653::Sampling_Refresh_Period =&gt; 100 ms;}; WAZ: out data port {Source_Name =&gt; WAZ; ARINC653::Sampling_Refresh_Period =&gt; 100 ms;}; properties connections con0: port RT -&gt; P1_process.RT; con1: port P1_process.WAZ -&gt; WAZ; con2: port RDELTAE -&gt; P2_process.RDELTAE; … Листинг 6. Фрагмент AADL процесса. функции shared_process2 отсутствуетметрами. В зависимости от значений фактических параметров при вызове … Полученная архитектурная модель может использоваться для дальнейшего static void first_process(void) { анализа и проектирования системы с помощью любого инструмента, поддержи-shared_process(true, false); } вающего спецификацию AADL версии 2.1. В данной работе был использован Листинг 4. Потоковая функция shared_process2. инструмент MASIW [6], который предназначен для проектирования и анализа static void second_process(void) { shared_process(true, true); } static void third_process(void) { систем интегрированной модульной авионики. На рисунке 2 представлено гра-Для рассматриваемого примера, в котором используется потоковая функции фическое представление AADL модели полученное с помощью инструмента shared_process2, с помощью предложенного алгоритма анализа было определе-но, что: MASIW.</cell></row></table><note>Исследуемое функциональное ПО предоставляется в виде файлов с исходными кодами на языке С, в которых используются вызовы функций ОС, определенные спецификацией ARINC 653. Для демонстрации особенностей работы алгоритма используется пример программы, в которой создаются три процесса и четыре порта. Каждый из процессов реализует свою логику работы с портами. В листинге 1 представлен фрагмент ПО, в котором создается один процесс. Рис. 1. Фрагмент автомата потока управления (CFA) программы. На втором этапе на основании информации об имеющихся ARINC 653 объектах и логических связей между ними строится AADL модель. ARINC 653 сущности преобразуются в элементы AADL модели по определенным правилам: ARINC 653 раздел соответствует AADL процессу, ARINC 653 процесс соответствует AADL потоку, ARINC 653 порты без очереди (SAMPLING PORT) отображаются в AADL модели с помощью компонента data порт, порты с очередью (QUEUING PORT) отображаются в AADL модели с помощью компонента event data порт. Рис. 2. Графическое представление AADL модели.</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head>5</head><label></label><figDesc>ЗаключениеВ данной работе представлен двухэтапный алгоритм построения архитектурных моделей в формате AADL на основе автоматического анализа исходного кода функционального ПО для ARINC 653 совместимых ОС. Предложенный алгоритм реализован в виде отдельного модуля для статического анализатора CPAchecker. Работа алгоритма продемонстрирована на тестовом приложении для ARINC 653 совместимой операционной системы.</figDesc><table /></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<ptr target="http://standards.sae.org/as5506c/" />
		<title level="m">SAE International standard AS5506C, Architecture Analysis &amp; Design Language</title>
				<imprint>
			<publisher>AADL</publisher>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<ptr target="http://standards.sae.org/as5506/1a/" />
		<title level="m">SAE International standard AS5506/1A, Architecture Analysis &amp; Design Language (AADL), Annex A: ARINC653 Annex</title>
				<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<author>
			<persName><surname>Arinc</surname></persName>
		</author>
		<title level="m">ARINC Specification 653P1-3: Avionics Application Software Standard Interface Part 1 -Required Services</title>
				<meeting><address><addrLine>Maryland, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Aeronautical Radio INC</publisher>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">CPAchecker: A Tool for Configurable Software Verification</title>
		<author>
			<persName><forename type="first">D</forename><surname>Beyer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">E</forename><surname>Keremoglu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">CAV 2011. LNCS</title>
				<editor>
			<persName><forename type="first">G</forename><surname>Gopalakrishnan</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">S</forename><surname>Qadeer</surname></persName>
		</editor>
		<meeting><address><addrLine>Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2011">2011</date>
			<biblScope unit="volume">6806</biblScope>
			<biblScope unit="page" from="184" to="190" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title level="m" type="main">Explicit-value analysis based on CEGAR and interpolation</title>
		<author>
			<persName><forename type="first">D</forename><surname>Beyer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Löwe</surname></persName>
		</author>
		<idno>ArXiv 1212.6542</idno>
		<imprint>
			<date type="published" when="2012-12">December 2012</date>
		</imprint>
		<respStmt>
			<orgName>University of Passau /</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<author>
			<persName><forename type="first">Д</forename><forename type="middle">В</forename><surname>Буздалов</surname></persName>
		</author>
		<author>
			<persName><forename type="first">С</forename><forename type="middle">В</forename><surname>Зеленов</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Е</forename><forename type="middle">В</forename><surname>Корныхин</surname></persName>
		</author>
		<author>
			<persName><forename type="first">А</forename><forename type="middle">К</forename><surname>Петренко</surname></persName>
		</author>
		<author>
			<persName><forename type="first">А</forename><forename type="middle">В</forename><surname>Страх</surname></persName>
		</author>
		<author>
			<persName><forename type="first">А</forename><forename type="middle">А</forename><surname>Угненко</surname></persName>
		</author>
		<author>
			<persName><surname>Хорошилов</surname></persName>
		</author>
		<title level="m">А.В. Инструментальные средства проектирования систем интегрированной модульной авионики. Труды Института системного программирования РАН. Том</title>
				<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="volume">26</biblScope>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
