[기타] 병행 프로세스

KIM Jongwan·2023년 8월 7일
0

기타

목록 보기
5/9

1. 병행 프로세스(Concurrent Process)란

  • 병행 프로세스(Concurrent Process)란 두 개 이상의 프로세스가 동시에 수행상태(존재)에 있는 것을 의미한다.
  • 병행 프로세스는 독립적 병행 프로세스협동적 병행 프로세스로 구분할 수 있다.
    • 독립적 병행 프로세스: 여러 프로세스들이 독립적으로 실행
    • 협동적 병행 프로세스: 서로 협업하여 동시에 실행
  • 여러 프로세스가 제한된 자원을 공유하여 실행되기 때문에 프로세스 간 동기화 문제, 교착 상태 문제를 해결하기 위한 방안이 필요하다.
  • 다중 처리 시스템, 분산 처리 시스템 등에 사용

2. 경쟁 상태(Race Condition)

  • 컴퓨터는 한정적인 자원안에서 동작을 수행하게된다.
  • 때문에 병행 프로세스의 입장에서 동시에 공유 자원에 접근하는 일이 발생한다.
  • 이러한 경쟁 상태가 해결되지 않으면 컴퓨터는 교착 상태에 빠지게 되므로, 공유자원에 대하여 한 번에 하나의 프로세스만이 접근 가능하도록 제어할 필요가 있다.


3. 임계 구역 (임계 영역, Critical section)

  • 임계 구역 혹은 임계 영역이란

    병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
    임계 구역. 위키벡과

  • 앞서 살펴보았던 경쟁 상태에서 각 프로세스는 공유 자원을 획득 하기 위해 임계 구역에 접근하게된다.

  • 임계 영역 예시 코드

  do {
        wait(mutex);   //입장 구역
        임계 구역
        signal(mutex); //퇴장 구역
        나머지 구역
  }
  • 임계 구역 입장 이전에 wait()를 호출, mutex 값을 확인하여 현재 스레드 외 다른 스레드의 자원 접근을 차단한다.
  • 임계 구역 내 로직 실행이 모두 종료되면 signal()을 호출, mutex값을 대기값으로 변경
  • 병행 프로세스에서는 임계 구역의 동시 접근 배재, 즉 경쟁 상태로의 돌입을 사전에 예방할 필요가 있다.
    대표적인 예방 방법으로 뮤텍스와 세마포어가 있다.
  • 뮤텍스와 세마포어의 차이는 임계 영역으로의 두개 이상의 스레드 접근을 허용하느냐 하지않느냐의 차이이다.

4. 뮤텍스 (Mutual Exclusion, Mutex)

  • Mutual Exclusion의 약자로 상호배제 기법이라고도 한다.
  • 뮤텍스 기법은 공유 자원으로의 여러 스레드가 접근하는 것은 막는다.
  • 뮤텍스는 pthread에서 제공하는 동기화 매커니즘으로 공유 자원 공간에 대한 접근 시간 제어로 동기화를 달성한다.
  • 예시 코드
global int v = 1;
lock()
{
    while(1)
    {
        if (v==1)
            break;
    }
    v = 0;
    return 1;
}

unlock()
{
    v = 1;
    break;
}
  • 상호 배제는 잠금 형식으로 이루어진다. 쓰레드는 잠금 v를 얻어야 임계 영역에 진입할 수 있다. 임계 영역을 빠져나오면 잠금을 되돌려 줘서 다른 쓰레드가 잠금을 얻을 수 있도록 한다.

  • 심화: 뮤텍스 생성 코드(예정)


5. 세마포어 (Semaphore)

  • 세마포어는 사전적 의미는 수기 신호
  • 세마포어는 상호 배제알고리즘으로 임계 영역을 만들어서 자원을 보호한다.
  • 차단을 원하는 자원에대해서 세마포어를 생성하면 해당자원을 가리키는 세마포어 값이 할당된다. 이 세마포어값을 검사해서 임계영역에 접근할 수 있는지를 결정하게 된다.

SYSTEM V 세마포어

  • 기본적인 형태의 세마포어

POSIX 세마포어

  • POSIX 규격을 따르는 새로운 세마포어 인터페이스로 전통적인 System V 인터페이스에 비해서 좀 더 명확하다. 또한 세마포어 집합이란 개념이 없는데, 덕분에 이해하기가 수월해진 것 같다.

참조 목록

profile
3년차 백앤드 개발자입니다.

0개의 댓글