-
[OS] 프로세스 동기화 기법, 뮤텍스 락, 세마포, 모니터운영체제 2023. 4. 2. 14:27728x90반응형
프로세스 동기화 기법지난 포스팅에서 프로세스 동기화에 대해 알아보았습니다. 오늘은 프로세스 동기화를 위한 대표적인 도구들인 뮤텍스 락, 세마포, 모니터를 알아볼게요 🧐
🧶 뮤텍스 락
뮤텍스 락은 임계 구역(동시에 접근하면 안되는 자원)에 동시에 접근하지 않도록 만드는 도구입니다. 즉, 상호 배제를 위한 동기화 도구입니다.
임계 구역에 진입하는 프로세스는 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둠으로써 자신이 현재 임계 구역에 있음을 알립니다. 다른 프로세스는 임계 구역에 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있습니다.뮤텍스 락 단순하게 구현하기
- 자물쇠 역할 - 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 - acquire 함수
- 임계 구역의 잠금을 해제하는 역할 - release 함수
📍 acquire 함수프로세스가 임계 구역에 진입하기 전에 호출하는 함수입니다.
임계 구역이 잠겨 있다면 열릴 때까지(lock이 false가 될 때까지) 임계 구역을 반복적으로 확인합니다.
임계 구역이 열려 있다면 lock을 true로 바꿈으로써 임계 구역을 잠그는 함수입니다.📍 release 함수
임계 구역에서의 작업이 끝나고 호출하는 함수입니다.
현재 잠긴 임계 구역을 열어주는(lock을 false로 바꾸는) 함수입니다.acquire() { while(lock == true) // 임계 구역이 잠겨 있다면 ; // 임계 구역이 잠겨 있는지 반복 확인 lock = true; // 임계 구역이 잠겨 있지 않다면 잠금 } release() { lock = false; // 임계 구역 작업이 끝났으니 잠금 해제 }
acquire와 release 함수를 아래처럼 임계 구역 전후로 호출하면 하나의 프로세스만 임계 구역에 진입하도록 할 수 있습니다.acquire(); // 자물쇠 잠겨 있는지 확인 후 안잠겨 있으면 잠그고 들어가기 // 임계 구역 // 임계 구역에서의 작업 진행 release(); // 자물쇠 반환
🧶 세마포세마포는 공유 자원이 여러 개 있는 상황에서도 적용 가능한 동기화 도구입니다.
note.
엄밀히 말하면 세마포의 종류에도 이진 세마포와 카운팅 세마포가 있지만, 이진 세마포는 뮤텍스 락과 비슷한 개념이므로 여기서는 여러 공유 자원을 다룰 수 있는 카운팅 세마포로 전제하겠습니다.
세마포는 뮤텍스 락과 비슷하게 하나의 변수와 두 개의 함수로 단순하게 구현할 수 있습니다.- 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 이제 가도 됨을 알려주는 signal 함수
🧶 모니터모니터는 세마포보다 더 사용하기 편리한 도구입니다. 모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리합니다. 그리고 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하도록 합니다.
이를 위해 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 합니다. 즉, 모니터는 공유 자원을 다루는 인터페이스에 접근하기 위한 큐 (모니터에 진입하기 위한 큐)를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화를 제공합니다.
이 밖에도 모니터는 세마포와 마찬가지로 실행 순서 제어를 위한 동기화도 제공합니다. 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단 하는데, 이때 모니터는 조건 변수라는 것을 사용합니다. 조건 변수로는 signal과 wait이 있고 이를 이용하여 프로세스 실행 순서 제어를 위한 동기화를 제공합니다.
LIST'운영체제' 카테고리의 다른 글
[OS] 데드락(교착 상태)과 자원 할당 그래프 (0) 2023.04.08 [OS] Linux IPC 프로세스간 통신에 대해서 알아보자 (0) 2023.04.04 [OS] 프로세스 동기화 (3) 2023.04.01 [OS] CPU 스케줄링 알고리즘의 종류 (0) 2023.03.26 [OS] CPU 스케줄링이란? | 선점형 스케줄링과 비선점형 스케줄링 (0) 2023.03.25