Научная статья на тему 'Построение графа информационных зависимостей по машинному коду'

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

CC BY
1120
88
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АЛГОРИТМ / ВРЕМЯ ВЫПОЛНЕНИЯ / ГРАФ ИНФОРМАЦИОННЫХ ЗАВИСИМОСТЕЙ / ФОРМА БЭКУСА-НАУРА / ДЕРЕВО ПРОГРАММЫ / ALGORITHM / EXECUTION TIME / THE INFORMATION DEPENDENCIES GRAPH / BACKUS-NAUR FORM / PROGRAM TREE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Новиков Александр Сергеевич

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

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

CONSTRUCTION OF INFORMATION DEPENDENCIES GRAPH BASED ON THE MACHINE CODE

E method of constructing the information dependencies graph is described to estimate the time of the algorithm execution on a given computer architecture. The possibility of using this technique for parallel computing is shown.

Текст научной работы на тему «Построение графа информационных зависимостей по машинному коду»

Nikiforov Michail Borisovich, candidate of technical sciences, docent, nikifo-rov.m. baevm.rsreu.ru, Russia, Ryazan, Ryazan State Radioengineering University,

Orlov Sergey Vyacheslavovich, undergraduate, I is a mail. ru, Russia, Ryazan, Ryazan State Radioengineering University

УДК 519.217.2

ПОСТРОЕНИЕ ГРАФА ИНФОРМАЦИОННЫХ ЗАВИСИМОСТЕЙ

ПО МАШИННОМУ КОДУ

А.С.Новиков

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

Ключевые слова: алгоритм, время выполнения, граф информационных зависимостей, форма Бэкуса-Наура, дерево программы.

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

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

2. На основе сформированного синтаксического дерева выделяются все возможные состояния - изменения связи объектов данных (переменных) с их значениями (узлы, имеющие операторы присвоения «=» или «:=», выделяются отдельными узлами).

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

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

Совмещение построенных на 3-м и 4-м шагах деревьев предоставляет возможность построения искомого дерева зависимостей состояний от состояний.

На рис. 1 наглядно представлена последовательность построения графа информационных зависимостей.

Две операции программы называются информационно зависимыми, если результат выполнения одной операции используется как аргумент для другой.

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

Рис. 1. Последовательность построения графа информационных

зависимостей

181

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

При построении моделей сложных систем с множеством состояний и переходов, как было показано в [1], обязательным условием остается учет случайного характера времени выполнения операции, а также стохастический характер переходов. Для подобного анализа и решения задач моделирования процесса функционирования систем обычно используется аппарат сетей Петри-Маркова.

Для дальнейшего исследования предлагаемого метода анализа временных характеристик программ по их представлению в виде машинного кода стоит подробнее остановится на первом этапе построения графа информационных зависимостей - синтаксическом анализе, который основывается на форме Бэкуса-Наура [2].

Конструкция формы Бэкуса-Наура определяет конечное число символов (нетерминалов), а также правила замены символа на какую-то определенную последовательность букв (терминалов) и символов.

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

Общий вид формы Бэкуса-Наура представляется следующим образом:

<определяемый символ> ::= последовательность 1>|< последовательность 2>| ... |< последовательность п>.

То есть символ <определяемый символ> может заменяться на одну из последовательностей.

Последовательность выводов можно описать при помощи дерева разбора. На рис. 2 представлено дерево разбора выражения «(1+3)-4». Вывод для данного выражения выглядит следующим образом: <выражение>=><выражение>-<выражение> =>(<выражение>) <выражение> =>(<выражение>+<выражение>)-<выражение> =>(<константа>+<выражение>) • <выражение> =>(<константа>+<константа>) • <выражение>

=>(<константа>+<константа>) • <константа>

=>(<цифра>+<константа>) • <константа>

=>(<цифра>+<цифра>) • <константа>

=>(<цифра>+<цифра>) • <цифра>

=>( 1 +<цифра>) • <цифра>

=>( 1 +3 ) • <цифра>

=>(1+3) 4.

