CS/OperatingSystem

프로세스 동기화

whyWhale 2021. 4. 21.

Critical Section (임계 영역)


임계 영역이란

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

 

 

임계 영역의 문제

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

 

 

Requirements

  • Mutual Exclusion (상호 배제)
    • 프로세스 P1이 Critical Section에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section에서 실행 될 수 없다.
    • 오직 하나의 쓰레드만이 진입 가능하다.
  • Progress(진행)
    • Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section진입 후보로서 참여될 수 있다.
    • 한 임계구역에 접근하는 쓰레드를 결정하는 것은 유한 시간 이내에 이루어져야 한다.
  • Bounded Waiting( 한정된 대기)
    • P1이 Critical Section에 진입 신청 후 부터 받아들여질 때까지, 다른 프로세스들이 Critical Section에 진입하는 횟수가 제한이 있어야 한다.
    • 임계구역으로 진입하기 위해 대기하는 모든 쓰레드는 유한 시간 이내에 해당 임계구역으로 진입할 수 있어야 한다.

 

임계 영역 해결책


Lock

  • 하드웨어 기반 해결책으로써, 동시에 공유하는 자원에 접근하는 것을 막기 위해 Critical Section에 진입하는 프로세스는 Lock을 획득하고 Critical Secion을 빠져나올 떄, Lock을 방출함으로써 동시에 접근을 허용하지 않는다.
  • 한계
    • 다중처리기 환경에서는 시간적인 효율성 측면에 적용할 수 없다.

 

Semaphores(세마포)

  • 카운팅 세마포
    • 가용한 자원의 개수를 지정하고 자원을 사용시 세마포가 감소, 방출하면 세마포 증가하게 된다.
  • 이진 세마포
    • MUTEX 라고 부르며, 상호배제의 머릿글을 따서 만들어 졌다.
    • 0과 1사이의 값만 가능하며, 다중 프로세스들에서 Critical Section 문제를 해결하기 위해 사용한다.
  • 단점
    • Busy Wating(바쁜 대기)
      • Spin Lock이라고 불리는 Semaphore 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입 코드를 계속 반복적으로 실행하며, CPU 시간을 낭비 했었다. 이를 BusyWating이 라고 한다.
      • 특수한 상황이 아니면 비효율적이다.
      • 일반적으로 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 꺠우는 방식을 사용한다. 이로써 Busy Wating문제가 해결된다.
    • Dead Lock(교착 상태)
      • 세마포가 Ready QUeue를 가지고 있고, 둘 이상의 프로세스가 Critical Section진입을 무한정 기다리고 있고, Critical Section에서 실행되는 프로세스는 진입 대기 중인 프로세스가 실행되어야만 빠져나올 수 있는 상황을 지칭한다.

'CS > OperatingSystem' 카테고리의 다른 글

가상메모리  (0) 2021.04.23
메모리 관리 전략  (0) 2021.04.22
Blocking, Non-Blocking and Async  (0) 2021.04.21
스케줄러 알고리즘  (0) 2021.04.19
스케줄러  (0) 2021.04.17

댓글