http://www.kocw.net/home/m/search/kemView.do?kemId=1046323
운영체제 강의를 듣고 정리한 내용입니다
Process Synchronization
프로세스 동기화
데이터의 접근패턴
어떤 위치에 있던 간에 저장되어 있는 위치를 읽어와서 연산 후
다시 저장하는 방식으로 데이터를 접근한다
S-box
-> Memory Address Space
-> 디스크, 프로세스의 메모리 주소 공간
E-box
-> CPU Process
-> CPU, 컴퓨터 내부, CPU 프로세스
s-box를 공유하는 e-box가 여러 개 존재하는 경우 Race Condition의 가능성이 있다
-> 경쟁상태
race condition이 발생하는 경우
- kernel 수행 중 인터럽트 발생 시
- 프로세스가 시스템 콜을 하여 커널 모드로 수행 중일 때 문맥 교환이 일어나는 경우
- Multiprocessor에서 공유 메모리 내의 커널 내부 데이터를 접근하는 루틴들 간에 발생한다
커널모드 running 중 interrupt가 발생하여 인터럽트 처리루틴이 수행된다
-> 양쪽 다 커널코드이기 때문에 커널 주소 공간을 공유한다
-> 작업이 끝나기 전까지 인터럽트 처리를 허용하지 않는다
해결책 : 커널모드에서 수행 중일 때는 CPU를 preempt하지 않는다
커널모드에서 사용자 모드로 돌아갈 때 preempt를 한다
multiprocessor에서의 race condition
어떤 CPU가 마지막으로 count를 store를 했는가를 의미한다
이 경우에는 interrupt 처리로 해결할 수 없다
해결 방법
- 한 번에 하나의 CPU만이 커널에 들어갈 수 있게 하는 방법
- 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대한 lock/unlock을 하는 방법
Process Synchronization 문제 정리
공유 데이터의 동시접근은 데이터의 불일치 문제를 발생시킬 수 있다
일관성 유지를 위해 협력 프로세스간의 실행순서를 정해주는 메커니즘이 필요하다
Race condition
여러 프로세스들이 동시에 공유 데이터를 접근하는 상황을 의미한다
데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다
-> 이를 막기 위해서는 concurrent process가 동기화 되어야 한다
The Critical-Section Problem
공유 데이터를 접근하는 코드를 의미한다
n개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우,
각 프로세스의 code segment에는 공유 데이터를 접근하는 코드인 critical section이 존재한다
하나의 프로세스가 critical section에 있을 때 다른 모든 프로세스는 critical section에 들어갈 수 없어야 한다