← Documents Documentation/locking/index.rst GitHub 원문 ↗

Linux 6.18.37 · Locking

Linux kernel locking 문서 안내

Linux kernel이 제공하는 lock primitive, priority inheritance, lockdep, futex와 PREEMPT_RT 관련 문서를 주제별로 안내합니다.

Source pathDocumentation/locking/index.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

이 문서 묶음이 다루는 범위

index.rst:1-7

Documentation/locking/은 단순히 lock API 목록을 모아 놓은 곳이 아닙니다. 어떤 실행 문맥에서 잠들 수 있는지, interrupt와 preemption을 언제 막아야 하는지, lock을 어떤 순서로 중첩할 수 있는지, PREEMPT_RT에서 같은 이름의 lock이 어떻게 다른 구현으로 바뀌는지를 설명합니다.

Lock 선택은 보호할 데이터의 범위만으로 결정되지 않습니다. critical section의 길이, 호출 가능한 context, CPU 간 공유 여부, reader와 writer 비율, priority inversion 허용 범위, object lifetime을 함께 따져야 합니다.

기본 lock과 동시성 규칙

index.rst:8-20
문서핵심 질문
locktypessleeping, CPU-local, spinning lock을 어떻게 구분하고 중첩하는가
mutex-designmutex의 owner field와 fast, optimistic-spin, sleep 경로는 어떻게 동작하는가
spinlocksinterrupt context를 포함한 shared data를 spinlock으로 어떻게 보호하는가
seqlockwriter가 드문 데이터에서 reader retry로 일관된 snapshot을 얻는 방법은 무엇인가
lockdep-design, lockstatdeadlock 가능성과 lock contention을 어떻게 관찰하는가
locktorturelock 구현을 장시간 부하와 경쟁 조건 아래에서 어떻게 검증하는가

실시간 lock과 futex

index.rst:12-27

rt-mutex 문서들은 priority inheritance가 필요한 이유와 실제 PI chain walk를 설명합니다. mutex owner가 다른 mutex에서 다시 막힐 수 있으므로 priority boost는 단일 owner에서 끝나지 않고 chain 전체로 전파되어야 합니다.

  • rt-mutex-design: waiter tree, task PI tree, owner bit와 slow path
  • rt-mutex: owner pointer의 low bit, fast path와 pending owner 규칙
  • pi-futex, futex-requeue-pi: user space futex와 kernel rt_mutex의 연결
  • robust-futexes, robust-futex-ABI: task 종료 시 user-space lock owner 사망을 복구하는 ABI
  • ww-mutex-design: 여러 buffer reservation lock을 잡을 때 wound/wait로 순환 대기를 피하는 방법

권장 독해 순서

index.rst:8-34

먼저 locktypes에서 실행 문맥과 nesting 규칙을 익힌 뒤 spinlocks와 mutex-design을 읽는 편이 좋습니다. 그 다음 seqlock처럼 reader가 lock을 잡지 않는 기법을 보고, 마지막에 rt-mutex-design과 futex 계열로 넘어가면 owner, waiter, wakeup 관계가 선명해집니다.

lock 이름만 보고 atomic context 여부를 단정하면 안 됩니다. 특히 PREEMPT_RT에서는 spinlock_t와 rwlock_t가 rt_mutex 기반 sleeping lock으로 바뀌지만 raw_spinlock_t와 bit spinlock은 계속 실제 spinning lock입니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 =======
4 Locking
5 =======
6
7 .. toctree::
8 :maxdepth: 1
9
10 locktypes
11 lockdep-design
12 lockstat
13 locktorture
14 mutex-design
15 rt-mutex-design
16 rt-mutex
17 seqlock
18 spinlocks
19 ww-mutex-design
20 preempt-locking
21 pi-futex
22 futex-requeue-pi
23 hwspinlock
24 percpu-rw-semaphore
25 robust-futexes
26 robust-futex-ABI
27
28 .. only:: subproject and html
29
30 Indices
31 =======
32
33 * :ref:`genindex`
34

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Locking 문서

1-33

Locking 문서 묶음은 다음 문서를 포함한다.

  • Lock 형식
  • Lockdep 설계
  • Lock 통계와 lock torture test
  • Mutex, RT mutex와 ww-mutex 설계
  • Seqlock과 spinlock
  • Preemption과 locking
  • PI futex와 futex requeue PI
  • Hardware spinlock
  • Percpu rw semaphore
  • Robust futex와 그 ABI

HTML subproject로 만들 때는 전체 색인도 함께 표시한다.