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

методички / 4045 ЭИ

.pdf
Скачиваний:
33
Добавлен:
14.05.2019
Размер:
1.16 Mб
Скачать

4045

МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ

 

 

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ»

Кафедра «Мехатроника в автоматизированных производствах»

ОРГАНИЗАЦИЯ И УПРАВЛЕНИЕ ПОТОКАМИ

Методические указания к выполнению лабораторных работ по дисциплине

«Системное программное обеспечение»

для обучающихся по направлению подготовки 09.03.01 «Информатика и вычислительная техника» очной формы обучения

Составитель: А. В. Гущин

Самара

2016

1

УДК 681.3.06

Организация и управление потоками: методические указания к выполнению лабораторных работ по дисциплине «Системное программное обеспечение» для обучающихся по направлению подготовки 230100.62 «Информатика и вычислительная техника» очной формы обучения / составитель : А.В. Гущин. – Самара : СамГУПС, 2016. – 49 с.

Указания содержат раздел теории, разделы заданий с методическими рекомендациями на основе примеров, список рекомендуемой литературы.

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

Утверждены на заседании кафедры «27» мая 2016 г., протокол № 14. Печатаются по решению редакционно-издательского совета университета.

Составитель: Гущин Андрей Викторович

Рецензенты: к.т.н., профессор кафедры «Мехатроника в автоматизированных производствах» СамГУПС В.А. Засов; к.т.н., профессор, заведующий кафедрой «АТС» СамГУПС В. Б. Гуменников

Под редакцией составителя

Подписано в печать 21.06.2016. Формат 60х90 1/16. Усл. печ. л. 3,06. Заказ 118.

© Самарский государственный университет путей сообщения, 2016

2

Введение

Дисциплина «Системное программное обеспечение» необходима при подготовке технического специалиста для формирования у него навыков системного подхода к пониманию и использованию вычислительных устройств. Целью лабораторных работ является теоретическая и практическая подготовка обучающихся в области анализа программноаппаратного обеспечения, конфигурации, настройки системных программных компонентов современных операционных систем. Полученный уровень навыков позволит обучающему в дальнейшем самостоятельно выбирать средства реализации, находить необходимые программные и технологические решения для практически важных реализаций программного обеспечения. Формируются следующие компетенции использования основных законов естественнонаучных дисциплин в профессиональной деятельности, в применении методов математического анализа и моделирования, теоретического и экспериментального исследования. Компетенции связаны:

со знанием первостепенного значения информации в развитии современного общества, основных методов, способов и средств получения, хранения и обработки;

с умением хранить и обрабатывать информацию с помощью ЭВМ, управлять информацией с помощью ЭВМ, программировать методы получения, хранения, переработки и управления информацией;

со способностью решать программными средствами практические задачи, методически использовать программные средства для решения практических задач.

Лабораторные занятия развивают качество синтезировать и разрабатывать компоненты информационных систем на основании знаний моделей системных процессов. Процесс выполнения, оформления работ непосредственно связан:

со знанием основных типов системных процессов, их организации, связями сбора и обмена информацией, основных характеристик систем управления ресурсами и хранилищ данных;

с умением оценить проектную сложность организации системного процесса, оптимально составить модель процесса под объем планируемых ресурсов;

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

Основные задачи лабораторных работ: изучение системного программного обеспечения на моделях параллельных (многомерных) потоков; изучение вопросов создания и управления потоками как системными ресурсами.

3

1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПРОГРАММНЫХ ПОТОКОВ

1.1. Разбиение программ на вычислительные потоки

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

1.2. Определение потока

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

4

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

1.3. Контекстные требования потока

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

Потоки – это выполняемые части программы, которые соревнуются за использование процессора с потоками того же самого или других процессов. В многопроцессорной системе потоки одного процесса могут выполняться одновременно на различных процессорах. Однако потоки конкретного процесса выполняются только на процессоре, который назначен этому процессу. Если, например, процессоры 1, 2 и 3 назначены процессу А, а процесс А имеет три потока, то любой из них может быть назначен любому процессору. В среде с одним процессором потоки конкурируют за его использование. Параллельность же достигается за счет переключения контекста. Контекст переключается, если операционная система поддерживает многозадачность при наличии единственного процессора. Многозадачность позволяет на одном процессоре одновременно выполнять несколько задач. Каждая задача выполняется в течение выделенного интервала времени. По истечении заданного интервала или после наступления некоторого события текущая задача снимается с процессора, а ему назначается другая задача. Когда потоки выполняются параллельно в одном процессе, то о таком процессе говорят, что он — многопоточный. Каждый поток выполняет свою подзадачу таким образом, что подзадачи процесса могут выполняться независимо от основного потока управления процесса. При многозадачности потоки могут конкурировать за использование одного процессора или назначаться другим процессорам. Но в любом случае переключение контекста между потоками одного и того же процесса требует меньше ресурсов, чем переключение контекста между потоками различных процессов. Процесс использует много системных ресурсов для отслеживания со-

5

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

1.4. Сравнение потоков и отдельных программных процессов

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

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

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

6

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

1.6. Потоки, управляющие другими потоками

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

2. МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ

Общие положения и требования при выполнении работ

Используемое оборудование и материалы: компьютерный класс с операционной систе-

мой Windows или Ubuntu.

Порядок выполнения лабораторных: выполнять работы и отчеты согласно учебному расписанию, аудиторно, в сопровождении преподавателя.

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

7

Лабораторная работа № 1