Очень часто может оказаться, что для одной и той же грамматики, которую образуют правила, может существовать более одного дерева разбора. Другими словами, наличие двух деревьев разбора дает возможность проанализировать одно и то же предложение двумя различными способами, что влечет за собой разницу в его смысле, например, для выражения вида: <выражение> => <выражение> + <выражение> • <выражение> непонятно, какая из выполняемых операций имеет приоритет - умножение или сложение?

Рис. 2. Дерево разбора выражения «(1+3) 4»

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

<выражение> :: = <слагаемое> |< выражение> + <слагаемое> | <вы-ражение> - <слагаемое>

<слагаемое>: :=<множитель>|<слагаемое> ■ <множитель> <множитель>::=<константа> | (<выражение>) <константа>: :=<цифра> <константа>: :=<константа><цифра> <цифра>::=0|1|2|3|4|5|6|7|8|9

Таким образом, основываясь на форме Бэкуса-Наура, можно представить любую программу на машинном языке в виде дерева (рис. 3).

Как видно из рис. 3, любую программу можно представить как совокупность линейных участков и точек разрыва (<1те> и <Ьгеакрот1>). Каждый линейный участок состоит из некоторого набора команд (<т8й:>)? а точки разрыва сами собой являются командами. Команды состоят из префикса команды (<рге£>) и непосредственно инструкции (<1т№>), каждая из которых содержит поле кода (<сос!е>) и поле адреса (<аёс!г>). Адресное поле имеет различный формат в зависимости от используемого режима адресации.

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

Дерево зависимостей состояний от состояний строится на основе выполнения п. 3 и 4 из общего алгоритма получения графа информационных зависимостей [3].

На рис. 4 представлено дерево зависимостей состояний от состояний для фрагмента программного кода, состоящего из нескольких операторов, которые выполняют простые арифметические операции: Р4 := 2; Р1 := 100; Р2 := Р1; Р3 := Р1 + Р4; Р5 := Р3 + Р1 + Р2; Р7 := Р3 + Р5.

Р7:=РЗ+Р5

—| Р5:=РЗ+Р1 +Р2

РЗ:=Р1+Р4

РЗ:=Р1 +Р4

Р5:=РЗ+Р1 +Р2

—I РЗ:=Р1+Р4

Р1 :=100 Р1 :=200

РЗ:=Р1+Р4

Р1 :=100

Р4:=2 Р1 :=200

Р1 :=1 00 Р1 :=200

Р1:=100 Р1 :=200

Рис. 4. Подписи для обучения сети

185

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

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

На основе анализа дерева зависимостей состояний от состояний строится граф информационных зависимостей, особенности получения которого описаны выше. Однако стоит отметить, что для упрощения процесса построения графа удобно пользоваться таблицей, строками которой являются переменные, а столбцами - состояния. Если переменная участвует в некотором состоянии, то на их пересечении ставится маркер. Указанные сформированные таблицы упрощают процесс построения графа зависимостей, т.к. не имеющие ни одного маркера состояния не могут влиять на ход выполнения операций [3].

На рис. 5 приведен граф информационных зависимостей для дерева зависимостей состояний от состояний.

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

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

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

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

Список литературы

1. Ивутин А.Н., Ларкин Е.В. Прогнозирование времени выполнения алгоритма // Известия Тульского государственного университета. Технические науки. Тула: Изд-во ТулГУ, 2013. Вып. 3. С. 301 - 315.

2. Богаченко Н.Ф., Файзуллин Р.Т. Автоматы, грамматики, алгоритмы. Омск: Изд-во «Наследие. Диалог-Сибирь», 2006. 145 с.

3. Дараган Е.И. Метод выявления информационных связей в программном обеспечении // Молодой ученый. 2012. №12. С. 125-130.

Новиков Александр Сергеевич, канд. техн. наук, доц., [email protected], Россия, Тула, Тульский государственный университет

CONSTRUCTION OF INFORMATION DEPENDENCIES GRAPH BASED

ON THE MACHINE CODE

A.S. Novikov

The method of constructing the information dependencies graph is described to estimate the time of the algorithm execution on a given computer architecture. The possibility of using this technique for parallel computing is shown.

Key words: algorithm, the execution time, the information dependencies graph, Backus-Naur Form, program tree.

Novikov Alexander Sergeyevich, сandidate of technical sciences, docent, [email protected], Russia, Tula, Tula State University

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