Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка к лабораторным работам (рус).doc
Скачиваний:
3
Добавлен:
15.11.2018
Размер:
353.79 Кб
Скачать

1.5. Контрольные вопросы и задания

  1. Дайте определение процессу.

  2. Чем отличаются процессы и задания?

  3. Сколько потоков может содержать процесс?

  4. Какие основные действия необходимо выполнить, чтобы создать поток?

  5. Объясните назначение потоков.

  6. Каким образом происходит управление потоками в операционной системе?

  7. Раскройте сущность задания. Какие ограничения на процесс можно наложить, включив его в задание?

  8. Каким образом можно завершить процессы и потоки?

  9. Назовите основные параметры функции создания процесса.

  10. Каково внутреннее устройство потока?

  11. Каким образом можно осуществить планирование потоков и задание их приоритетов.

  12. Как осуществляется привязка потоков к процессорам?

  13. Какие функции можно использовать для планирования потоков?

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 объявлена в процессе и не видна из других процессов).