Процес Syncхронизация: Проблем с критична секция в OS

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

Процес SyncХронизацията е задача за координиране на изпълнението на процесите, така че два процеса да не имат достъп до едни и същи споделени данни или ресурс едновременно. Тя предотвратява несъответствието на данните в многопроцесорни системи, като контролира входа към критичната секция.

  • 🔗 Определение: SyncХронизацията координира процесите, така че те да не осъществяват едновременен достъп до споделени данни.
  • ⚠️ Защо е необходимо: Некоординираният достъп до споделената памет води до непоследователни и грешни данни.
  • 🧩 Критична секция: Входните, критичните, изходните и остатъчните секции структурират безопасния достъп до споделени променливи.
  • 📏 Три правила: Валидното решение трябва да удовлетворява взаимното изключване, напредъка и ограниченото чакане.
  • 🛠️ Решения: Алгоритъмът на Питърсън, хардуерът за синхронизация, mutex заключванията и семафорите решават проблема.
  • 🚦 Semaphore: Споделена неотрицателна променлива, сигнализирана чрез атомни операции wait() и signal().

Процес Syncхронизация

Какво е процес Syncхронизация?

Процес Syncхронизация е задачата да координира изпълнението на процесите по начин, по който два процеса да не могат да имат достъп до едни и същи споделени данни и ресурси.

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

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

Как процес Syncхронизация работи?

Например, процес А променя данните в дадено място в паметта, докато друг процес Б се опитва да прочете данните от... един и същ място в паметта. Има голяма вероятност данните, прочетени от втория процес, да бъдат грешни.

Процес Syncхронизация Работи

Раздели на програма

Ето четири основни елемента на критичната секция:

  • Входна секция: Това е част от процеса, който решава навлизането на конкретен процес.
  • Критична секция: Тази част позволява на един процес да въвежда и променя споделената променлива.
  • Изходна секция: Секцията „Изход“ позволява на другите процеси, които чакат във Входната секция, да влязат в Критичната секция. Тя също така проверява дали процес, който е завършил изпълнението си, трябва да бъде премахнат през тази секция.
  • Остатъчен раздел: Всички останали части на Code, които не са в критичната, входната и изходната секции, са известни като секцията „Остатък“.

Какво представлява проблемът с критичната секция?

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

  • Влизането в критичната секция се обработва от функцията wait() и се представя като P().
  • Изходът от критична секция се контролира от функцията signal(), представена като V().

В критичната секция може да се изпълни само един процес. Други процеси, чакащи да изпълнят своята критична секция, трябва да изчакат, докато текущият процес завърши своето изпълнение.

Правила за критична секция

Критичният раздел трябва да прилага и трите правила:

  • Взаимно изключване: Взаимното изключване е специален тип двоичен семафор, който се използва за контролиране на достъпа до споделения ресурс. Той включва механизъм за наследяване на приоритети, за да се избегнат разширени проблеми с инверсията на приоритета. Не повече от един процес може да се изпълнява в неговата критична секция наведнъж.
  • напредък: Това решение се използва, когато никой не е в критичната секция и някой иска да влезе. Тогава тези процеси, които не са в остатъчната си секция, трябва да решат кой да влезе, за ограничено време.
  • Обвързано чакане: Когато даден процес направи заявка за достъп до критичната секция, има специфично ограничение за броя на процесите, които могат да влязат в неговата критична секция. Така че, когато лимитът бъде достигнат, системата трябва да позволи на заявката към процеса да влезе в критичната си секция.

Решения за критичната секция

В процес Syncхронизация, критичната секция играе основна роля, така че проблемът трябва да бъде решен.

Ето някои широко използвани методи за решаване на проблема с критичната секция.

Решение на Питърсън

Решението на Питърсън е широко използвано решение за задачи с критични секции. Този алгоритъм е разработен от компютърен учен на име Питърсън, поради което е наречен „решение на Питърсън“.

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

Пример

Решения за критичната секция

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • Да приемем, че има N процеса (P1, P2, ... PN) и всеки процес в даден момент трябва да влезе в критичната секция.
  • Поддържа се масив FLAG[] с размер N, който по подразбиране е false. Така че, когато даден процес трябва да влезе в критичната секция, той трябва да зададе своя флаг като true. Например, ако Pi иска да влезе, той ще зададе FLAG[i]=TRUE.
  • Друга променлива, наречена TURN, показва номера на процеса, който в момента чака да влезе в CS.
  • Процесът, който влиза в критичната секция, докато излиза, ще промени TURN на друг номер от списъка с готови процеси.
  • Пример: ходът е 2, след това P2 влиза в критичната секция и при излизане от ход=3 и следователно P3 излиза от цикъла на изчакване.

Syncхронизация Хардуер

Понякога проблемите на критичната секция се решават и чрез хардуер. Някои операционни системи предлагат функционалност за заключване, при която процесът се заключва при влизане в критичната секция и я освобождава след като я напусне.

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

Брави Mutex

SyncХардуерът за хронизация не е лесен метод за внедряване от всеки, така че беше въведен и строг софтуерен метод, известен като Mutex Locks.

При този подход в секцията за въвеждане на кода се получава ЗАКЛЮЧВАНЕ върху критичните ресурси, използвани в критичната секция. В секцията за изход тази ключалка се освобождава.

Semaphore Решение

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

Използва две атомарни операции: 1) изчакване и 2) сигнал за синхронизация на процеса.

Пример

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

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

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

Състезание възниква, когато два или повече процеса имат достъп до споделени данни едновременно и крайният резултат зависи от времето на тяхното изпълнение. SyncХронизацията го предотвратява, като гарантира, че само един процес влиза в критичната секция едновременно.

Безизходица възниква, когато два или повече процеса държат ресурс и чакат ресурс, държан от другия, така че никой не може да продължи. Внимателното подреждане на заключванията, времето за изчакване и алгоритмите за избягване помагат за предотвратяване на безизходици по време на синхронизация.

Инструментите с изкуствен интелект могат да анализират код и изпълнение tracза откриване на условия на състезание, безизходици и липсващи заключвания, които е трудно да се възпроизведат ръчно. Чрез изучаване на често срещани модели на паралелизъм, те сигнализират за рисков достъп до споделени данни и предлагат къде е необходима синхронизация.

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

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