Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория вычислительных процессов и структур. Учебное пособие
.pdf
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение высшего образования
«Казанский национальный исследовательский
технологический университет»
Д. Л. Егоров
ТЕОРИЯ ВЫЧИСЛИТЕЛЬНЫХ
ПРОЦЕССОВ И СТРУКТУР
Учебное пособие
Казань
Издательство КНИТУ
2018
1

УДК 519.6(075)
Е30
Егоров Д. Л.
Теория вычислительных процессов и структур : учебное пособие /
Д. Л. Егоров; Минобрнауки России, Казан. нац. исслед. технол.
ун-т. – Казань : Изд-во КНИТУ, 2018. – 92 с.
ISBN 978-5-7882-2378-0
ББК 22.19я7
Е30
Печатается по решению редакционно-издательского совета
Казанского национального исследовательского технологического университета
Рецензенты:
д-р техн. наук, проф. К. Х. Гильфанов
канд. техн. наук, доц. М. П. Шлеймович
Представлены основы теории вычислительных процессов и структур,
в том числе вопросы, связанные с представлением, анализом и моделированием вычислительных процессов, а также программ, которые их порождают,
и устройств, на которых они выполняются. Рассмотрены основы теорий формальных языков, автоматов, схем программ и др.
Предназначено для студентов, обучающихся по направлениям
01.03.02 «Прикладная математика и информатика», 02.03.03 «Математическое обеспечение и администрирование информационных систем», 09.03.01
«Информатика и вычислительная техника».
Подготовлено на кафедре интеллектуальных систем и управления
информационными ресурсами.
ISBN 978-5-7882-2378-0 © Егоров Д. Л., 2018
© Казанский национальный исследовательский
технологический университет, 2018
2
УДК 519.6(075)
ББК 22.19я7

ВВЕДЕНИЕ
Информационные технологии стремительно развиваются, и сегодня они включены практически во все сферы нашей жизни: от решения повседневных бытовых задач до искусства и, конечно, науки.
Научный прогресс во многом обусловлен прогрессом вычислительной
техники: многие задачи оказалось возможным решить только благодаря появлению на свет мощных компьютеров и соответствующего
программного обеспечения. Огромный вклад здесь внесло развитие
численных методов, использование которых без достаточно высоких
вычислительных мощностей просто невозможно, а также совершенствование методов организации вычислений, в особенности за счет их
распараллеливания. Проведение современных естественно-научных
исследований уже не мыслится без компьютерных технологий и потому изучение теоретических основ, на которых эти технологии базируются, является неотъемлемой частью современного высшего образования.
Теория вычислительных процессов и структур – научное
направление, охватывающее целый спектр дисциплин. Кроме вопросов, относящихся непосредственно к проблематике вычислительных
процессов (в первую очередь, параллельных) и их организации, здесь
же обсуждаются теория формальных языков, теория автоматов, схематология и т.д. Среди основных причин такого широкого охвата можно
назвать необходимость моделирования вычислительных процессов, а
также программ, которые их порождают, и устройств, на которых они
выполняются.
Стоит отметить, что обобщающих учебников по данной дисциплине не так уж много. Значительно проще найти книги, посвященные отдельным ее разделам: теории формальных грамматик, сетям
Петри и т.д. Поэтому одна из основных задач данного учебного пособия – в меру своих возможностей восполнить этот пробел.
Как уже отмечалось выше, охват научных направлений в рамках теории вычислительных процессов и структур чрезвычайно широк. В основу данного учебного пособия положен курс лекций, которые автор читает в Казанском национальном исследовательском технологическом университете. Уместить в такой курс весь теоретический объем данной дисциплины невозможно: по каждому ее разделу
при необходимости можно было бы организовать отдельный курс лекций. Поэтому целью автора данной работы было в первую очередь
3

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

1. ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ
1.1. Вычислительная система и вычислительный процесс
Начиная разговор о вычислительных процессах, определим
понятие дискретной динамической системы – одного из основных
объектов, с которыми нам придется иметь дело.
Дискретная система – это кибернетическая система, все элементы которой и связи между ними имеют дискретный характер.
Свойство дискретности противопоставляется свойству непрерывности
и означает, что объект, обладающий им, «прерывист», «дробен»,
состоит из отдельных частей. Поведение дискретной системы описывается последовательностью состояний.
Динамическая система – это множество элементов, для которого задана функциональная зависимость между положением в
пространстве каждого элемента и временем.
Исследование дискретных динамических систем проводится с
помощью различных математических моделей и методов. Отметим,
что разнообразие и сложность таких систем постоянно растут.
Особое место занимают параллельные системы, в которых отдельные компоненты могут функционировать независимо, вступая во
взаимодействие друг с другом в разные моменты времени. Таковыми
являются системы, в которых выполняются различные параллельные
вычисления (например, многие современные пакеты программ для
проведения естественно-научных вычислений), многопроцессорная
обработка информации и т.д.
Для того, чтобы лучше понять, что такое вычислительный процесс, необходимо рассмотреть ряд важных общих понятий.
Процессы работают с данными. Обработка данных – это выполнение систематической последовательности действий с данными.
Данные – это представление фактов и идей в формализованном виде, а
информация – это смысл, который им придается.
Данные представляются и хранятся на носителях. Совокупность таких носителей в рамках некоторой обработки данных называется информационной средой. Набор данных, содержащихся в некоторый момент в информационной среде, определяет ее состояние. Тогда
под процессом можно понимать последовательность сменяющих друг
друга состояний определенной информационной среды.
Для того, чтобы требуемый процесс мог порождаться на электронно-вычислительной машине, его необходимо описать специаль-
5

