Notice
Recent Posts
Recent Comments
09-16 22:14
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Byeol Lo

6.5 Mutex Lock 본문

OS/OS Design

6.5 Mutex Lock

알 수 없는 사용자 2024. 5. 18. 17:51

 6.4절에서 제시된 임계 영역 문제의 하드웨어 기반 해결책은 복잡하며 일반적으로 응용 프로그래머에게 접근이 어렵다. 대신, OS designer들은 임계 영역 문제를 해결하기 위한 더 높은 수준의 소프트웨어 도구를 구축하여 제공한다. 이러한 도구 중 가장 간단한 것은 Mutex Lock이다(사실 뮤텍스라는 용어는 상호 배제를 나타냄). 우리는 Mutex Lock을 사용하여 임계 영역을 보호하고 이로써 race condition을 방지한다. 즉, 프로세스는 critical section에 들어가기 전에 이 lock 을 acquire()해야 하며, 임계 영역을 나갈 때 lock 을 release() 해야한다.

 

 뮤텍스 락에는 사용 가능 여부를 나타내는 boolean 변수인 available이 있다. 락이 사용 가능한 경우, acquire() 호출이 성공되고, 이후 lock은 사용 불가능한 것으로 간주된다. 사용 불가능한 lock을 획득하려고 하는 프로세스는 락이 해제될 때까지 차단된다.

acquire()
{
  while (!available)
    ;
  available = false;
}
release()
{
  available = true;
}

이 두 호출은 원자적으로 수행되어야 하며, 뮤텍스 락은 CAS 연산을 사용하여 구현할 수 있다(이는 pintos에서). 여기서 제시된 구현의 주요 단점은 busy waiting이다. 프로세스가 임계 영역에 들어가 있을 때 다른 프로세스가 임계 영역에 들어가려고 시도하면 acquire() 호출에서 계속 루프를 돌아야 한다. 이는 실제 멀티프로그래밍 시스템에서 문제가 되며, 단일 CPU 코어가 많은 프로세스 사이에서 공유되기 때문에 다른 프로세스의 공유를 방해하고 CPU 사이클 낭비를 하게 된다.

 여기서 설명한 mutex lock은 대기 중인 프로세스가 lock 이 사용가능해질 때까지 spin 하는 것이기 때문에 spin lock이라고도 한다. spin lock은 lock을 기다리는 동안 context switch 가 필요하지 않기 때문에 장점이 있고, context switch는 상당한 시간이 걸릴 수 있고, 멀티 코어 시스템의 특정 상황에서는 spin lock이 잠금을 선호하는 선택일 수 있다. Lock이 짧은 기간 동안만 유지될 경우에 하나의 스레드가 한 코어에서 스핀 하는 동안 다른 스레드가 다른 코어에서 임계 영역을 수행할 수 있게 된다.

'OS > OS Design' 카테고리의 다른 글

6.7 Monitors  (0) 2024.07.06
6.6 Semaphore  (0) 2024.05.19
6.4 Hardware Support for Synchronization  (0) 2024.05.18
6.3 Peterson's Solution  (0) 2024.05.18
6.2 The Critical-Section Problem  (0) 2024.05.18
Comments