critical section
WHAT — Problem
DEF
race condition을 야기하는 code segment
HOW — in OS
0x21. between interrupt handler and kernel
WHAT
- kernel code 실행 중에 interrupt가 발생하면
- interrupt handler가 현재 kernel code를 preempt 한다
HOW
-
CPU:
- kernel code 실행 중 → interrupt 발생
-
CPU:
- 현재 context 저장
- interrupt handler 실행
- → handler에서 같은 shared variable 접근
- → 원래 kernel로 복귀
EX: lost update
// kernel
x = x + 1;
// actual instructions
load x
add 1
store x- when interrupted
kernel: load x (x=10)
interrupt 발생
handler: x = 10 → x=20으로 변경
복귀
kernel: store x=11SOL
- uniprocessor:
- interrupt disable
- multiprocessor:
- 이것만으로 부족 → lock 필요
0x22. kernel preemption (system call)
WHAT
- system call 실행 중에도 scheduler가 개입 가능
- thread가 sleep/block되면 다른 thread 실행됨
HOW
- process A:
- system call 진입
- kernel에서 shared data 수정 중
- → block (I/O wait 등)
- → scheduler: process B 실행
- → B도 같은 kernel data 접근
0x23. multi-processor
WHAT
- 여러 CPU(core)가 동시에 kernel code 실행
HOW
CPU0: x = x + 1
CPU1: x = x + 1CPU0: load x=10
CPU1: load x=10
CPU0: store 11
CPU1: store 11