- •Методичні вказівки до лабораторних робіт по курсу "інтерфейси паралельного програмування "
- •Методичні вказівки до лабораторних робіт по курсу "інтерфейси паралельного програмування "
- •7091502 “Системне програмування”;
- •Общие положения
- •1. Управление процессами и потоками
- •1.3.2. Создание и завершение процесса
- •1.3.3. Создание и завершение потока Поток создается вызовом функции
- •1.3.4. Приостановка и возобновление потоков
- •1.3.5. Переключение потоков
- •1.3.6. Определение периодов выполнения потоков
- •1.3.7. Приоритеты потоков
- •1.4. Задание на лабораторную работу
- •1.5. Контрольные вопросы и задания
- •2. Объекты синхронизации потоков и процессов
- •2.3.2. Мьютексы
- •2.3.3. Семафоры
- •Программа завершает работу с семафором вызовом функции
- •2.3.4.События
- •2.3.5. Wait -функции
- •2.4. Задание на лабораторную работу
- •2.5. Контрольные вопросы и задания
- •3. Обмен данными между программами на основе объекта winsock
- •3.1. Цель работы
- •3.2. Указания по подготовке к выполнению лабораторной работы
- •3.3. Сущность работы
- •3.3.1. Сторона клиента.
- •3.3.2 Сторона сервера
- •3.4. Задание на лабораторную работу
- •4.5. Контрольные вопросы и задания
- •4. Интерфейс параллельного программирования
- •4.1. Цель работы
- •4.2. Указания по подготовке к выполнению лабораторной работы
- •4.3. Обзор темы работы
- •4.3.1. Mpi. Терминология и обозначения
- •4.3.2. Общие процедуры mpi
- •4.3.3. Прием/передача сообщений между отдельными процессами
- •4.3.4. Прием/передача сообщений без блокировки
- •4.3.5. Объединение запросов на взаимодействие
- •4.3.6. Совмещенные прием/передача сообщений
- •4.3.7. Коллективные взаимодействия процессов
- •4.3.8. Синхронизация процессов
- •4.3.9. Работа с группами процессов
- •4.4. Задание на лабораторную работу
- •Вариант 2
- •4.5. Контрольные вопросы и задания
- •5.4. Задание на лабораторную работу
- •5.5. Контрольные вопросы и задания
- •Список литературы
- •Содержание
1.5. Контрольные вопросы и задания
-
Дайте определение процессу.
-
Чем отличаются процессы и задания?
-
Сколько потоков может содержать процесс?
-
Какие основные действия необходимо выполнить, чтобы создать поток?
-
Объясните назначение потоков.
-
Каким образом происходит управление потоками в операционной системе?
-
Раскройте сущность задания. Какие ограничения на процесс можно наложить, включив его в задание?
-
Каким образом можно завершить процессы и потоки?
-
Назовите основные параметры функции создания процесса.
-
Каково внутреннее устройство потока?
-
Каким образом можно осуществить планирование потоков и задание их приоритетов.
-
Как осуществляется привязка потоков к процессорам?
-
Какие функции можно использовать для планирования потоков?
2. Объекты синхронизации потоков и процессов
2.1. Цель работы
Ознакомление с концепцией основных объектов синхронизации, применяемых в современных многозадачных операционных системах. Изучение следующих объектов синхронизации: критические разделы, события, семафоры. Написание практических программ, требующих синхронизации.
2.2. Указания по подготовке к выполнению лабораторной работы
Необходимо изучить принципы организации синхронизации при организации параллельного программного обеспечения, объекты операционных систем, служащие для обеспечения синхронизации: критические разделы, мьютексы, семафоры, события.
При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [ ], [ ].
2.3. Обзор темы работы
В данном разделе приводится краткое описание тех функций, которые необходимо использовать для создания и использования объектов синхронизации операционной системы.
2.3.1. Критический раздел
Существует четыре функции работы с критическим разделом. Чтобы их использовать необходимо определить объект типа критический раздел:
CRITICAL_SECTION cs;
Объект типа критический раздел сначала должен быть инициализирован одним из потоков программы с помощью функции:
InitializeCriticalSection(&cs);
Эта функция создает критический раздел с именем cs. После инициализации объекта "критический раздел" поток входит в критический раздел, вызывая функцию:
EnterCriticalSection(&cs);
В этот момент поток становиться владельцем объекта. Два различных потока не могут быть владельцами одного объекта одновременно. Следовательно, если один поток вошел в критический раздел, то следующий поток, вызывая функцию EnterCriticalSection(&cs); с тем же самым объектом, будет задержан внутри функции. Возврат из функции произойдет только тогда, когда первый поток покинет критический раздел, вызвав функцию:
LeaveCriticalSection(&cs);
В этот момент второй поток, задержанный в функции EnterCriticalSection(&cs), станет владельцем критического раздела, и его выполнение будет возобновлено.
Когда критический раздел больше не нужен вашей программе, его можно удалить с помощью функции:
DeleteCriticalSection(&cs);
Это приведет к освобождению всех ресурсов системы, задействованных для поддержки объекта критический раздел.
Программа может создавать несколько критических разделов. Существенное ограничение при использовании критических разделов состоит в том, что таким образом можно синхронизировать только потоки одного процесса и нельзя осуществить синхронизацию процессов (действительно, ведь переменная cs объявлена в процессе и не видна из других процессов).