Mutex Hardware

하드웨어 동기화와 뮤텍스

인터럽트 비활성화, test-and-set, compare-and-swap은 더 높은 수준의 lock을 만들기 위한 재료다. 실제 코드는 spin과 sleep 비용을 구분해야 한다.

01

원자적 전환 생성

lock 변수를 읽고 바꾸는 일을 하나의 하드웨어 동작으로 처리해야 두 스레드가 동시에 들어가지 않는다.

02

대기 방식 선택

짧은 커널 구간은 spin이 나을 수 있고, 긴 사용자 구간은 sleep 가능한 mutex가 낫다.

03

메모리 순서 보장

lock 획득과 해제는 임계 구역 안의 읽기/쓰기가 밖으로 새지 않도록 순서 보장도 제공한다.

Disable interrupt
단일 CPU 커널 보호 현재 CPU에서 interrupt를 막아 context switch를 지연시킨다.
멀티코어 전체 보호에는 부족하다.
Test-and-set
lock 획득 시도 기존 값을 읽으면서 새 값으로 바꾸는 원자 연산이다.
spinlock 구현에 쓰인다.
CAS
조건부 교체 메모리 값이 기대값일 때만 새 값으로 바꾼다.
lock-free 구조의 기본 재료다.
Mutex
수면 가능한 lock 기다리는 thread를 block시켜 CPU 낭비를 줄일 수 있다.
context switch 비용은 있다.

대기 시간 · 멀티코어 · 해제 점검

대기 시간 임계 구역이 짧은지 긴지에 따라 spin과 sleep을 구분하는가.
멀티코어 interrupt 비활성화만으로 다른 CPU의 접근까지 막을 수 없음을 이해하는가.
해제 모든 오류 경로에서 lock이 반드시 풀리는가.

CAS 직관

if (*addr == expected) {
  *addr = desired;
  success = true;
        overflow-wrap: break-word;
        word-break: keep-all;
      }