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
kernel: load x (x=10)
interrupt 발생
handler: x = 10 → x=20으로 변경
복귀
kernel: store x=11
SOL
  • 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 + 1
CPU0: load x=10
CPU1: load x=10
CPU0: store 11
CPU1: store 11