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

Съдържание:

Anonim

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

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

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

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

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

  • Какво е синхронизиране на процесите?
  • Как работи синхронизирането на процесите?
  • Раздели на програма
  • Какво представлява проблемът с критичната секция?
  • Правила за критичен раздел
  • Решения за критичния раздел

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

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

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

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

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

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

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

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

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

Правила за критичен раздел

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

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

Решения за критичния раздел

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

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

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

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

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

Пример

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

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

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

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

Mutex брави

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

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

Решение за семафор

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

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

Пример

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

Резюме:

  • Синхронизацията на процеса е задачата за координиране на изпълнението на процеси по начин, по който нито един процес не може да има достъп до едни и същи споделени данни и ресурси.
  • Четири елемента на критичната секция са 1) Секция за влизане 2) Критична секция 3) Секция за изход 4) Секция за напомняне
  • Критичният раздел е сегмент от код, който може да бъде достъпен чрез сигнален процес в определен момент от времето.
  • Три правила за задължително изпълнение, които трябва да се прилагат чрез критичен раздел, са: 1) Взаимно изключване 2) Процесно решение 3) Обвързване
  • Взаимното изключване е специален тип двоичен семафор, който се използва за контролиране на достъпа до споделения ресурс.
  • Процесното решение се използва, когато никой не е в критичната секция и някой иска да влезе.
  • В обвързаното решение за изчакване, след като процесът направи заявка за влизане в критичния си раздел, има ограничение за това колко други процеси могат да влязат в критичния си раздел.
  • Решението на Питърсън е широко използвано решение за проблеми с критични раздели.
  • Проблемите на критичната секция също се решават чрез синхронизиране на хардуера
  • Хардуерът за синхронизация не е прост метод за прилагане за всички, така че беше въведен и строгият софтуерен метод, известен като Mutex Locks.
  • Семафорът е друг алгоритъм или решение на проблема с критичната секция.