본문 바로가기
컴퓨터공학

27. 동기화 기법

by 이면지91 2024. 10. 30.

1.  뮤텍스 락

상호 배제를 위한 동기화 도구(자물쇠 역할)

뮤텍스 락의 단순한 형태 전역 변수 하나, 함수 두 개

  • 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
  • 임계 구역을 잠그는 역할 : acquire 함수
  • 임계 구역의 잠금을 해제하는 역할 : release 함수

 acquire 함수

  • 프로세스가 임계 구역에 진입하기 전에 호출
  • 임계 구역이 잠겨 있다면
  • 임계 구역이 열려 있다면

 release 함수

  • 임계 구역에서의 작업이 끝나고 호출
  • 현재 잠긴 임계 구역을 열기(lock을 false로 바꾸기)

2. 세마포

좀 더 일반화된 방식의 동기화 도구

공유 자원이 여러 개 있는 경우에도 적용 가능

세마포의 단순한 형태 전역 변수 하나, 함수 두 개

  • 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
  • 임계구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
  • 임계구역 앞에서 기다리는 프로세스에 '이제 가도 좋다'고 신호를 주는 signal 함수

3. 모니터

상호 배제를 위한 동기화

  • 인터페이스를 위한 큐
  • 공유자원에 접근하고자 하는 프로세스를 (인터페이스를 위한) 큐에 삽입
  • 큐에 삽입된 순서대로 (한 번에 하나의 프로세스만) 공유 자원 이용

실행 순서 제어를 위한 동기화

  • 조건 변수 condition variable* 이용
    *프로세스나 스레드의 실행 순서를 제어하기 위해 사용되는 특별한 변수
    조건변수.wait() : 대기 상태로 변경, 조건 변수에 대한 큐에 삽입
    조건변수.signal() : wait()으로 대기 상태로 접어든 조건변수를 실행 상태로 변경

모니터 안에는 하나의 프로세스만이 있을 수 있다

  • wait()를 호출했던 프로세스는 signal()을 호출한 프로세스가 모니터를 떠난 뒤에 수행을 재개
  • signal()을 호출한 프로세스의 실행을 일시 중단하고 자신이 실행된 뒤 다시 signal()을 호출한 프로세스의 수행을 재개

'컴퓨터공학' 카테고리의 다른 글

29. 교착 상태 해결방법  (0) 2024.11.13
28. 교착상태_데드락  (0) 2024.10.31
26. 동기화  (0) 2024.10.30
25. CPU 스케줄링 알고리즘  (0) 2024.10.28
24. CPU 스케줄링  (0) 2024.10.26