본문 바로가기
이론 공부 내용 정리

OS-프로세스동기화

by mazayong 2021. 6. 24.

프로세스 동기화

정의 : 협력하는 프로세스 사이에서 실행 순서 규칙을 정해 공유 자원의 일관성을 보장하는 것.

(ex: 여러 프로세스가 동시에 하나의 공유된 자원에 접근하려고 할 때 이 프로세스들의 순서를 정해 데이터의 일관성을 유지시켜줘야 함.)

 

 

 

1. 경쟁 조건(Race Condition)

정의 : 공유된 자원의 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태.

 

* 여러 프로세스가 공유 데이터를 동시에 조작할 때, 실행의 특정 순서에 따라 결과가 달라지는 상황.

 = 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타남.

 

 

발생 조건

* 커널 작업 수행 중 인터럽트가 발생할 때

문제점 : 커널모드에서 데이터를 Load하여 작업을 수행하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우(인터럽트의 작업이 반영되지 않음)

해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable시켜 인터럽트가 CPU 제어권을 가져가지 못하도록 함.

 

* 프로세스가 system call하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때

문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우(프로세스2의 작업이 반영되지 않음)

해결법 : 프로세스가 커널모드에서 작업하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함.

 

* 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 때

문제점 : Multi-Processor 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우

해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다 데이터에 대한 lock/unlock하기

 

 

2. 임계 구역(Critical Section)

정의 : OS에서 여러 프로세스가 데이터를 공유하면서 수행될 때, 각 프로세스에서 공유 데이터를 액세스하는 프로그램 코드 부분을 뜻한다. 공유 자원의 독점을 보장해주는 역할.

 

프로그램적으로 해결하는 방법

* Mutual Exclusion(상호 배제)

프로세스1이 critical section을 수행 중이면 다른 모든 프로세스들은 해당 critical section에 접근할 수 없다.

 

* Progress (진행)

아무도 critical section에 있지 않다면, 들어가고자 하는 프로세스를 허용해줘야 함.

 

*Bounding Waiting(유한 대기)

프로세스가 critical section에 들어가기 위해 무한정으로 기다리는 형상(starvation)이 있으면 안됨.

 

피터슨 알고리즘

 

(설명 추가 필요)

 

 

3. 세마포어(Semaphore)

동시에 자원에 접근할 수 있는 허용 가능한 counter 갯수.

- 동기화 기법 중 추상적인 방법.

- 여러 프로세스들에 의해 공유되는 변수로 정의

- 변수는 오직 P()와 V()라는 Atomic한 연산에 의해서만 접근 가능.

- 리소스의 상태를 나타내는 카운터.

 

Busy-Wait 방식

프로세스 P가 자원이 모두 사용 중이면 wait하는 방식. 자원의 여유가 생기면 자원을 획득하고, 모두 사용했으면 자원을 반납한다.

 

Block-Wakeup방식

 

Critical Section의 길이가 긴 경우는 Block-wakeup방식이 유리하나, 임계 구역이 짧으면 잦은 문맥 교환으로 인해 오버헤드가 증가하게 되어 Busy-wait 방식이 유리하다.

 

 

Mutex

상호 배제를 뜻하며, Binary Semaphore과 같은 의미이다. 자원에 단 하나의 작업만 접근 가능하다는 뜻이다. 

- Critical Section을 가진 스레드들의 Running Time이 겹치지 않게 각각 단독으로 실행되게 하는 기술이다. 다중 프로세스들의 공유 자원에 대한 접근을 조율하기 위해 lock과 unlock을 사용한다.

세마포어와 큰 차이점은 동기화 대상의 개수로, Mutex는 동기화 대상이 오직 하나일 때, 세마포어는 동기화 대상이 하나 이상일 때 사용한다.

 

 

4. Monitor

현재 제시된 세마포어의 문제점은 다음과 같다.

- 코딩하기 어려움

-correctness의 입증 어려움.

- voluntary cooperation이 필요.

- 한 번의 실수가 모든 시스템에 치명적 영향 미침.

 

모니터 내에서는 한 번에 하나의 프로세스만 활동이 가능하고, 동기화 제약 조건을 명시적으로 코딩할 필요가 없다. 또한 프로세스가 모니터 안에서 기다릴 수 있도록 Conditional Variable을 사용한다. (이는 wait/signal 연산에 의해서만 접근 가능하다.)

wait : 다른 프로세스가 signal 전까지 suspend됨.

signal : 하나의 suspend된 프로세스를 깨움.

 

Monitor / Semaphore

Monitor : 자체적으로 하나의 프로세스만 처리.

Semaphore : 직접 Lock 걸고 해제해야 함.

 

참조

https://kosaf04pyh.tistory.com/243

https://hibee.tistory.com/297