Взаимно изключване и синхронизация

Download Report

Transcript Взаимно изключване и синхронизация

Съгласуване на нишки:
Взаимно изключване и
синхронизация
Съдържание
Принципи на съгласуването
(Concurrency)
 Взаимно изключване: хардуерна
поддръжка
 Семафори
 Монитори
 Подаване на съобщения
 Проблем четящи/пишещи

Много процеси

В основата на проектирането на
съвременните операционни системи е
поддръжката на много процеси




Много програми, които се изпълняват
едновременно
Мултиобработка
Обработка на разпределени среди
Основната задача е съгласуването на
работата в системата

Управление на взаимодействието на всички тези
процеси
Съгласуване (Concurrency)
Concurrency се появява в:
 Много приложения


Структурни приложения


Споделящи време
Разширение на модулния дизайн
Структурата на операционна система

ОС сами по себе си са реализирани като
множество от процеси и нишки
Ключови термини
Разделяне и припокриване на
процесите

Процесите могат да бъдат разделени
на части и изпълнени на един процесор.
Разделяне и припокриване на
процесите

И не само разделени на части, но и
припокрити при многопроцесорни системи
Трудности при реализацията
на Concurrency
Споделянето на глобални ресурси
 Оптималното управление на заделени
ресурси
 Трудно локализиране на програмни
грешки, тъй като резултатите не са
детерминирани и възпроизводими.

Пример
void echo()
{
chin = getchar();
chout = chin;
putchar(chout);
}
Пример: Multiprocessor
Process P1
.
chin = getchar();
.
chout = chin;
putchar(chout);
.
.
Process P2
.
.
chin = getchar();
chout = chin;
.
putchar(chout);
.
Прилагане на единичен
достъп




Ако приложим правилото: само един процес
да може да изпълнява дадеана функция в
дадено време:
P1 & P2 се изпълняват на отделни процесори
P1 влиза първи в echo,
 P2 се опитва да влезе, но е блокиран – P2
изчаква
P1 приключва изпълнението
 P2 се продължава след прекъсването и
изпълнява echo
Надпревара (Race Condition)

Race condition се появява, когато
Няколко прецеса или нишки изпълняват
четене и запис на данни
 Крайният резултат зависи от реда на
изпълнение на процесите.


Изходът зависи от това кой последен
преодолява надпреварата.
Изисквания към
операционните системи
Какви изисквания към дизайна и
управлението възникват с появата на
concurrency?
 ОС трявба да:

Следят различни процеси
 Заделят и освобождават ресурси
 Защитават данните и ресурсите от намеса
на други процеси.
 Подсигурят това, че процесите и крайният
резултат са независими от скоростта на

Взаимодействия на процеси
Конкуренция между
процесите за ресурси
Три основни проблеми при контрол:
 Нужда от взаимно изключване

Критични секции
Мъртва хватка (Deadlock)
 Недостиг на ресурси (Starvation)

Изисквания за
взаимно изключване
Само един процес в даден момент се
разрешава в критична точка за ресурса
 Процес, спиращ в некритична точка,
изпълнява прекъсването без намесата
на други процеси
 Никакви “мъртви-хватки” (deadlock) или
недостиг на ресурси (starvation)

Изисквания за
взаимно изключване
Достъпът до критична точка на даден
процес не трябва да се забавя, когато
няма друг процес, който да я използава
 Не се правят предположения за
относителна скорост на процеса или
броя на процесите
 Процес е в критична секция само за
определено време

Съдържание
Принципи на съгласуването(Concurrency)
 Взаимно изключване: Хардуерна
поддръжка
 Семафори
 Монитори
 Предаване на съобшения
 Проблем четящи/пишещи

Деактивиране на
прекъсванията
Еднопроцесорните системи само
позволяват разделянето на процеса на
части
 Деактивиране на прекъсванията




