Chapter.12 - 프로세스 동기화
모든 이미지의 저작권은 [혼자 공부하는 컴퓨터 구조 + 운영체제] 도서의 저자 강민철님에게 있습니다.
동기화
동기화가 의미하는 것은 크게 두 가지이다.
- 프로세스를 올바른 순서대로 실행하도록 하는 것 (
실행 순서 제어
) - 하나의 자원에 여러 프로세스가 동시에 접근하지 못하도록 하는 것 (
상호 배제
)
상호 배제를 위한 동기화
공유 자원
: 동시에 접근해서는 안되는 자원. 전역 변수, 파일, 입출력장치 등 여러가지가 될 수 있다.
임계 구역
: 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역
레이스 컨디션
: 여러 프로세스가 임계 구역의 코드를 실행하여 문제가 발생하는 경우. 동시성 이슈를 뜻한다.
동기화를 위한 대표적인 도구
* 뮤텍스 락
동시에 접근하면 안되는 자원에 여러 프로세스가 접근하지 못하도록 하는 상호 배제를 위한 동기화 도구
임계 구역에 프로세스가 있는지 주기적으로 확인하고 프로세스가 없다면 임계 구역에 진입하는 원리
쉽게 말해서 쉴 새 없이 반복하며 임계 구역의 프로세스를 확인하는 건데 이런 대기 방식을 바쁜 대기
라고 한다.
- 자물쇠 역할 : 프로세스 들이 공유하는 전역 변수 lock
- 임계 구역의 잠금을 확인하고 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
* 세마포
뮤텍스 락과 비슷하지만 조금 더 일반화 된 방식의 동기화 도구
뮤텍스 락은 하나의 공유 자원에 접근하는 경우를 가정하고 만든 동기화 도구지만 세마포는 여러 공유 자원에 접근하는 경우를 가정하고 만든 동기화 도구
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역 변수 : S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수 : wait
- 임계 구역 앞에서 기다리는 프로세스에 진입 신호를 주는 함수 : signal
한 가지 문제점은 사용할 수 있는 공유 자원이 없는 경우 프로세스는 무한히 반복하여 S를 확인하는 것이다.
이를 위해 wait 함수는 사용할 수 있는 공유 자원이 없을 경우 해당 프로세스 상태를 대기 상태로 만들고, PCB를 세마포를 위한 대기 큐에 넣는다.
* 모니터
공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리하는 방식의 동기화 도구
This post is licensed under CC BY 4.0 by the author.