Какво е семафор?
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 позволява повече от една нишка за достъп до критичната секция
- Едно от най-големите ограничения на семафора е приоритетната инверсия.