-
뮤텍스 락운영체제/프로세스 동기화 2018. 2. 4. 00:32
임계 구역 문제에 대한 하드웨어 기반 해결책은 복잡하고, 응용 프로그래머는 사용할 수 없다.
이때문에 소프트웨어 기반 해결책들이 사용되는데 이 중 가장 간단한 것이 뮤텍스 락이다.
뮤텍스 락을 사용하게 되면 프로세스가 임계 구역에 들어가기 전 반드시 락을 획득해야 하고
임계 구역을 빠져나올 때 락을 반환해야 한다.
뮤텍스 락을 이용한 임계 구역 문제 해결 방안
do {
acquire() // 락을 획득
// 임계 구역
release() // 락을 반환
// 나머지 구역
} while (true);
acquire() {
while (!available)
//바쁜 대기
available = false;
}
release() {
available = true;
}
뮤텍스 락은 available 이라는 boolean 변수를 가진다.
이 변수가 lock이 사용될 수 있는지를 표시한다.
Lock이 사용되면 acquire() 호출은 성공하고 lock은 사용불가 상태가 된다.
acquire() 함수나 release() 함수는 원자적으로 실행되어야 하기 때문에 하드웨어 기법 중 하나를 사용해서 구현된다.
지금까지 설명한 구현 방식의 단점은 바쁜 대기를 해야 한다는 것이다.
이러한 유형의 뮤텍스 락은 락이 사용 가능해지기를 기다리면서
프로세스가 계속 회전을 하고 있기 때문에 spinlock 이라고도 불린다.
바쁜 대기는 CPU 사이클을 낭비하게 된다.
하지만 락을 기다리는 동안 문맥 교환을
전혀 필요로 하지 않는 것이 spinlock의 장점이다.
댓글