Смекни!
smekni.com

Учебно-методическое пособие рекомендовано учебно-методическим советом Международного университета природы, общества и человека (стр. 1 из 11)

Министерство образования Московской области

ГОУ ВПО МО «Международный университет природы,

общества и человека «Дубна»

Филиал «Протвино»

Кафедра информационных технологий

А.В. Мандрик, В.И. Ухов

ВЫПОЛНЕНИЕ ПРАКТИЧЕСКИХ РАБОТ

ПО ДИСЦИПЛИНЕ

«ПАРАЛЛЕЛЬНЫЕ И РАСПРЕДЕЛЁННЫЕ ВЫЧИСЛЕНИЯ»

УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ

Рекомендовано учебно-методическим советом

Международного университета природы, общества и человека

«Дубна» в качестве учебно-методического пособия

для студентов, обучающихся по специальности

«Программное обеспечение вычислительной техники

и автоматизированных систем»

Дубна, 2009


Оглавление

Библиографический список. 3

Оглавление. 2

Общие положения. 4

Цель и задачи курса практических работ. 4

Порядок выполнения практических работ. 4

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №1. СОЗДАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ В ОС WINDOWS 5

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №2. СИНХРОНИЗАЦИЯ ПОТОКОВ В ОС WINDOWS. 10

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №3. СИНХРОНИЗАЦИЯ ПРОЦЕССОВ. 16

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №4. СЕТЕВОЕ ВЗАИМОДЕЙСТВИЕ В WINDOWS. 19

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №5. СОЗДАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ В ОС LINUX 31

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №6. СИНХРОНИЗАЦИЯ ПОТОКОВ В ОС LINUX. 35


Библиографический список

1. Э.Таненбаум. Распределённые системы. Принципы и парадигмы / Э.Таненбаум, Танненбаум, М. ванн Стесн. — СПб.:Питер, 2003. — 877с.

2. Рихтер Дж. Windows для профессионалов: создание эффективных Win32 приложений с учётом специфики 64-разрядной версии Windows/ Рихтер Дж. — СПб.:Питер, 2001. — 752с.

3. Эндрюс Г.Р. Основы многопоточного, параллельного и распределённого программирования/ Эндрюс Г.Р. — М.: «Вильямс», 2003. — 512с.

4.Гергель В.П. Теория и практика параллельных вычислений /Гергель В.П. — М.: ИНТУИР.РУ Интернет-Университет Информационных Технологий, 2007.

5. Богачёв К.Ю. Основы параллельного программирования. /Богачёв К.Ю. — М.: БИНОМ. Лаборатория знаний, 2003.

6. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. /Воеводин В.В. — СПб.: БХВ-Петербург, 2002.

7. Уолтон Ш. “Создание сетевых приложений в среде Linux” /Уолтон Ш. 2001

8. Хованский Е.П. “Лабораторные работы по курсу Параллельные и распределённые вычисления” / Хованский Е.П. http://ps.margtu.ru/wiki/index.php?wakka=HomePage/20092010/4kurs/RV&v=14p0

9. W. R. Stevens, S. A. Rago, Advanced Programming in the UNIX® Environment: Second Edition, Addison Wesley Professional, 2005

10. D. P. Bovet, M. Cesati, Understanding the Linux Kernel, 3rd Edition, O'Reilly, 2005

11.А. Боровский. «Потоки». http://www.citforum.ru/programming/unix/threads/


Общие положения

Методические указания предназначены для изучения и практического освоения студентами основных методов и технологий параллельных и распределённых вычислений.

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

· быстрый рост сложности моделируемых объектов (переход от простых систем к сложным системам);

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

· необходимость управления сложными промышленными и технологическими программно-аппаратными комплексами в режиме реального времени и в условиях неопределённости;

· рост числа задач, для решения которых необходимо обрабатывать гигантские объёмы информации.

Очевидно, что «простой перенос» идеологии программирования, созданной для последовательных задач небольшой размерности, не может гарантировать резкого повышения эффективности вычислительных экспериментов только за счёт использования высокопроизводительных вычислительных систем. Таким образом, обретение навыков создания параллельных и/или распределённых программных приложений является первым шагом к адекватному использованию современных вычислительных комплексов и средств.

Цель и задачи курса практических работ

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

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

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

Практическая часть состоит из работ трёх взаимосвязанных направлений: «Реализация многопоточности», «Синхронизация доступа к данным», «Программирование сокетов». В рамках курса реализация задач осуществляется на платформах ОС Windows и Linux.

Порядок выполнения практических работ

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

Для получения зачёта по каждой работе студент предоставляет преподавателю реализации предложенных в работе примеров и задания по вариантам.

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

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

Порядок защиты практических работ

Защита выполненных практических заданий осуществляется в устной форме. Для успешной защиты практической работы студенту требуется:

1. предоставить преподавателю код приложений, указанных в практическом занятии (включая примеры);

2. продемонстрировать работоспособность указанных приложений;

3. ответить на 3 вопроса преподавателя по теме практического занятия. Вопросы касаются алгоритма исполнения фрагментов представляемого студентом кода;


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №1. СОЗДАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ В ОС WINDOWS

Цель работы

Научиться создавать простые многопоточные приложения на базе операционной системы Windows.

Порядок выполнения практических заданий

Рассмотреть представленные примеры, и разработать приложения на их основе.

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

Реализовать алгоритм с применением функций WinAPI и протестировать его на нескольких примерах.

Литературные источники

1. Рихтер Дж. Windows для профессионалов: создание эффективных Win32 приложений с учётом специфики 64-разрядной версии Windows/ Рихтер Дж. — СПб.:Питер, 2001. — 752с.

2. Эндрюс Г.Р. Основы многопоточного, параллельного и распределённого программирования/ Эндрюс Г.Р. — М.: «Вильямс», 2003. — 512с.

3. Хованский Е.П. “Лабораторные работы по курсу Параллельные и распределённые вычисления” /

Теоретическая часть

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

Кратко поток (thread, нить выполнения) можно определить как исполняемую сущность процесса.

Выделим основные причины, которые подталкивают программистов создавать многопоточные приложения:

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

2. Повышение быстродействия, экономия ресурсов и расширение функциональных возможностей программы. Многопоточность позволяет параллельно выполнять отдельные участки программы на ЭВМ с несколькими процессорами, или выполнять их на одном процессоре «псевдопараллельно», используя механизм вытесняющей многозадачности Windows. Например, различные потоки в Microsoft Word одновременно принимают пользовательский ввод, проверяют орфографию в фоновом режиме и печатают документ. Microsoft Excel строит диаграммы и выполняет математические расчеты в фоновом режиме. Сервер баз данных для ответа на каждый запрос клиента запускает отдельный поток, в противном случае пришлось бы либо запускать отдельную копию сервера, напрасно расходуя ресурсы , либо чрезвычайно усложнять логику его работы . Интерфейс прикладных программ разнообразят анимация, воспроизведение звука и т.п., выполняемые отдельными потоками .