Проблема синхронизации процесса


Проблема синхронизации процесса

Критическая секция – часть программы, в которой осуществляется доступ к разделяемым ресурсам.

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

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

Другие способы:

1.Способ блокируемых переменных:

D=1 – ресурс свободен. D=1 – ресурс занят. Любой процесс сначала проверяет, свободен ресурс или нет.

clip_image004

2.Принцип семафора:

V(S) – выборка, инкремент запоминается (S увеличивается на 1)

P(S) – выборка, декремент запоминается (S уменьшается на 1)

min S=0 .e – определяет количество пустых буферов. f – количество заполненных буферов. b используется для взаимного исключения (вошла или не вошла в секцию).

К примеру будут определены:

define N=256

int e=N, f=0,b=1;

void writer(){

Prepare Next Record(); //готовит запись

P(e);//уменьшает количество занятых буферов

P(b);

Add Buffer();//вход в критическую секцию

V(b);

V(f);//увеличиваем количество занятых буферов

}

Второй процесс, который при этом читаем:void reader(){

P(f);

P(b);

Get buffer();

V(b);

V(e);

}

Тупик семафорного доступа.

А

А1

Занимает диск

А2

Занимает принтер

А3

Освобождает принтер

А4

Освобождает диск

В

В1

Занимает диск

В2

Занимает принтер

В3

Освобождает принтер

В4

Освобождает диск

clip_image006

Тупик, в котором оба процесса заняли диск и принтер

Эта ситуация называется тупик.

Использование монитора или системные программы, которые через определённые моменты времени освобождают ресурсы, после чего система продолжает свою работу. (чтобы небыло тупика).

Для решения задачи рассматриваются:

· Предотвращение;

· Распознавание;

· Восстановление после тупиков (снятие тупиков).

o Снимает процесс с работы

o Процесс возвращается в состояние, предшествующее ему.

Нить

Каждая нить имеет свой IP (программный счётчик), стек, регистры, нити – потомки и своё собственное состояние. Нити разделяют адресное пространство, глобальные переменные, открытые файлы, таймеры, семафоры и статическую информацию.

Загрузка...