프로세스 동기화(Process Synchronization)란?

wannabeking·2022년 9월 13일
0

CS

목록 보기
15/27

두 개 이상의 프로세스가 shared data에 동시 접근하면 data inconsistency가 발생할 수 있기 때문에 data consistency를 유지하기 위한 매커니즘을 프로세스 동기화라 한다.

  • 경쟁 상황(race condition)
    • 커널 수행 중 인터럽트 발생 시, 커널 수행 중 context switching 발생 시, 멀티 프로세서에서 커널 내부 shared data 동시 접근하는 경우
  • 임계 구역(The Critical-Section)
    • 멀티 프로세서애서 race condition을 해결하기 위해 하나 씩 들어갈 수 있도록 임계 구역으로 해결
    • 하나의 프로세스가 critical section에 있을 때 다른 프로세서가 못 들어오게 해야 함
  • 상호 배제(Mutex : Mutual Exclusion)
    • critical section을 가진 스레드의 런타임이 겹치지 않게 하는 것
    • locking, unlocking 사용
    • 데커(Dekker) 알고리즘
      • flag : 프로세스 중 어떤 것이 임계 구역에 들어갈지
      • turn : 어떤 것이 임계 구역 사용 중인지
    • 피터슨(Peterson) 알고리즘
      • 데커와 유사하지만 상대 프로세스에 진입 기회 양보
    • 제과점(Bakery) 알고리즘
      • 가장 작은 번호표 가진 프로세스가 진입
  • 세마포어(Semaphore)
    • 세마포어는 복수개의 스레드가 임계 구역 접근 가능
    • wait, signal로 구현
    • wait이 먼저 호출되어 임계 구역에 들어갈 수 있는지, 우선적으로 실행되어야 할 스레드가 실행되는지 확인
    • 세마포어는 뮤텍스가 될 수 있지만 그 반대는 안됨
  • 모니터(Monitor)
    • 하나의 프로세스 내 다른 스레드 간의 동기화에 사용
    • 라이브러리 혹은 프레임워크가 제공 (Java에 존재)
    • syncronized, wait(), notify() 등의 키워드로 편하게 동기화 가능


profile
내일은 개발왕 😎

0개의 댓글