반효경 교수님, 2014년-1학기 운영체제 강의 중 교재에 없는 부분을 정리해보았다.
Process Synchronization
- Storage Box에 데이터가 있다.
- Execution Box가 연산할 데이터를 Storage Box에서 가져온다.
- Execution Box는 연산한다.
- 연산 결과를 Storage Box에 저장한다.
Storage Box를 혼자만 쓰거나, 데이터를 읽기만 하면 상관이 없음. 하지만 데이터를 가지고 연산하고 수정해서 다시 저장하면 누가 먼저 연산하느냐에 따라서 값이 달라질 수 있음. 그래서 Process Synchronization이 필요함.
💡 참고로, Execution Box, Storage Box는 교수님이 붙인 이름. Execution Box는 CPU, 컴퓨터 내부, 프로세스 등, Storage Box는 memory, 디스크, 프로세스의 주소 공간 등
Race Condition
여러 주체가 하나의 데이터를 동시에 접근하려고 하는 상태
ex) 공유 메모리를 사용하는 프로세스들. Multiprocessor System에서 Memory를 공유하는 CPU들 등.
OS에서 발생하는 Race condition
1. interrupt handler vs kernel
커널에서 어떤 데이터를 사용해서 연산 중이면, interrupt가 와도 이를 처리하지 않고 우선 커널 연산을 먼저 수행
2. 커널 내부 데이터를 접근하는 루틴들 사이의 경쟁
시스템콜을 한다는 건 커널의 데이터를 쓴다는 것. 커널 모드에서 수행 중일 때는 Time quantum이 끝나더라도 CPU를 preempt하지 않음. 사용자 모드로 돌아가는 순간 빼앗음.
3. Multiprocessor
방법 1) 한번에 하나의 CPU만 커널에 들어갈 수 있도록 하는 방법. 효율적이지는 않음.
방법 2) 커널 내부의 각 공유 데이터에 접근할 때마다 그 데이터를 lock/unlock 하는 방법
Process Synchronization 문제
공유 데이터의 동시 접근은 데이터의 불일치 문제가 발생할 수 있다.
일관성을 유지하기 위해서는 협력 프로세스 간의 실행 순서를 정해주는 메커니즘이 필요함.
The Critical-Section Problem
n개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
critical section
: 각 프로세스의 code segment에서 공유 데이터를 접근하는 코드
프로그램적 해결법의 충족 요건
1. Mutual Exclusion
상호 배제. 한 프로세스가 critical section
부분을 수행 중이면 다른 프로세스는 그들의 critical section
에 접근하지 못한다.
2. Progress
아무도 critical section
에 있지 않은 상태에서 critical section에 들어가고 싶어하는 프로세스가 있다면, 들어가게 해준다.
3. Bounded Waiting
프로세스가 critical section
에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section
에 들어가는 횟수에 한계가 있어야 한다.
참고자료
본문 속 링크 참조