Какво е Semaphore? Броене, двоични типове с пример
Какво е Semaphore?
Semaphore е просто променлива, която е неотрицателна и се споделя между нишки. Семафорът е сигнализиращ механизъм и нишка, която чака семафор, може да бъде сигнализирана от друга нишка. Той използва две атомарни операции, 1) Изчакайте и 2) Signal за синхронизация на процеса.
Семафорът позволява или забранява достъп до ресурса, което зависи от това как е настроен.
Характерно за Semaphore
Тук са характерни за семафор:
- Това е механизъм, който може да се използва за осигуряване на синхронизация на задачите.
- Това е механизъм за синхронизация на ниско ниво.
- Semaphore винаги ще съдържа неотрицателна цяло число.
- Semaphore може да се реализира с помощта на тестови операции и прекъсвания, които трябва да се изпълняват с помощта на файлови дескриптори.
Видове Semaphores
Двата често срещани вида семафори са
- Преброяване на семафори
- Двоични семафори.
Преброяване Semaphores
Този тип Semaphore използва брой, който помага задачата да бъде придобита или освободена многократно. Ако първоначалният брой е = 0, семафорът за броене трябва да бъде създаден в състояние на недостъпност.
Въпреки това, ако броят е > 0, семафорът се създава в налично състояние и броят на токените, които има, е равен на неговия брой.
Двоен Semaphores
Двоичните семафори са доста подобни на семафорите за броене, но стойността им е ограничена до 0 и 1. В този тип семафор операцията за изчакване работи само ако семафор = 1, а операцията на сигнала е успешна, когато семафор = 0. Лесно е да имплементирайте от броенето на семафори.
Пример за Semaphore
Дадената по-долу програма е стъпка по стъпка внедряване, което включва използване и деклариране на семафор.
Shared var mutex: semaphore = 1; Process i begin . . P(mutex); execute CS; V(mutex); . . End;
Изчакайте и Signal Operaции в Semaphores
И двете от тези операции се използват за изпълнение синхронизация на процеса. Целта на тази семафорна операция е да се получи взаимно изключване.
Чакам за OperaАЦИ
Този тип семафорна операция ви помага да контролирате влизането на задача в критичната секция. Въпреки това, ако стойността на изчакване е положителна, тогава стойността на аргумента на изчакване X се намалява. В случай на отрицателна или нулева стойност не се изпълнява операция. Нарича се още P(S) операция.
След намаляване на стойността на семафора, която става отрицателна, командата се задържа, докато изискваните условия бъдат изпълнени.
Copy CodeP(S) { while (S<=0); S--; }
Signal операция
Този тип Semaphore операция се използва за контролиране на изхода на задача от критичен раздел. Помага да се увеличи стойността на аргумента с 1, което се обозначава като V(S).
Copy CodeP(S) { while (S>=0); S++; }
Преброяване Semaphore срещу двоичен Semaphore
Ето някои основни разлики между броенето и двоичния семафор:
Преброяване Semaphore | Двоен Semaphore |
---|---|
Без взаимно изключване | Взаимно изключване |
Всяка целочислена стойност | Стойност само 0 и 1 |
Повече от един слот | Само един слот |
Осигурете набор от процеси | Има механизъм за взаимно изключване. |
Разлика между Semaphore срещу Mutex
параметри | Semaphore | Мютекс |
---|---|---|
Механизъм | Това е вид сигнален механизъм. | Това е заключващ механизъм. |
Тип данни | Semaphore е цяло число променлива. | Mutex е просто обект. |
Модификация | Операциите за изчакване и сигнализиране могат да променят семафор. | Той се променя само от процеса, който може да поиска или освободи ресурс. |
Управление на ресурси | Ако няма свободен ресурс, тогава процесът изисква ресурс, който трябва да изпълни операция за изчакване. Трябва да изчака, докато броячът на семафора стане по-голям от 0. | Ако е заключен, процесът трябва да изчака. Процесът трябва да се поддържа в опашка. Това трябва да бъде достъпно само когато мютексът е отключен. |
Нишка | Можете да имате множество програмни нишки. | Можете да имате множество програмни нишки в mutex, но не едновременно. |
Собственост | Стойността може да бъде променена от всеки процес, освобождаващ или получаващ ресурса. | Заключването на обекта се освобождава само от процеса, който е получил заключването върху него. |
Видове | Видове Semaphore се броят семафор и двоичен семафор и | Mutex няма подтипове. |
OperaАЦИ | Semaphore стойността се променя с помощта на операция изчакване () и сигнал (). | Mutex обектът е заключен или отключен. |
Заетост на ресурсите | Той е зает, ако всички ресурси се използват и процесът, искащ ресурс, изпълнява операция изчакване () и се блокира, докато броят на семафорите стане >1. | В случай, че обектът вече е заключен, процесът, изискващ ресурси, изчаква и се поставя на опашка от системата, преди заключването да бъде освободено. |
Предимства на Semaphores
Ето плюсовете/ползите от използването Semaphore:
- Позволява достъп на повече от една нишка до критичната секция
- Semaphoreса независими от машината.
- Semaphoreса внедрени в машинно-независимия код на микроядрото.
- Те не позволяват множество процеси да влязат в критичната секция.
- Тъй като има натоварено чакане в семафора, никога няма загуба на време и ресурси за процес.
- Те са машинно независими, които трябва да се изпълняват в машинно независимия код на микроядрото.
- Те позволяват гъвкаво управление на ресурсите.
Недостатък на семафорите
Тук са минуси/недостатъци на семафора
- Едно от най-големите ограничения на семафора е инверсията на приоритета.
- Операционната система трябва да следи всички повиквания за изчакване и да сигнализира семафор.
- Използването им никога не се налага, но е само по конвенция.
- За да се избегнат блокирания в семафора, Wait и Signal операциите трябва да се изпълняват в правилния ред.
- Semaphore програмирането е сложно, така че има шансове да не се постигне взаимно изключване.
- Това също не е практичен метод за широкомащабно използване, тъй като използването им води до загуба на модулност.
- Semaphore е по-податлив на програмни грешки.
- Може да причини задънена улица или нарушение на взаимното изключване поради грешка на програмиста.
Oбобщение
- Semaphore се дефинира като променлива, която е неотрицателна и се споделя между нишки.
- Това е механизъм, който може да се използва за осигуряване на синхронизация на задачите.
- Семафорът за преброяване използва преброяване, което помага на задачата да бъде придобивана или освобождавана многократно.
- Двоичните семафори са доста подобни на семафорите за броене, но тяхната стойност е ограничена до 0 и 1.
- Операцията за изчакване ви помага да контролирате влизането на задача в критичната секция
- Signal семафорната операция се използва за контролиране на изхода на задача от критична секция
- Преброяване Semaphore няма взаимно изключване, докато Binary Semaphore има взаимно изключване
- Semaphore означава сигнализиращ механизъм, докато Mutex е заключващ механизъм
- Semaphore позволява повече от една нишка за достъп до критичната секция
- Едно от най-големите ограничения на семафора е инверсията на приоритета.