본문 바로가기
CS/운영체제

[운영체제 OS] Synchronization

by 루시킴 2021. 8. 23.

Race Condition

여러 프로세스가 동기화 없이 동시에 공유 자원에 접근하여 결과값에 영향을 줄 수 있는 상태

자료의 일관성 문제가 발생

 

예시 ) 남자친구, 여자친구가 긱자 데이트 통장에서 동시에 돈을 인출하는 상황 


Critical Section Problem (임계 영역 문제)

Critical Section은 공유 데이터를 접근하는 코드 부분을 의미

Critical Section Problem은 한 프로세스가 처리되고 있는 도중 다른 프로세스가 접근하여 발생하는 동기화 문제

 

Critical Section Problem 해결하기 위한 3가지 기본조건

  1. Mutual Exclusion (상호 배제) : 어떤 프로세스가 Critical Section부분을 수행 중이면, 다른 프로세스는 Critical Section에 접근하지 못함 
  2. Progress (진행) : 현재 Critical Section에 아무도 없고 거기에 들어가고자 하는 프로세스가 있다면 접근 가능함 
  3. Bounded Waiting (유한 대기) : 프로세스가 Critical Section에 들어가기 위해 무한히 기다리면 안됨. 자기차례를 보장 받음.

Critical Section 해결책 (동기화 문제 해결)

  1. Locks
    프로세스가 Critical Section에 들어갈 때 lock(), 나올때 unlock() 하여 동시 접근문제 해결
  2. Semaphore
     자원의 개수를 의미하는 동기화 도구로 사용되며 프로세스가 자원을 사용할땐 세마포어를 감소, 반납할땐 세마포어를 증가시킴.
    1. Counting Semaphore : 동기화 대상이 1개 이상일때 사용
    2. Binary Semaphore : Mutex라고도 불리며 동기화 대상이 오직 1개일 때 사용 

      문제점 : Busy-Wait 
      Critical Section 에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행하며 CPU 자원 낭비. 이를 해결하기 위해, Critical Section에 진입에 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식인 Block & Wake up 방식 사용 
  3. Monitors
    Semaphore 경우 전역변수로 선언되어 어디서든 접근이 가능하고, 코딩하기 어렵다는 문제가 있다. 이를 해결하기 위해 한번에 하나의 프로세스만이 활동 가능한 Monitors방식을 사용. 프로그래머가 동기화 제약조건을 명시적으로 코딩할 필요 없음. 세마포어는 직접 lock을 걸고 해제해야 하는 반면 모니터는 자체적으로 하나의 프로세스만을 처리.

 

 

 

 

 

댓글