Критическая секция – часть программы, в которой осуществляется доступ к разделяемым ресурсам.
Гонки – это когда 2 или боле процесса обрабатывают разделяемые данные и конечный результат зависит от скорости обработки процессов.
Метод прерывания применяется если невозможно выйти из критической секции.
Другие способы:
1.Способ блокируемых переменных:
D=1 – ресурс свободен. D=1 – ресурс занят. Любой процесс сначала проверяет, свободен ресурс или нет.
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 |
Освобождает диск |
|
Тупик, в котором оба процесса заняли диск и принтер
Эта ситуация называется тупик.
Использование монитора или системные программы, которые через определённые моменты времени освобождают ресурсы, после чего система продолжает свою работу. (чтобы небыло тупика).
Для решения задачи рассматриваются:
· Предотвращение;
· Распознавание;
· Восстановление после тупиков (снятие тупиков).
o Снимает процесс с работы
o Процесс возвращается в состояние, предшествующее ему.
Нить
Каждая нить имеет свой IP (программный счётчик), стек, регистры, нити – потомки и своё собственное состояние. Нити разделяют адресное пространство, глобальные переменные, открытые файлы, таймеры, семафоры и статическую информацию.
