오늘도 개발

동기화(프로세스 동기화, 스레드 동기화) 본문

CS

동기화(프로세스 동기화, 스레드 동기화)

Sueeeeeee 2022. 10. 28. 21:28

1. 프로세스의 종류

Independent 프로세스

다른 프로세스와 영향을 주고 받지 않는 독립적인 프로세스 

 

Cooperative 프로세스

다른 프로세스와 영향을 주고 받는 프로세스

Independent 프로세스보다 많이 사용됨.

2. 동기화란?

Race Condition

공유하는 데이터에 두 개 이상의 프로세스(또는 스레드)가 동시에 접근했을 때,

데이터의 일관성(data inconsistency)이 깨지는 경우를 Race Condition이라고 한다.

 

ex) 통장 잔고가 10만원 있음.

A에게 계좌이체 6만원, B에게 계좌이체 7만원하라는 명령이 동시에 들어온다면?

A 프로세스가 잔고를 읽었을 때 10만원이 있었기 때문에 6만원 송금.

B 프로세스도 잔고를 읽었을 때 10만원이 있었기 때문에 7만원 송금.

=> 잔고는 10만원인데 13만원이 출금됨

 

동기화

Race Conditon을 방지하고 데이터의 일관성을 유지할 수 있게 해주는 방법을 뜻함. 

 

프로세스 동기화 : 여러 프로세스가 공유하는 자원을 한 번에 한 프로세스만 쓰게 함.

스레드 동기화 : 여러 스레드가 공유하는 자원을 한 번에 한 스레드만 쓰게 함.

3. critical section (임계 영역) 

임계 영역이란?

여러 프로세스(스레드)가 동시에 접근하면 문제가 발생할 수 있는 코드 영역.

동기화 작업을 해주어야 하는 코드 영역.

 

임계 영역 문제를 해결하기 위한 조건

1) Mutual Exclusion(상호 배제) : 한 프로세스가 임계구역에 들어가 있는 경우, 다른 프로세스는 들어올 수 없어야 한다.

2) Progress(진행) : 임계구역에 들어간 프로세스가 없는 경우, 어떤 프로세스를 들여보낼지 적절하게 선택해주어야 한다.

3) Bounded Waiting(진행 대기) : 한 번 들어갔다 나온 프로세스는 다음에 들어갈 때 제한을 둔다.(기아 상태 방지)

4. 동기화 기법

Mutex(Mutual Exclusion)

한번에 한 프로세스(스레드)만 공유자원에 접근할 수 있게 하는 방법.

뮤텍스 객체를 가진 스레드만 임계 영역에 들어갈 수 있다.

뮤텍스는 자물쇠 역할을 하는데,

임계 영역에 들어간 스레드는 다른 스레드가 들어오지 못하게 잠근다.

볼 일이 끝는 스레드가 나오면서 뮤텍스를 반납하면

다른 스레드가 뮤텍스를 갖고 임계영역에 들어갈 수 있다.

 

예를 들어 화장실과 화장실 키가 하나 있는 식당을 생각해보자.

화장실을 갈 때 키를 가지고 들어가면 다른 사람은 화장실을 사용할 수 없다.

 

Semaphore

뮤텍스와 달리 한 번에 임계영역에 접근할 수 있는 프로세스(스레드)가 1개 이상일 수 있다.

자물쇠가 아니라 접근 가능한 프로세스(스레드)의 수를 표시해서 상호배제를 달성한다.

동기화 대상이 하나 이상일 때 사용한다.

 

예를 들어 화장실이 세 개 있는 식당을 생각해보자. 

화장실 입구에는 전광판이 있어서 현재 빈 칸이 몇 개인지 보여준다.

빈 칸이 1개 이상인 경우에만 화장실을 이용할 수 있다.

'CS' 카테고리의 다른 글

프로세스와 스레드  (0) 2022.10.27
컴파일 VS 인터프리팅  (0) 2022.05.25