Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Судаков / Лекции / lec8_parall.ppt
Скачиваний:
27
Добавлен:
20.03.2015
Размер:
200.19 Кб
Скачать

Работа с файловой

 

системой

 

Процесс 2

Процесс 1

 

 

Открываем

 

 

файл, канал, сокет

 

 

open(), pipe(), socket()

 

запись write()

 

pipe

 

Чтение read()

 

 

запись write()

сокет

 

Чтение read()

 

 

 

По сети

Закрываем файл

Обычный файл

Процесс 3

 

close()

 

 

 

 

запись write()

 

На диск

Чтение read()

 

 

Память общего доступа

Процесс создает область общей памяти

Другие процессы присоединяют эту область к себе

Все данные, записанные одним процессом становятся сразу же видны другими процессами

Конфликты при обращении к общим ресурсам: a – общая переменная

 

Процесс1

: считываем

a=1

 

Процесс1

: увеличивает a на 1

a=2

Процесс 1: записывает a назад a=2

 

Процесс2

: считываем

a=2

 

Процесс2

: увеличивает a на 1

a=3

Процесс 2: записывает a назад a=3

 

Процесс1 : считываем

a=1

 

Процесс2 : считываем

a=1

 

Процесс1 : увеличивает a на 1

a=2

 

Процесс2 : увеличивает a на 1

a=2

Процесс 2: записывает a назад a=2

Процесс 1: записывает a назад a=2

Семафоры

Семафор – совместно используемая атомарная целочисленная переменная

В каждый момент времени изменять значение семафора может только один процесс

Значение семафорам может увеличиваться или уменьшатся на целое число (обычно на 1)

Уменьшение

Если значение семафора становится меньше нуля, то процесс, который выполнил такую операцию останавливается, пока значение семафора не станет >=0

Увеличение

Всегда проходит успешно

Проверка на нуль

Если значение семафора равно 0, то процесс продолжает выполнение

Если не равно нулю, то процесс останавливается, пока значение на станет равным 0

Синхронизация с помощью семафоров

Процесс 1

Создать семафор

Присвоить семафору 1

Уменьшить семафор на 1 (семафор<=0)

Обратится к совместно используемым ресурсам

Увеличить семафор на 1

Процесс 2

Уменьшить семафор на 1 (семафор<=0)

Обратится к совместно используемым ресурсам

Увеличить семафор на 1

Сигналы

Сигнал – аналог прерывания

Асинхронное событие – неизвестно когда произойдет

Один процесс может послать другому сигнал с определенным номером

Процесс может сигнал перехватить, игнорировать или выполнить действие по умолчанию

Потоки

Часть процесса, которая выполняется параллельно другими частями процесса

Все ресурсы потоков - общие

Для создания потоков используется аналог функции fork, которой передается функция потока

Pthread – стандарт на API для создания потоков

Стандарт OpenMP

OpenMP – стандарт который включает директивы компилятора, библиотеки и системные переменные, которые могут быть использованы для указания параллелизма в системах с общей памятью

Для распараллеливания с помощью OpenMP пользователь должен указать, что выполняется параллельно, какие данные совместно используются, а какие нет.

Пример OpenMP

int main (void){ int i;

int k = 0;

#pragma omp parallel for default(shared) private(i) \ reduction(+:k)

for (i =0; i<=1000000; i++) k+=func(i);

cout << k<<endl; return 0;

}

Обмен сообщениями

Когда процессы работают на разных машинах, то доступ к одним и тем же данным невозможен

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

Данные передаются атомарными порциями – сообщениями

Атомарность – сообщение обрабатывается как одно целое

Соседние файлы в папке Лекции