컴퓨터 & 코딩/CS

[혼공학습단 10기][혼공컴운] 프로세스 동기화

구로그 2023. 7. 17. 14:30
728x90

✓ 동기화란 

✏️ 프로세스 동기화: 프로세스들 사이의 수행 시기를 맞추는 것

 

- 실행 순서 제어를 위한 동기화: 프로세스를 올바른 순서대로 실행하기 위한 동기화

- 상호 배제를 위한 동기화: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 위한 동기화 

 

💡 생산자와 소비자 문제: 생산자 프로세스와 소비자 프로세스가 제대로 동기화되지 않아 발생하는 문제. 예상치 못한 결과나 실행 중 오류가 난다. 

 

- 공유 자원 shared resource: 프로세스들이 공유하는 자원. (전역변수, 파일, 입출력장치, 보조기억장치 등)

- 임계 구역 critical section: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역 

 

❗️레이스 컨디션 race condition: 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 발생하는 문제. 데이터의 일관성이 깨지는 문제가 발생하게 된다. 상호 배제를 위한 동기화는 이와 같은 일이 발생하지 않도록 관리한다. 

 

 

✅ 상호 배제 동기화를 위한 세 가지 원칙

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

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

- 유한 대기 bounded waiting: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다. (→ 임계 구역에 들어오기 위해 무한정 대기해서는 안 된다.)

 

 


 

✓ 동기화 기법

1️⃣ 뮤테스락 Mutext lock(MUTual EXclusion lock)

상호 배제를 위한 동기화 도구. 탈의실의 자물쇠 같은 것이다. (자물쇠가 걸려있으면 사람이 있으니 이용불가, 안 걸려있으면 이용가능)

 

- 전역 변수 lock: 자물쇠 역할

- acquire 함수: 임계 구역을 잠그는 역할. 프로세스가 임계 구역에 진입하기 전에 호출한다. 임계구역이 잠겨있다면 열릴 때까지 반복적으로 확인하고(바쁜 대기) 열려있다면 임계구역을 잠근다. 

-  release 함수: 임계 구역의 잠금을 해제하는 역할. 임계 구역에서의 작업이 끝나고 호출되며 잠긴 임계 구역을 열어주는 함수이다. 

 

 

 

 

2️⃣ 세마포 Semaphore (카운팅 세마포)

공유 자원이 여러개 있을 경우 여러 개의 프로세스가 각각 공유 자원에 접근이 가능한 동기화 도구. 철도 신호기에서 유래한 용어이다. 

 

- 전역변수 S: 임계 구역에 진입할 수 있는 프로세스의 개수 (사용 가능한 공유 자원의 개수)

- wait 함수: 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려준다.

- signal 함수: 임계 구역 앞에서 기다리는 프로세스에 '이제 가도 좋다'고 신호를 준다.

💡 사용할 수 있는 공유 자원이 없는 경우 S 확인을 무한 반복하는데 이는 CPU주기를 낭비한다. 그래서 대기큐, 준비큐로 프로세스를 옮기면서 진행함

 

 

3️⃣ 모니터

공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리하는 동기화 도구.

프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하고, 공유 자원을 다루는 인터페이스에 접근하기 위한 큐(모니터에 접근하기 위한 큐)를 만들어 모니터 안에 항상 하나의 프로세스만 들어오도록 하였다.

 

- 조건 변수: 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위한 변수. 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수이다. 

❗️ 모니터에 진입하기 위해 삽입되는 큐(상호 배제를 위한 큐)와 wait이 호출되어 실행이 중단된 프로세스들이 삽입되는 큐(조건 변수에 대한 큐)는 다르다. 

- 특정 프로세스가 아직 실행될 조건이 되지 않았을 때는 wait을 통해 실행을 중단한다

- 특정 프로세스가 실행될 조건이 충족되었을 때는 signal을 통해 실행을 재개한다. 

반응형