프로세스 동기화란 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것이다.
여러 프로세스가 서로 협력해 공유 자원을 사용하는 상황에서 경쟁 조건(race condition)이 발생하면 공유 자원의 신뢰성이 떨어진다.
여기서 경쟁 조건이란 여러 프로세스가 공유 자원에 동시에 접근할 때, 공유 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 말한다. 이렇게 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부를 말한다. 프로세스들이 임계 영역을 함께 사용할 때, 임계 영역 안에서 경쟁 조건이 생길 수 있다.
임계 구역 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
이런 임계 영역 문제를 해결하기 위해서는 기본적으로 다음과 같은 조건이 필요하다.
1. Mutual Exclusion 상호 배제
한 프로세스가 임계 구역에 들어가 있으면 다른 프로세스는 들어갈 수 없다.
2. Bounded wating 한정 대기
상호 배제 때문에 기다리게 되는 프로세스가 무한 대기하지 않아야 한다.
3. Progress 진행
임계 영역에서 프로세스가 없다면 어떤 프로세스라도 들어가서 자원을 활용할 수 있다.
임계 영역 문제를 해결하기 위한 해결책으로는 다음과 같은 방법을 들 수 있다.
1. Mutex Lock
동시에 공유 자원에 접근하는 것을 막기 위해 임계 영역에 진입하는 프로세스는 Lock을 획득하고 임계 영역을 빠져나올 때 Lock을 방출함으로써 동시에 접근하지 않도록 한다. 다만 다중처리기 환경에서는 시간 효율성 측면에서 적용할 수 없다.
2. Semaphores
카운팅 변수로 접근 가능한 공유 자원을 표기한다. 공유 자원이 1개 이상인 경우 상호 배제 원리를 보장하는 접근 제어 알고리즘이다. 기차길의 표식으로 사용되는 깃발(Semaphore)에 메타포한 알고리즘이다.
카운트가 존재하여 해당 카운트가 점차 줄어들어 0이 되면 그때부터 새로운 프로세스 접근을 막는 방식으로 작동한다.
만약 이 카운트가 1이라면, 뮤텍스와 비스샇게 단 한 명만이 해당 임계 구역에 접근할 수 있다.(이 경우 이진 세마포어라고 한다.)
3. 모니터
주로 고급언어에서 이 기능을 지원하며, 한 번에 하나의 프로세스만 모니터에 활동하도록 보장해준다.
프레임워크나 라이브러리 그 자체에서 제공되므로 가볍고 빠르다.
하나의 데이터마다 하나의 모니터를 결합할 수 있으며, 모니터는 그것이 결합된 데이터가 동시에 두 개 이상의 스레드에 의해 접근할 수 없도록 막는 잠금 기능을 제공함으로써 동기화를 수행한다는 것이 주된 내용이다.
예를 들어 자바에서 스레드를 동기화하는 방법으로 모니터가 사용된다.
아래 블로그 게시글을 학습한 내용입니다.
임계구역을 보호하기 위한 기법 3가지[뮤텍스, 세마포어, 모니터] [ 운영체제(OS) 면접질문 6] (tistory.com)
'이론 > IT' 카테고리의 다른 글
CPU 스케줄링 (1) | 2023.11.22 |
---|---|
OS의 교착상태(Deadlock) (0) | 2023.11.22 |
운영체제 요약 공부 (0) | 2023.11.22 |
OSI 7계층 (0) | 2023.11.22 |
TCP 연결 과정 (0) | 2023.11.22 |