프로세스 동기화

Tabber·2021년 12월 27일
0

CS공부하기

목록 보기
5/8

공부하며 적은 글입니다. 정확하지 않을 수 있습니다.

프로세스 동기화?

프로세스는 서로 메시지를 보내고 프로세스 내부의 스레드들끼리 자원을 공유하면서 '동기화'에 대한 문제가 항상 발생할 수가 있다.

즉 공유된 자원에 여러 프로세스, 여러 스레드가 동시에 접근하면서 문제가 발생할 수 있다는 것이다.

Critical Section (임계영역)

멀티 스레딩 문제점에서도 나오듯이, 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 Critical Section 이라고 칭한다.

Critical Section Problem (임계영역 문제)

프로세스들이 Critical Section 을 함께 사용할 수 있는 프로토콜을 설계하는 것이다.

기본조건

  • Multual Exclusion (상호배제)
    프로세스 P1이 Critical Section에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section 에서 실행될 수 없다.
  • Progress (진행)
    Critial Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로서 참여될 수 있다.
  • Bounded Waiting (한정된 대기)
    P1이 Critical Section에 진입 신청 후 부터 받아들여질 때까지, 다른 프로세스들이 Critical Section에 진입하는 횟수는 제한이 있어야 한다.

해결책

Lock

하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 Critical Section 에 진입하는 프로세스는 Lock을 획득하고 Critical Section을 빠져나올 때, Lock을 방출함으로써 동시에 접근되지 않도록 한다.

한계
다중 처리 환경에서는 시간적인 효율성 측면에서 적용할 수 없다.

Semaphores (세마포)

소프트웨어상에서 Critical Section 문제를 해결하기 위한 동기화 도구

종류
OS 는 Counting/Binary 세마포를 구분한다.

  • Counting Semaphore
    가용한 개수를 가진 자원에 대한 접근 제어용으로 사용, 세마포는 그 가용한 자원의 개수로 초기화된다.
    자원을 사용하면 세마포가 감소하고 방출하면 세마포가 증가한다.
  • Binary Semaphore
    MUTEX 라고도 불리며, 상호배제의 머릿클자를 따서 만들었다. 이름 그대로 0과 1 사이의 값만 가능하며, 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위해 사용한다.

단점

  • Busy Waiting (바쁜 대기)
    Spin Lock 이라고 불리는 세마포 초기 버전에서 Critical Section에 진입해야 하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로는 세마포에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block을 시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우에는 Busy Waiting으로 인한 시간낭비 문제가 해결된다.
  • Deadlock(교착상태)
    세마포가 Ready Queue를 가지고 있고, 둘 이상의 프로세스가 Critical Section 진입을 무한정 기다리고 있고, Critical Section에서 실행되는 진입 대기 중인 프로세스가 실행되어야만 빠져나올 수 있는 상황을 지칭한다.

모니터

  • 고급언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태
  • 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다.
profile
iOS 정복중인 Tabber 입니다.

0개의 댓글