기본 미션
p.363 확인 문제 1번
> 4 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다. (X)
프로세스를 동기화하는 대표적인 도구는 뮤텍스락, 세마포, 모니터가 있다.
단순한 형태의 뮤텍스 락의 경우 전역변수 lock, 임계구역을 잠그는 acquire, 잠금을 해제하는 release의 형태로 구현할 수 있다.
프로세스가 임계구역에 진입할 시 acquire 함수를 통해 lock을 얻고, 작업 종료시 release 함수를 통해 lock을 해제한다. 그 과정에서 다른 프로세스가 지속적으로 lock을 확인하는 것을 바쁜 대기(busy wait)라고 부른다.
세마포의 경우 다수의 프로세스가 다수의 공유 자원에 접근하는것을 상정하였다. 간단한 형태의 경우 사용가능한 공유 자원의 개수의 전역 변수 S, 대기여부를 알려주는 wait함수, 진행 여부를 알려주는 signal 함수로 구성할 수 있다.
기본적인 동작 방식(변수 확인, 함수를 통한 진행)은 뮤텍스 락과 유사하나, 무한히 반복하며 S를 확인하는 문제를 해결하기 위해 큐를 사용한다. 사용가능한 자원이 없을 경우 wait 함수는 해당 프로세스를 대기 큐로 이동시키며, 다른 프로세스가 signal 함수를 호출하면 대기 큐의 프로세스를 준비상태로 변경시키고 준비 큐로 이동시켜준다.
선택 미션
Ch12.(12-1) 임계 구역, 상호 배제 개념 정리
- 임계 구역 (Critical Section): 동시 실행시 문제가 발생하는 자원에 접근하는 코드 영역
- 상호 배제 (Muitual Exclusion): 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘
공유 자원에 접근하는 다수의 프로세스/스레드가 있을 경우 동시성이 깨져 결과값이 손상되거나, 프로세스의 성능 하락이 발생할 수 있다.
이때 공유된 자원에 접근하는 코드 영역을 임계 구역이라고 부르며, 동시작업시 예측 할 수 없는 결과가 발생할 수 있다. 따라서 하나의 프로세스/스레드만이 임계 구역에 접근할 수 있도록 보장하여야한다. 이를 막기 위한 절차가 상호 배제이다. 한 프로세스/스레드가 임계 구역에 진입하면 다른 작업을 막는 알고리즘이다. 이를 통해 데이터의 일관성을 유지할 수 있다.