테키테크 TEKITECH

[운영체제] Ch12. 동기화 문제(생산자와 소비자 문제, 임계 구역 문제)과 동기화 도구(뮤텍스 락, 세마포, 모니터) 본문

그리고/스터디

[운영체제] Ch12. 동기화 문제(생산자와 소비자 문제, 임계 구역 문제)과 동기화 도구(뮤텍스 락, 세마포, 모니터)

TEKI 2023. 2. 16. 00:11

프로세스의 동기화

  1. 동기화
  2. '생산자와 소비자 문제'와 '임계 구역 문제'
  3. 핵심 동기화 도구: 뮤텍스 락, 세마포, 모니터

 


 

1.  동기화

서로 데이터를 주고받으며 동시다발적으로 실행되는 많은 프로세스는 동기화를 통해 일사불란하게 실행될 수 있다. 이때, 동기화 즉, 프로세스 동기화란 프로세스 사이의 수행 시간을 맞추는 것을 의미한다. 

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

프로세스는 올바른 순서대로 실행돼야 한다. 이를테면 특정 조건이 충족되어야 실행 가능한 프로세스의 경우에 해당 조건을 실행시키는 프로세스가 먼저 실행되어야 한다.

[2] 상호 배제를 위한 동기화

서로 다른 두 프로세스가 동시에 접근하면 안 되는 자원에 대해 한 번에 하나의 프로세스만 접근하도록 해야 한다.

 

 

2.  '생산자와 소비자 문제'와 '임계 구역 문제'

◈  생산자와 소비자 문제

상호 배제를 위한 동기화와 관련한 고전적이고 유명한 문제로 생산자와 소비자 문제가 있다. 이는 물건을 계속해서 생산하는 프로세스(생산자)와 물건을 계속해서 소비하는 프로세스(소비자)에 대한 문제로, 두 프로세스는 '총합'이라는 데이터를 공유하고 있다. 이는 프로세스가 제대로 동기화되지 않았기 때문에 발생한다. 이를테면 소비자의 작업이 끝나기도 전에 생산자가 총합을 수정하거나, 생산자의 작업이 끝나기도 전에 소비자가 총합을 수정하는 경우를 말한다. 

◈  임계 구역 문제

공유 자원(shared resource)이란, 앞서 말한 생산자와 소비자 문제의 예시에서 '총합'같은 것을 말한다. 또는 전역 변수, 파일, 입출력장치, 보조기억장치 등이 될 수 있다.

공유 자원 중에서 두 개 이상의 프로세스를 동시에 실행했을 때 문제가 발생하는 자원이 있는데, 이러한 자원에 접근하는 코드 영역을 임계 구역(critical section)이라고 한다. 잘못된 실행으로 임계 구역의 코드를 실행해 문제가 생길 수 있는데, 이를 레이스 컨디션(race condition)이라고 한다.

이러한 임계 구역 문제를 해결하는 방법, 즉 상호 배제를 위한 동기화를 위해서 3가지 원칙을 반드시 따라야 한다.

 상호 배제 (mutual exclusion)
한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 임계 구역에 들어올 수 없다.

진행 (progress)
임계 구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.

유한 대기 (bounded waiting)
한 프로세스가 임계 구역에 진입하고 싶다면, 그 프로세스는 언젠가는 반드시 임계 구역에 들어올 수 있어야 한다.

 

 

3. 핵심 동기화 도구: 뮤텍스 락, 세마포, 모니터 

 

◈  뮤텍스 락 
→ '상호 배제' 원칙을 따르기 위해서는 임계 구역에 프로세스가 있는지 알아야 한다. 이를 위해 탈의실의 자물쇠와 같은 역할을 하는 뮤텍스 락을 사용한다.

뮤텍스 락의 매우 단순한 형태는 하나의 전역 변수(자물쇠 역할)와 두 개의 함수(잠그는 역할, 잠금을 푸는 역할)로 구현할 수 있다.

  • 자물쇠 역할: 프로세스들이 공유하는 전역 변수
  • 잠그는 역할: acquire 함수
  • 잠금을 푸는 역할: release 함수

 

◈  세마포
뮤텍스 락은 하나의 자원이 있을 경우에만 적용 가능하다. 만약 자원이 여러 개라면 세마포를 사용한다. 세마포는 철도 신호기에서 유래한 단어로, 멈춤 신호일 경우엔 프로세스가 임계 구역에 들어가지 않고 대기하고, 출발 신호일 경우엔 프로세스가 임계 구역에 들어갈 수 있다.

세마포의 간단한 형태는 하나의 변수와 두 개의 함수로 구현할 수 있다.

  • 사용 가능한 공유 자원의 개수: 전역변수 S
  • 임계 구역 앞에서 멈춤 신호를 주는 신호기 역할: wait 함수
  • 임계 구역 앞에서 출발 신호를 주는 신호기 역할: signal 함수

 

◈  모니터
세마포에서 매번 wait과 signal 함수를 명시해야 하는 번거로움과 그로 인한 코드 오류를 방지하기 위해 좀 더 간편한 도구로 개발된 것이 모니터이다. 모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리하며, 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근한다. 이를 위해 프로세스를 큐에 삽입하고, 순서대로 공유 자원을 할당한다.

 

반응형
Comments