ным образом в формализованном виде, понятном для данного вычислительного устройства. Такое описание является программой. Однако
для того, чтобы программу можно было составить и изменять, такое
формальное описание должно быть понятным и для человека. Посредником между человеком и компьютером выступает язык программи-
рования: человек составляет на нем программу, а транслятор перево-
дит эту программу на язык, понятный компьютеру.
Процесс охватывает собой целую совокупность различных
объектов и событий: исполняющиеся команды, выделенные ресурсы,
текущий момент выполнения и т.д. Все эти объекты и события находятся под управлением операционной системы.
В некоторых случаях для работы определенных программ может организовываться более одного процесса. Также возможна ситуация, когда один и тот же процесс могут исполнять последовательно
несколько различных программ. Кроме того, при обработке внешних
прерываний в рамках процесса может выполняться часть кода ядра
операционной системы. Таким образом, не существует взаимно однозначного соответствия между процессами и программами.
1.2. Виды вычислительных процессов
Процессы, выполняемые в операционной системе, можно разделить на две большие категории: параллельные и последовательные.
Параллельные процессы – это процессы, которые одновремен-
но находятся в каком-нибудь активном состоянии. При этом необязательно подразумевается постоянное одновременное выполнение этих
процессов. Возможна ситуация, когда эти процессы перекрываются во
времени только частично. Параллельные процессы, в свою очередь,
можно разделить на независимые и взаимодействующие процессы.
Независимые процессы – это процессы, множества переменных
которых не пересекаются. При этом понятие «переменные» понимается здесь в широком смысле: это могут быть области памяти, выделенные для определенных в программе переменных или, например, файлы данных. Независимые процессы не оказывают влияния на результат выполнения друг друга, т.к. значения переменных, используемых
одним из таких процессов, не зависит от значений переменных другого независимого процесса. Можно при этом отметить, что, поскольку
независимые процессы развиваются в рамках одной системы, они будут разделять имеющиеся у нее производительные ресурсы, что может
повлечь задержки в их выполнении.
6

Взаимодействующие процессы – это процессы, которые совместно используют некоторые переменные. Следовательно, выполнение одного процесса может повлиять на выполнение другого.
Многие ресурсы вычислительной системы могут совместно
использоваться несколькими процессами, но к некоторым ресурсам
может быть разрешен доступ в данный момент времени только одного
процесса. Ресурсы, не допускающие одновременного использования
сразу несколькими процессами, называются критическими, а места в
программах, в которых происходит обращение к ним, ‒ критическими
секциями (критическими интервалами). Критическая секция, вообще
говоря, не является последовательностью операторов программы, а
представляет собой последовательность действий, которые выполняются этими операторами.
1.3. Проблема организации совместной работы процессов
Одна из ключевых проблем организации параллельных процессов в вычислительной системе – это проблема их синхронизации.
Если один процесс использует в данный момент критический
ресурс, то в случае попытки доступа к этому ресурсу со стороны других процессов они должны получить отказ и перейти в режим ожидания освобождения критического ресурса. Отсутствие подобных механизмов в системе может приводить к серьезным ошибкам, причем находить и исправлять такие ошибки может оказаться крайне сложной
задачей в силу их непредсказуемости и плохой воспроизводимости.
Обусловлено это, в частности, разной скоростью развития параллельных процессов, на которую могут влиять и их индивидуальные вычислительные потребности, и состояние ресурсов системы в текущий момент времени, и различные решения, принимаемые системой и другими процессами независимо от решаемой вычислительной задачи. Также стоит отметить, что содержание и скорость исполнения одного
процесса, как правило, неизвестны и недоступны другому процессу.
В качестве примера представим себе некоторую вычислительную систему, в результате работы которой изменяется содержимое
определенного набора файлов (например, в таких файлах могут храниться промежуточные результаты вычислений). Каждый процесс
системы производит определенную часть вычислений и записывает
промежуточный результат в соответствующий файл. Исходные данные для таких вычислений могут содержаться в созданных ранее другими процессами файлах.
7

