devStory

[운영체제] 프로세스 동기화 (Synchronization) 본문

운영체제

[운영체제] 프로세스 동기화 (Synchronization)

Hyen_K 2018. 10. 16. 16:41

프로세스 동기화(Process Synchronization)

: 공유 자원에 여러 프로세스들이 동시에 접근했을 경우 데이터 무결성에 문제가 발생 할 수 있다.

이러한 문제를 해결하기 위해 동기화 (Synchronization) 개념이 도입되었다. 즉, 공유 데이터에 대하여 동시에 접근을 하려 할 때,

처리 순서에 상관없이 원하는 결과를 얻기 위함이다. - 데이터 일관성(Data Consistency)



< 프로세스 동기화 필요성 예시> 


내 통장에 10000원의 잔고가 남아있다. 

(A)내가 5000원을 출금하는 동시에 (B)친구가 5000원을 송금했다.

그렇다면 내 통장에 남은 잔고는? 10000원이 남아야한다.

그러나, 동시에 접근했기 때문에 A와 B 프로세스는 각각 10000원의 데이터를 가지고 계산을 수행 할 수 있다.

때문에 각각의 결과가 (A) 10000 - 5000 = 5000원(B) 10000 + 5000 = 15000원이 되는 문제가 발생할 수 있다.

계산 결과가 A가 조금 더 늦게 끝났다면 내 통장 잔고는 5000원, B가 늦게 끝났다면 15000원이 남게 된다.

은행에서 이러한문제가 실제로 일어난다면 아주 큰 문제일 것이다.



1. 경쟁상태 (Race condition)

: 여러 프로세스가 동시에 공유자원에 접근했을 때 논리적 오류가 발생하는 상황


2.임계구역 (Critical Section)

: 하나의 프로세스만 접근이 가능하도록 지정 된 공유자원

: 경쟁 조건이 발생 할 수 있는 부분의 코드 영역


3.상호배제 (Mutual Exclusion) = 뮤텍스 (Mutex)

: 경쟁 상태에서 각 프로세스가 번갈아가며 공유자원을 사용하도록 임계구역을 유지하는 방법

: 어떤 프로세스가 임계영역 내에서 작업중일 때, 다른 프로세스의 임계구역 접근을 막는 것.


4.세마포어 (Semaphore)

: 열쇠(lock)를 획득하고 해제하는 방법으로 임계구역 문제를 제어하는 것. (인터럽트 X)

: S - 세마포어 변수

: wait(S) - 열쇠를 가지고 있는지 확인하는 함수 -> 경쟁 자원 개수 -1

: signal(S) - 열쇠를 해제하는 함수 -> 경쟁 자원 개수 +1

문제점     : 세마포어 변수 S 자체도 결국은 공유변수이기 때문에 임계영역 문제를 근본적으로 해결 하지 못한다.


5. 교착상태 (Deadlock)

: 둘 이상의 프로세스가 서로가 가진 Resource를 요구하면서 무한대기 상태가 되어버리는 상태

: 필요조건 4가지

-   Mutual exclusion

-    Hold and Wait

-    Non Preemption

-    Circular wait

: 해결 (예방 방법)

-    예방 기법 : 필요 조건들 중 적어도 하나가 성립하지 않게 시스템 제어 -> 자원 낭비가 심함

-    회피 기법 : 은행원 알고리즘

-    발견 기법 : 시스템에 교착 상태가 발생했는지 점검하여 교착상태가 있는 프로세스와 자원을 발견하는 것.

      : 자원할당 그래프 이용

-    회복 기법 : 교착 상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것

   

Comments