УПРАВЛЕНИЕ ОДНОМЕРНЫМ ПОТОКОМ

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

Задание

1.Загрузить архив [3.1] демонстрационного базового примера выполнения задания (Lazarus, Delphi). Распаковать, запустить программу под Ubuntu и ознакомиться с вариантом интерфейса взаимодействия, управления одномерным потоком. Исходные коды программы приведены в приложении 1, П1.1 (базовый пример).

2.Создать и отладить код программы запуска одномерного потока с реализацией управления одним из его параметров (например: порядок счета, смена имени, изменение приоритета и т. п.). Вид задачи потока предварительно согласовать с преподавателем.

Примечание. Если задание выполняется на языке С, то используйте примеры № 3-4

вразделе «Ход работы».

Ход работы

Ход работы поясняется программными кодами базовых примеров-заданий преподавателя и демо-примерами из ресурсов сети Интернет.

Ознакомиться с примером, примером-заданием выбранного по желанию языка программирования и на основании примера выполнить задание с достижением поставленной

вработе цели.

1.Пример создания одного и двух отдельных потоков [2.1] (Delphi).

2.Пример-задание «Одномерный поток: Delphi/Lazarus. Базовый пример«, приложение 1, П1.1.

3.Пример-задание «Одномерный поток: CodeBlock C++. Настройки компилятора. Базовый пример», приложение 1, П1.2. Приложение также содержит основные указания по настройке компилятора при работе с потоками.

4.Пример-задание «Одномерный поток: MonoDevelop C#. Базовый пример», приложение 1, П1.3.

Результат работы

Выполняемый модуль программы с решением задачи внутри потока. Тип задачи определяется персональным заданием преподавателя для каждого студента.

Содержание отчета

Отлаженный модуль программы с выполненным заданием.

8

Контрольные вопросы

1.Основная концепция многопоточных задач.

2.Методы управления потоком.

3.Условия постановки задачи, когда требуется замена процедурного программирования многопоточным программным кодом.

Лабораторная работа № 2

УПРАВЛЕНИЕ ПАРАЛЛЕЛЬНЫМИ НЕЗАВИСИМЫМИ ПОТОКАМИ

Цель работы: на основании базового примера программного кода ознакомиться с последовательностью действий объявления, выполнения и деструкции параллельных независимых потоков.

Задание

1.Загрузить архивы примеров исполняемых программ «Многопоточность. Независимые потоки. Вывод данных через синхронизацию с VCL (Lazarus)» [3.2] и «Параллельные потоки. Управление приоритетом (С++)» [3.3]. Распаковать, запустить программы под Ubuntu. Ознакомиться с вариантом интерфейса взаимодействия с многомерным потоком (Lazarus). Программу на С++ запускать с консоли, набрав в каталоге выгрузки команду ./thread

2.Создать и отладить код программы запуска, останова списка (коллекции) потоков, изменения приоритетов потоков во время их работы.

3.Выполнить задание организации действий в процедурах потоков по варианту преподавателя.

Ход работы

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

1.Пример создания простого массива потоков [2.2]. Рассматривается полный код программы создания по команде с формы простого массива потоков. Взаимодействие с VCL заключается в синхронизированном сообщении о создании потока.

2.Пример-задание «Многомерные потоки – описание основных классов (Lazarus)», приложение 2, П2.1. Пример содержит: класс коллекции потоков; модификация класса списка потоков, которую следует рассмотреть как пример использования полиформизма в технологиях ООП при запуске и остановке потоков.

9

3.Пример-задание «Многомерные потоки – организация взаимодействия и управления» (Lazarus)», приложение 2, П2.2. Основная форма размещения интерфейсных элементов управления списком потоков и каждым потоком в отдельности.

4.Пример-задание. «Многомерные потоки c управляемыми параметрами приоритета (CodeBlock C++)», приложение 2, П2.3. Полный программный блок создания фиксированного числа потоков и управления приоритетом потоков. Интерпретация диагностики ошибок.

Результат работы

Выполняемый модуль программы с решением задачи внутри коллекции потоков. Тип задачи определяется персональным заданием преподавателя для каждого студента.

Содержание отчета

Отлаженный модуль программы с выполненным заданием.

Дополнительные материалы

Синхронный вывод является упрощенной формой взаимодействия потока с визуальными элементами формы. На самом деле синхронность – это постановка потока в очередь на вывод в главный поток VCL. Негативные последствия такой организации – это останов процесса с любым приоритетом на время ожидания вывода, соответственно, если поток имеет дело с критичными данными от внешнего источника, то их обработка будет нарушена с непредсказуемыми последствиями. Дополнительно разработан пример программного кода, который исключает синхронизацию при выводе и потерю времени для критического потока. Пример «Организации потоков с асинхронным выводом данных (Lazarus)», приложение 2, П2.4.

Примечание: Внешне по интерфейсу рассматриваемая программа асинхронного вывода фактически не отличается от программы синхронного вывода (примеры № 2, № 3). Дополнительно на форме размещено поле счета реального времени, ведущего отсчет времени, когда активировано событие Idle. Но внутренняя структура алгоритма существенно отличается за счет удаления процедур синхронизации и ввода, в период Idle, итерации по коллекции потоков с целью независимого наблюдения их данных.

Контрольные вопросы

1. Обоснование перехода к многомерным потокам при решении вычислительных за-

дач.

2.Организация архитектуры параллельных потоков методами ООП.

3.Основные шаги при оптимизации взаимодействия потока с интерфейсными визуальными элементами.

10

Соседние файлы в папке методички