[시스템 소프트웨어]04-2 임계영역

yesman·2021년 12월 21일
0

시스템 소프트웨어

목록 보기
10/23

Critical-Section Problem

(임계영역)
Syncroniztion(동기화): events 혹은 프로세스의 수행에 관한 순서지정을 위한 제약사항들의 집합니다. 동기화 기법들이 동기화를 위해서 사용되는데, 결국 이는 주어진 순차를 위한 제약사항들을 만족시키기 위해 프로세스 수행을 지연시키는 것이라 할 수 있다.

동기화를 위한 조건 두가지가 있다.
1. 순차제어(sequence control)
event혹은 프로세스의 수행이 올바른 순서로 일어나도록 제약을 가한다.
-조건동기화, 활동동기화
2. 상호배제(mutual exclusion)
공유자원에 대한 배타적인 접근. 즉, 어떤 프로세스가 자원을 액세스하고 있으면 다른 프로세스는 그 자원을 액세스할 수 없다. 이것으로 race condition을 해결할 수 있다.

Critical Section은 프로세스가 실행하고 있는 프로그램의 일부로, 다른 프로세스들과 공유하고 있는 데이터(변수, 테이블, 파일쓰기 등)를 수정 혹은 변경하는 프로그램의 부분을 critical section이라 한다. 그러므로, 모든 프로그램은 critical section과 non-critical section으로 나뉘어진다고 할 수 있다.


위와 같은 P1과 P2가 동시에 공유자원에 접근하는 경우가 생기면 안된다.

이러한 임계영역 문제를 해결하기 위해서는 세가지 조건이 있다.

  1. Mutual exclusion(상호배제)
  • 만약 프로세스 Pi가 그것의 임계영역 안에서 수행하고 있다면 어떤 다른 프로세스도 그들의 임계영역에서 수행하면 안된다.
  • 두개 이상의 프로세스의 임계영역은 서로 절대 간섭하면 안된다.
  • 프로세스는 그것의 프로토콜이나 임계영역의 수행중에 끼어들면 안된다.
  • 공유할 수 없는 임계자원, 예를 들어 프린터같은 공유자원을 위한 것이다.
  1. Progress
  • 임계영역의 진입과 탈출이 원할해야 한며 무한정 기다리면 안된다.
  • 만약 어떤 프로세스도 임계영역에서 수행중이지 않고 임계영역에 들어가고 싶어하는 어떤 프로세스가 존재한다면 그러한 프로세스만이 임계영역에 들어갈 수 있고 이것은 무한정으로 연기될 수 없다.
  1. Bounded waiting
  • 한 프로세스가 그것의 임계영역에 들어가는 것을 요청하고 그 요청을 받아들이기 전, 다른 프로세스가 그들의 임계영역에 들어오는 것을 허락하는 시간에 한계가 있다.
  • starvation이 발생하면 안된다.
  • deadlock이 발생하면 안된다.
    각 프로세스는 이러한 구조를 가진다.

    동기화를 위해서는 프로세스는 3가지 요구조건, 즉, mutual exclusion, progress, bounded waiting을 만족하도록 entry_protocol과 exit_protocol이 설계되어야 한다.

실제적인 프로그램 구조는 이러하다.

program
EachProcess(i:integer)
{
	while(True)
    {
    	entry_protocol(R);
        [critical_section];
        exit_protocol(R);
        [non-critical_section];
    }
}
main
{
	parallel
    EachProcess(1);
    EachProcess(2);
    .
    .
    EachProcess(n);
    end;
}
profile
유니티

0개의 댓글