Race Condition
Storage-box를 공유하는 Execution-box가 여럿 있는 경우 데이터의 불일치 문제를 발생시킬 수 있음.
- kernel 수행 중 인터럽트 발생 시
- Process 가 system call을 하여 kernel mode로 수행중인데, context switch 가 일어나는 경우
- Multiprocesser에서 shared memory 내의 kernel data
kernel 수행 중 인터럽트 발생 시
kernel 사이의 context switch 상황 => 둘 다 같은 주소 공간을 공유해서 일어난 문제
=> 커널 모드의 수행이 끝나기 전에는 인터럽트를 받지 않도록 하는 방법(disable/enable)으로 해결 가능
Process 가 system call을 하여 kernel mode로 수행중인데, context switch 가 일어나는 경우
시스템 콜을 하는 중에 커널 주소 공간 데이터에 접근하여 cpu를 preempt.
=> 커널 모드에서 수행중일 때는 CPU를 preempt 하지 않고, 사용자 모드로 돌아갈 때 preempt를 한다.
Multiprocesser에서 shared memory 내의 kernel data
여러 개의 cpu가 함께 작동할 때, 어떤 cpu가 마지막으로 count&store 했는지에 따라 결과값이 달라진다.
=>
1. 한번에 하나의 CPU만 커널에 들어갈 수 있게
=> 비효율적임. 사용❌
2. 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해 lock/unlock
결론
- 공유 데이터의 동시 접근은 데이터 불일치를 야기시킬 수 있다.
=> 데이터의 일관성 유지를 위해 협력 프소세스 간의 실행순서를 정리해주는 매커니즘이 필요하다.
- race condition 상황에서 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다.
- 이러한 race condition을 막기 위해서 concurrent process는 동기화(synchronize)되어야 한다.
The Critical-Section Problem
critical section : 코드 상에서 Race condition이 발생할 수 있는 특정 부분(공유 데이터를 접근하는 코드 부분)
해결 방법
- Mutual Exclusion
- Progress
- Bounded Waiting
Dining-Philosophers Problem
- 5명의 철학자가 원탁에 둘러앉아있고, 젓가락은 5개만
- 각 철학자는 식사를 하기를 원하고, 철학자가 식사를 하기 위해서는 양쪽 젓가락을 모두 집어야 함
Deadlock
만약 모든 철학자가 식사를 하기를 원해서 각자 왼쪽에 있는 젓가락을 들었다면, 더 이상 아무런 작업도 수행할 수 없음
=> 4명의 철학자만이 테이블에 동시에 앉도록 제한
- 젓가락을 두 개 집을 수 있을 때만 젓가락을 집도록 제한
- 짝수/홀수 철학자는 왼쪽/오른쪽 젓가락을 먼저 집도록 제한