Процесът се изпълнява, докато не извика услуга
на операционната система или докато не бъде
прекъснат
Деактивиране на прекъсванията гарантира
взаимно изключване
Няма да работи в мултипроцесорни архитектури
Псевдо-код
while (true) {
/*
/*
/*
/*
}
disable interrupts */;
critical section */;
enable interrupts */;
remainder */;
Специални инструкции

Инструкция Compare&Swap


Наречена още “compare and exchange
instruction”
Инструкция Exchange
Инструкция Compare&Swap
int compare_and_swap (int *word,
int testval, int newval)
{
int oldval;
oldval = *word;
if (oldval == testval) *word = newval;
return oldval;
}
Взаимно изключване (fig 5.2)
Exchange instruction
void exchange (int register, int
memory)
{
int temp;
temp = memory;
memory = register;
register = temp;
}
Exchange Instruction
(fig 5.2)
Хардуерно взаимно
изключване: Предимства
Приложимо за произволен брой
процеси на единичен процесор или
повече процесори, споделящи
основната памет
 Просто и поради това лесно да се
проверява
 Може да се използва за поддръжка на
множество критични секции

Хардуерно взаимно
изключване: Недостатъци
Busy-waiting състоянията консумират
процесорно време
 Възможен е недостиг на ресурси, когато
даден процес напусне критична секция
и има повече от един други чакащи
процеси.



На някои процеси може да им се отказва
достъп до безкрай.
Възможни са мъртви хватки
Съдържание
Принципи на съгласуването
(Concurrency)
 Взаимно изключване: Хардуерна
поддръжка
 Семафори
 Монитори
 Предаване на съобщения
 Проблем четящи/пишещи

Семафор

Семафор:


Цяла стойност, използвана за
сигнализация между процеси.
Само три операции могат да се
извършват върху семафор, всички от
които са за атомични:
инициализация
 Намаляване - Decrement (semWait)
 Увеличаване - Increment. (semSignal)

Пример за семафор
Пример за двоичен семафор
Strong/Weak семафори

За съхранение на процесите, чакащи
семафора, се използва опашка

В какъв ред процесите се премахват от
опашката?
Strong Семафори използват FIFO
 Weak семафори не определят реда на
напускането на процеса от опашката с
чакащи процеси

Пример за механизма на
Strong семафор
Пример за механизъм
на Семафор
Взаимно изключване,
използващо семафори
Процеси, използващи
семафори
Проблемът
Производител/Потребител

Генерално решение:




Един или повече производители генерират данни
и ги поставят в буфер
Един потребител взима данните от буфера в
същото време
Само един от производителите или потребителите
могат да ползват буфер в даден момент
Проблем:

Трябва да се подсигури, че производителят не
може да добавя данни в пълен буфер и
потребителят не може да вземе данни от празен
буфер.
Producer/Consumer Animation
Функции
• Да приемем един безкраен буфер b с линеен
масив от елементи
Producer
while (true) {
/* produce item v */
b[in] = v;
in++;
}
Consumer
while (true) {
while (in <= out)
/*do nothing */;
w = b[out];
out++;
/* consume item w */
}
Буфер (Buffer)
Incorrect Solution
Possible Scenario
Correct Solution
Семафори
Bounded Buffer
Semaphores
Функции в ограничен буфер
• .
Producer
while (true) {
/* produce item v */
while ((in + 1) % n == out)
do nothing */;
b[in] = v;
in = (in + 1) % n
}
Consumer
while (true) {
while (in == out)
/*
/* do nothing */;
w = b[out];
out = (out + 1) % n;
/* consume item w */
}
Демонстрация
Анимации

Производител/Потребител
(Producer/Consumer)


Илюстрира дейността на производителпотребител буфера.
Bounded-Buffer Problem Using Semaphores

Илюстрира ограничен буфер за проблема
производител/потребител и използването на
семафори.
Съдържание
Принципи на съгласуването
(Concurrency)
 Взаимно изключване: Хардуерна
поддръжка
 Семафори
 Монитори
 Предаване на съобщения
 Проблемът четящи/пишещи

Монитори
Мониторът е програма, която осигурява
сходна функционалност както
семафорите, но е по-лесна за
контролиране.
 Реализирана е на редица програмни
езици, включително

Concurrent Pascal, Pascal-Plus,
 Modula-2, Modula-3, и Java.

Основни характеристики
Локалните променливи са достъпни
само от монитора
 Процесът влиза в монитора чрез
извикване на една от неговите
процедури
 Само един процес може да се
изпълнява в монитора в дадено време

Синхронизация

Синхронизацията е постигната чрез
condition variables в рамките на
монитора


Достъпни само от монитора.
Функции на монитора:
Cwait(c): Прекратява изпълнението на
извикващият я процес при условие c
Csignal(c) Възстановява изпълнението на
процес, блокиран след cwait при същото
условие
Структура на монитор
Решение на проблема
“ограничен буфер” с монитор
Решение, използващо
монитор
Bounded
Buffer Monitor
Съдържание
Принципи на съгласуването
(Concurrency)
 Взаимно изключване: Хардуерна
поддръжка
 Семафори
 Монитори
 Предаване на съобщения
 Проблем четящи/пишещи

Взаимодействие на процеси

При взаимодеиствие на процеси,
трябва да бъдат изпълнени две
основни изисквания:



синхронизация
комуникация.
Предаването на съобшения е едно
решение на второто изискване

Допълнителен бонус: Работи със
споделена памет и разпределени системи
Предаване на съобщения
Основната функция на обмена на
съобщения се осигурява във вид на
двойка примитиви:

send (destination, message)

receive (source, message)

Синхронизация

Комуникацията изисква синхронизация


Подателят трябва да изпрати преди
получателят да може да получи
съобщението
Какво се случва в процеса след като
обработи send/receive primitive?

Подателят и получателят може и да се
блокират, чакайки за съобщение (waiting for
message)
Блокиращ send,
блокиращ receive
Подателят и получателят се блокират
докато съобщението не бъде доставено
 Познато като rendezvous (среща)
 Дава възможност за строга
синхронизация между процеси.

Неблокиращ Send
По-естествен е за повечето програмни
задачи, които се изпълняват и
съгласуват едновременно.
 Неблокиращ send, блокиращ receive

Подателят продължава изпълнението си
 Получателят е блокиран докато изисканото
съобщение не бъде получено
 Неблокиращ send, неблокиращ receive
 Никоя от страните в комуникацията не
трябва да чака

Адресиране

Изпращащият процес се нуждае от
възможност да определи кои процес
трябва да получи съобщението
Директно адресиране
 Индиректно адресиране

Директно адресиране
Send примитивата включва специфичен
идентификатор на целевия процес
 Receive примитивата би трябвало да
знае предварително от кой процес
очаква съобщение
 Receive примитивата би трябвало да
използва source parameter, за да върне
стойност, когато операцията по
получаване на съобщението е
изпълнена.

Индиректно адресиране
Съобщенията се пращат на споделена
структура от данни, състояща се от
опашки
 Опашките се наричат mailboxes
 Един процес изпраща съобщение до
mailbox, а друг процес взима
съобщението от “пощенската кутия”
(mailbox).

Индиректна комуникация
на процеси
Обобщен формат на
съобщението
Взаимно изключване,
реализирано със съобщения
Производител/Потребите
със съобщения
Съдържание
Принципи на съгласуването
(Concurrency)
 Взаимно изключване: Хардуерна
поддръжка
 Семафори
 Монитори
 Предаване на съобщения
 Проблем четящи/пишещи

Проблем четящи/пишещи

Данните са споделени от много процеси


Някои процеси могат само да четат данни,
други само да записват данни
Условия, които трябва да се изпълнят:
1.
2.
3.
Множеството читатели могат да четат даден файл
наведнъж.
Само един “писател ” може да записва данни във
файла в дадено време
Ако “писател” записва във файл, нито един
“читател” не може да го прочете.
Readers имат приоритет
Writers имат приоритет
Writers имат приоритет
Обмен на съобщения
Обмен на съобщения