Допустим, процесс A провел свою часть вычислений и записал
результат в файл F. Процессу B для проведения своих вычислений на
определенном этапе может понадобиться файл F: он прочитает содержащуюся там информацию, обновит ее в соответствии с проведенным
расчетом и запишет обратно в F. Нетрудно видеть, что в случае неправильной организации совместной работы процессов A и B файл F будет обновляться несвоевременно, и какая-то часть информации потеряется, что приведет к ошибкам во всем процессе вычислений.
Другим примером может быть база данных, хранящая учетные
записи пользователей, и система, которая автоматически собирает информацию о деятельности пользователей и вносит в их данные изменения.
Для сбора разных видов данных могут быть организованы отдельные параллельные процессы. Каждый такой процесс анализирует
собранную информацию и в случае необходимости принимает решение об ее изменении в учетной записи соответствующего пользователя. В этом случае учетная запись становится критическим ресурсом:
если ее попытаются изменить одновременно сразу несколько процессов, часть данных может оказаться потерянной.
Рассмотрим требования, которым должны удовлетворять критические секции:
- в данный момент времени только один процесс может нахо-
диться в своей критической секции;
- не допускается присутствие процесса в критической секции
бесконечно долгое время;
- не допускается бесконечно долгое ожидание каким-либо про-
цессом входа в свою критическую секцию;
- бесконечно долгое присутствие вне своей критической сек-
ции допускается, но не должно задерживать выполнение других процессов, ожидающих входа в критическую секцию, т.е. никакой процесс, находящийся вне своей критической секции, не должен блокировать вход в критические секции другим процессам;
- принятие решения о входе одного из двух процессов-
претендентов в критическую секцию не должно затягиваться бесконечно долго;
- если процесс, находящийся в своем критическом интервале,
завершается (естественно или аварийно), то режим взаимоисключения,
блокирующий доступ в критическую секцию остальным процессам,
должен быть отменен.
8

2. ОСНОВЫ ТЕОРИИ ФОРМАЛЬНЫХ ЯЗЫКОВ
2.1. Цепочки символов и их свойства
Теория формальных языков находит широкое применение в
теории вычислительных процессов и структур. Она предоставляет мощный инструментарий, применяемый при моделировании и исследовании
вычислительных процессов, автоматов, языков программирования.
Основными объектами, с которыми имеет дело теория формальных языков, являются символы, представляющие собой базовые элементы некоторого множества A, а также цепочки, построенные из этих
элементов. Множество А называют также алфавитом. Формальный
язык, таким образом, представляет собой множество цепочек над конечным алфавитом. Множество всех возможных цепочек, составленных
из элементов множества A, включая пустую цепочку, обозначим A*.
В общем случае язык представляет собой бесконечное множество. Способ, позволяющий осуществить выделение некоторого подмножества из множества всех слов, составленных из символов некоторого конечного алфавита, называется формальной грамматикой.
Итак, формальный язык будет определен, если заданы:
- алфавит, т.е. элементы, из которых будут составляться цепоч-
ки языка (например, в естественном языке алфавит будет представлять
собой соответствующий набор букв, а слова, составленные из них, будут образовывать множество цепочек; естественный язык – это язык,
используемый для общения людей);
- формальная грамматика, т.е. правила, по которым строятся
цепочки символом, принадлежащие к данному языку; такие цепочки
называются правильными.
Можно рассматривать правила формальной грамматики как
набор элементарных операций, в ходе применения которых в определенной последовательности к некоторой исходной цепочке будут получены только правильные цепочки. Эти правила называют также
продукциями. Последовательность правил, использованных в процессе
порождения некоторой цепочки, является ее выводом.
Различают распознающие и порождающие формальные грамматики. Распознающая грамматика позволяет определить принадлежность рассматриваемой цепочки к данному языку. Порождающая
грамматика представляет собой правила, по которым строятся правильные цепочки данного языка.
9

Формальные грамматики описывают только совокупность возможных результатов. Они не содержат указаний, каким путем можно
получить искомый результат. Порождающая грамматика не является
алгоритмом: ее правила можно применять в произвольном порядке в
зависимости от задачи. Каждое правило представляет собой определенную возможность, но не жесткое предписание неминуемого выполнения, как это было бы в алгоритме.
Примем следующие обозначения. Строчными буквами латинского алфавита будем обозначать символы. Таким образом, цепочки
будем записывать в виде abcd и читать их слева направо. Обозначать
сами цепочки будем прописными буквами латинского алфавита или
греческими буквами:
γ = abcd, В = fgghk.
Цепочку, которая не содержит ни одного символа, будем называть пустой и обозначать символом ε.
Количество символов, входящих в цепочку, называется ее длиной и обозначается с помощью вертикальных линий, например:
|γ| = |abcd| = 4, |В| = |fgghk| =5, |ε| = 0.
Цепочка Z, которая является результатом непосредственного
слияния двух цепочек X и Y, называется конкатенацией X и Y и обозначается символом •, например:
γ • В = abcdfgghk.
Аналогичный смысл имеет запись
γВ = abcdfgghk.
Конкатенации обладает следующими свойствами:
1. Ассоциативность:
X A*, Y A*, Z A*: (X • Y) • Z = X • (Y • Z).
2. Замкнутость:
• : A* A* → A*.
Напомним, что знак обозначает декартово произведение
множеств. Результатом декартова произведения двух множеств X и Y
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
