Какво е семафор? Двоични, преброяване на типове с пример

Съдържание:

Anonim

Какво е семафор?

Semaphore е просто променлива, която е неотрицателна и се споделя между нишките. Семафорът е сигнализиращ механизъм и нишка, която чака на семафор, може да бъде сигнализирана от друга нишка. Той използва две атомни операции, 1) изчакване и 2) сигнал за синхронизация на процеса.

Семафорът позволява или забранява достъпа до ресурса, което зависи от начина му на настройка.

В този урок за операционна система (OS) ще научите:

  • Характерно за Семафор
  • Какво е семафор?
  • Видове семафори
  • Пример за семафор
  • Изчакване и сигнални операции в семафори
  • Преброяване на семафора срещу бинарния семафор
  • Разлика между Semaphore срещу Mutex
  • Предимства на семафорите
  • Недостатък на семафорите

Характерно за Семафор

Тук са характерни за семафор:

  • Това е механизъм, който може да се използва за осигуряване на синхронизиране на задачите.
  • Това е механизъм за синхронизиране на ниско ниво.
  • Семафорът винаги ще съдържа неотрицателна целочислена стойност.
  • Семафорът може да бъде реализиран с помощта на тестови операции и прекъсвания, които трябва да бъдат изпълнени с помощта на файлови дескриптори.

Видове семафори

Двата често срещани вида семафори са

  • Преброяване на семафори
  • Двоични семафори.

Преброяване на семафори

Този тип семафор използва брояч, който помага да се придобие или пусне задача многократно. Ако първоначалното броене = 0, броещият семафор трябва да бъде създаден в недостъпно състояние.

Ако обаче броят е> 0, семафорът се създава в наличното състояние и броят на жетоните, които има, е равен на броя му.

Двоични семафори

Двоичните семафори са доста подобни на броенето на семафори, но стойността им е ограничена до 0 и 1. При този тип семафор операцията за изчакване работи само ако семафор = 1, а операцията по сигнала е успешна, когато семафор = 0. Лесно е да се внедряване от броенето на семафори.

Пример за семафор

Дадената по-долу програма е стъпка по стъпка изпълнение, което включва използване и деклариране на семафор.

Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;

Изчакване и сигнални операции в семафори

И двете операции се използват за осъществяване на синхронизация на процеса. Целта на тази семафорна операция е да се постигне взаимно изключване.

Изчакайте операция

Този тип семафорни операции ви помага да контролирате влизането на задача в критичния раздел. Ако обаче стойността на изчакването е положителна, тогава стойността на аргумента за изчакване X се намалява. В случай на отрицателна или нулева стойност не се изпълнява операция. Нарича се още P (S) операция.

След като стойността на семафора се намали, което стане отрицателно, командата се задържа, докато се изпълнят необходимите условия.

Copy CodeP(S){while (S<=0);S--;}

Операция на сигнала

Този тип операция на Semaphore се използва за контрол на изхода на задача от критичен раздел. Помага да се увеличи стойността на аргумента с 1, което се обозначава като V (S).

Copy CodeP(S){while (S>=0);S++;}

Преброяване на семафора срещу бинарния семафор

Ето някои основни разлики между броенето и двоичния семафор:

Преброяване на семафор Двоичен семафор
Без взаимно изключване Взаимно изключване
Всяка целочислена стойност Стойност само 0 и 1
Повече от един слот Само един слот
Осигурете набор от процеси Той има механизъм за взаимно изключване.

Разлика между Semaphore срещу Mutex

Параметри Семафор Мютекс
Механизъм Това е вид сигнален механизъм. Това е заключващ механизъм.
Тип данни Семафорът е цяло число променлива. Mutex е просто обект.
Модификация Операциите за изчакване и сигнализиране могат да модифицират семафор. Той се модифицира само от процеса, който може да поиска или пусне ресурс.
Управление на ресурси Ако нито един ресурс не е свободен, тогава процесът изисква ресурс, който трябва да изпълни операцията за изчакване. Трябва да изчака, докато броят на семафора е по-голям от 0. Ако е заключен, процесът трябва да изчака. Процесът трябва да се държи на опашка. Това трябва да бъде достъпно само когато мютексът е отключен.
Тема Можете да имате множество програмни нишки. Можете да имате множество програмни нишки в mutex, но не едновременно.
Собственост Стойността може да бъде променена чрез всеки процес за освобождаване или получаване на ресурса. Заключването на обекта се освобождава само от процеса, който е получил заключването върху него.
Видове Видовете семафор са преброяване на семафор и двоичен семафор и Mutex няма подтипове.
Операция Стойността на семафора се модифицира с помощта на операция wait () и signal (). Mutex обектът е заключен или отключен.
Заетост на ресурсите Той е зает, ако се използват всички ресурси и процесът, който иска ресурс, изпълнява операция wait () и се блокира, докато броят на семафорите стане> 1. В случай, че обектът вече е заключен, процесът, изискващ ресурси, изчаква и се поставя на опашка от системата преди освобождаването на заключването.

Предимства на семафорите

Ето плюсовете / ползите от използването на Semaphore:

  • Тя позволява на повече от една нишка достъп до критичната секция
  • Семафорите са машинно независими.
  • Семафорите са внедрени в машинно независимия код на микроядрото.
  • Те не позволяват на множество процеси да влязат в критичната секция.
  • Тъй като има заето чакане в семафора, никога не се губи време и ресурси на процеса.
  • Те са машинно независими, което трябва да се изпълнява в машинно независим код на микроядрото.
  • Те позволяват гъвкаво управление на ресурсите.

Недостатък на семафорите

Тук има минуси / недостатъци на семафора

  • Едно от най-големите ограничения на семафора е приоритетната инверсия.
  • Операционната система трябва да следи всички повиквания за изчакване и да сигнализира семафор.
  • Използването им никога не се налага, но е само по конвенция.
  • За да се избегнат блокировки в семафора, операциите Wait и Signal трябва да бъдат изпълнени в правилния ред.
  • Програмирането на семафор е сложно, така че има шанс да не се постигне взаимно изключване.
  • Това също не е практически метод за широкомащабна употреба, тъй като тяхното използване води до загуба на модулност.
  • Семафорът е по-склонен към грешка в програмиста.
  • Това може да доведе до блокиране или нарушаване на взаимното изключване поради грешка на програмиста.

Резюме:

  • Семафорът се дефинира като променлива, която е неотрицателна и се споделя между нишките.
  • Това е механизъм, който може да се използва за осигуряване на синхронизиране на задачите.
  • Преброяването на семафора използва брояч, който помага многократно да бъде придобита или освободена задача.
  • Двоичните семафори са доста подобни на броенето на семафори, но стойността им е ограничена до 0 и 1.
  • Операцията Wait ви помага да контролирате влизането на задача в критичния раздел
  • Сигналната семафорна операция се използва за управление на изхода на задача от критична секция
  • Преброяването на семафор няма взаимно изключване, докато двоичният семафор има взаимно изключване
  • Семафор означава сигнален механизъм, докато Mutex е заключващ механизъм
  • Semaphore позволява повече от една нишка за достъп до критичната секция
  • Едно от най-големите ограничения на семафора е приоритетната инверсия.