프로세스 동기화란 협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는 것이다.
실행되고 있는 프로세스들은 서로 데이터를 주고 받으며 실행될 수 있다. 예를 들어 워드 프로세서에서는 사용자로부터 입력을 받고 동시에 맞춤법을 검사하는 프로세스가 있을 수 있다. 이러한 공동의 목표를 가진 프로세스들은 상호작용하며 실행되지만 마구잡이로 실행되서는 안되기 떄문에 동기화가 필요하다.
동기화에는 실행 순서 제어와 상호 배재가 있다.
실행 순서 제어는 프로세서들을 올바른 순서대로 실행하기 위한 동기화 기법이다.
상호 배재는 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기 위한 기법이다.
동시에 접근해서 안되는 자원은 공유 자원 이라고 한다. 여러 프로세스가 공동으로 사용하는 변수, 메모리, 파일 등. 공유 자원을 접근하는 코드영역을 임계구역이라고한다. 임계 구역에서는 둘 이상의 프로세스가 동시에 접근하면 안되는 공유 자원을 다루기 때문에, 상호 배재 동기화 기법이 필요하다.
프로세스 동기화를 위한 기법 중 대표적인 기법에는 뮤텍스 락, 세마포, 모니터가 있다.
뮤텍스 락은 하나의 공유자원에 대해 하나의 프로세스만 접근할 수 있도록 하는 동기화 기법이다. 스레드는 공유 자원에 접근하기 전에 락을 획득하고, 접근이 끝나면 락을 해제한다.
세마포는 공유 자원에 대해 여러 프로세스나 스레드가 접근할 수 있도록하는 기법이다. 세마포는 정수로 표현(전역 변수 S)이 되고 wait와 signal로 조작된다.
모니터란 공유 자원에 대해 하나의 프로세스나 스레드만 접근할 수 있도록하는 잠금 기능을 제공하고, 잠금과 해제를 자동으로 처리한다.
교착상태란 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황이다.
교착 상태는 식사하는 철학자 문제로 설명해볼 수 있다. 다 명의 철학자가 원탁에 앉아 있고 각자의 앞에 스파게티가 있고 양 옆에 포크가 하나씩 있다. 철학자들은 생각하거나 식사하는 두가지 상태를 반복한다. 생각을 마치고 삭사를 하려면 양손에 포크를 들어야한다. 만약 모든 철학자가 동시에 식사를 하려고 오른쪽 포크를 들고 왼쪽 포크를 들려고 할 때, 왼쪽 포크가 없어서 교착 상태에 빠지게 된다.
게임 프로세스는 자원 A를 점유한 채 웹 브라우저가 점유하고 있는 자원 B의 사용이 끝나길 기다리고 웹브라우저는 자원 B를 점유한 채로 게임 프로세스의 자원 A 사용이 끝나길 기다리는 상황과 같다. 이렇게 프로세스들이 서로 기다리기만 하다가 실행을 못하는 상황을 두고 교착 상태라고 한다.
교착 상태가 발생하는 조건은 네가지가 있다. 상호 배제, 점유와 대기, 비선점, 원형 대기.
교착 상태를 예방하는 방법은 교창 상태 발생 조건 네 가지 중 하나를 충족하지 못하게 하는 방법이 있다.
상호 배제를 없앤다면 모든 자원을 공유하도록 만드는 것이지만 현실 적으로 상호 배제를 없애기에는 어렵다.
점유와 대기를 없애면 운영 체제는 특정 프로세스에 자원을 모두 할당하거나 아예 할당하지 않는 방식으로 배분한다. 이 방법은 자원의 활용률이 낮아질 우려가 있기 때문에 현실적인 방법이 아니다.
비선점 조건을 없애는 방법은 일부 자원에 대해서 효과적이다. CPU의 경우 한 프로세스가 다른 프로세스가 오래동안 사용중인 CPU 자원을 할당 받아 사용할 수 있다. 하지만 모든 자원이 이렇게 선점 가능한 것이 아니다. 프린터의 경우 다른 프로세스가 프린터 자원을 빼앗아 사용하기란 어렵다.
원형 대기 조건을 업애는 방법. 모든 자원에 번호를 붙이고 오름 차순으로 자원을 할당하면 원형 대기가 발생하지 않도록 할 수 있다. 철학자 문제를 예를 들어 철학자는 낮은 포크에서 높은 포크 순으로 들게한다. 한 철학자가 왼쪽에 5번 포크를 들고 오른쪽의 1번 포크를 집어 들 수 없기 때문에 원형 대기가 발생하지 않는다.
교착 상태 회피는 교착 상태의 발생 가능성을 미리 제거하는 것이 아닌, 교착 상태가 일어날 가능성이 있을 때 적적하게 필하는 방식이다.
프로세스가 정상적으로 자원을 할당 받고 종료되는 상태를 안전 상태라고 하고 교착 상태가 발생할 수 있는 상황을 불안전 상태라고 한다. 안전 상태는 안전 순서열이 있는 상태를 안전 상태라고 하고 안전 순서열이 없는 상태를 불안전 상태라고 한다.
교착 상태가 발생 했을 때 조치하는 방법이다.
좋은 글이네요. 공유해주셔서 감사합니다.