Какво е Semaphore? Броене, двоични типове с пример

⚡ Умно обобщение

Semaphore В операционната система е неотрицателна целочислена променлива, споделена между нишки, която координира достъпа до споделени ресурси чрез две атомни операции, wait и signal, предотвратявайки условия на състезание по време на синхронизация на процесите.

  • 🔢 Определение: Семафорът е неотрицателна целочислена променлива, която сигнализира дали споделен ресурс е достъпен за конкуриращи се нишки.
  • две Operaции: Операцията за изчакване (P) заявява ресурс и намалява брояча, докато операцията за сигнал (V) го освобождава и увеличава брояча.
  • 🔁 Тип броене: Семафорът за броене позволява на зададен брой нишки да използват идентични ресурси едновременно.
  • 🔒 Двоичен тип: Двоичният семафор е ограничен до стойности 0 и 1, така че се държи като обикновена ключалка за взаимно изключване.
  • ⚠️ Компромиси: Semaphoreса машинно-независими и гъвкави, но при неправилно използване рискуват инверсия на приоритетите и безизходица.
  • 🤖 AI Assist: Асистентите за машинно обучение и кодиране с изкуствен интелект могат да моделират едновременност и да генерират правилни последователности за изчакване и сигнализиране.

Semaphore in Operaтинг система

Какво е Semaphore?

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

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

Характеристики на Semaphore

Ето характеристиките на семафора:

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

Видове Semaphores

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

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

Преброяване Semaphores

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

Преброяване Semaphores

Въпреки това, ако броят е > 0, семафорът се създава в налично състояние и броят на токените, които има, е равен на неговия брой.

Двоен Semaphores

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

Двоен Semaphores

Пример за Semaphore

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

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Изчакайте и Signal Operaции в Semaphores

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

Чакам за OperaАЦИ

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

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

P(S)
{
    while (S<=0);
    S--;
}

Signal операция

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

P(S)
{
    while (S>=0);
    S++;
}

Преброяване Semaphore срещу двоичен Semaphore

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

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

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

Таблицата по-долу сравнява a семафор с мутекс по няколко параметъра:

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

Предимства на Semaphores

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

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

Недостатъци на Semaphores

Ето са недостатъците/недостатъците на семафора:

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

Въпроси и Отговори

Едсгер Дейкстра въвежда семафорите през 1965 г. Операциите за изчакване и сигнализиране се наричат ​​още P и V, от холандските думи proberen (тест) и verhogen (увеличение).

Чисто броящият семафор остава неотрицателен, но много реализации позволяват стойността да стане отрицателна. Тогава нейната величина е равна на броя на процесите, чакащи в опашката на семафорите.

Semaphoreкоординират класически проблеми с паралелизма, като например производител-потребител (с ограничен буфер) и четец-записвач. Те ограничават достъпа до ограничен пул от идентични ресурси, защитавайки споделените данни.

Мютексът има собственост, така че само заключващата нишка може да го отключи. Бинарният семафор няма собственик, така че всяка нишка може да го сигнализира. Те не са идентични.

Инверсията на приоритета се случва, когато нишка с нисък приоритет съдържа семафор, от който се нуждае нишка с висок приоритет, принуждавайки спешната нишка да чака. Протоколите за наследяване на приоритети я намаляват.

Повечето съвременни платформи предлагат семафори: POSIX sem_t в C, Semaphore клас в Javaи нанизване на резба.Semaphore in PythonРазработчиците рядко изграждат такъв от нулата.

Машинното обучение може да анализира изпълнението tracда се предскаже конкуренция, да се настрои колко разрешения съдържа един семафор за броене и да се сигнализират вероятни застои, helping инженерите проектират по-безопасна паралелност.

Да. Асистенти с изкуствен интелект, като например GitHub Copilot, могат да генерират шаблони за изчакване и сигнализиране, да предлагат ред на заключване и да обясняват условията на състезание. RevПрегледайте внимателно резултата, тъй като фините безизходици лесно се крият.

Обобщете тази публикация с: