6. 프로세스 동기화 Process synchronization
<데이터의 접근>
Exrcution - Strogae
CPU - MEM
컴퓨터 - 디스크(HW)
프로세스 - 주소공간(SW)
**Race condition
2개 이상의 프로세서가 동시에 공유 데이터에 접근하는 문제.
- OS에서 발생: 커널 도중 인터럽트, 문맥교환, 공유메모리
- 해결: 커널의 공유변수 처리동안 인터럽트 금지, CPU를 감제로 빼앗지 않음, 공유 데이터에 lock
<프로세스 동기화 문제>
데이터 불일치 문제
<Critical section문제>
CS = 공유데이터 접근 코드
해결: 1) Mutual Exclusion 2) Progress 3) Bounded Waiting
* Peterson's 알고리즘: flag와 turn 이용, busy wait
<Semaphore>
- S: 정수, 공유 자원의 개수
- P(S): 자원 획득
- V(S): 자원 반납
- 종류: Counting(자원 개수), Binary(mutex)
- Block & Wakeup: Sleep lock, S.value가 자원의 수, 반납 후에도 음수인 경우 프로세스 깨우기
block: 프로세스 suspend, 대기 큐에 삽입
wakeup: 레디 큐로 이동
- Busy wait: mutex, P(mutex), S(mutex)
<Deadlock>
프로세스 2개가 서로 상대방에 의해 충족 될 수 있는 조건을 무한히 기다리는 현상
<Starvation>
프로세스 1개가 무한히 대기하는 현상
<Bounded Buffer 문제>
- Empty(소비자의 자원), Full 버퍼 (생산자의 자원)
- mutex(LOCK)
<Reader - Writer 문제>
- write은 혼자, read는 동시에 여러 가능
- 공유 변수: readcount
- 세마포어: mutex, db
- starvation문제 발생 가능
<Dining philosophoer 문제>
- 세마포어: chopstick -> self[n[, mutex
- 젓가락을 2개 모두 집을 수 있을떄에만 젓가락을 집을 수 있게하기
<Monitor>
고급언어 차원
모니터 내에는 한번에 하나의 프로세스: 배타적 접근 자체 보장
condition variable활용
wait(): suspended
signal(): resume
Comments
Post a Comment