Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория вычислительных процессов и структур. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение высшего образования
«Казанский национальный исследовательский
технологический университет»
Д. Л. Егоров
ПРОЦЕССОВ И СТРУКТУР
Учебное пособие
Казань
Издательство КНИТУ
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]