CS스터디/운영체제
Process Synchronization - Readers-Writers Problem
Junpyo Lee
2024. 4. 1. 20:05
반응형
문제 상황
- 주로 데이터베이스에서 발생하는 문제이다.
- 한 프로세스가 DB에
Write
중일 때 다른 프로세스가 접근하면 안된다. Read
는 동시에 여럿이 해도 된다.
해결법
Writer
가 DB에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기중인Reader
들을 다 DB에 접근하게 해준다.Writer
는 대기 중인Reader
가 하나도 없을 때 DB 접근이 허용된다.- 일단
Writer
가 DB에 접근 중이라면Reader
들은 접근이 금지된다. Writer
가 DB에서 빠져나가야만Reader
의 접근이 허용된다.
- 일단
여기서 Shared Data는?
- DB 자체
readcount
- 현재 DB에 접근 중인 Reader의 수
두 가지 동기화 변수(세마포어)
- Mutex
- 공유 변수
readcount
를 접근하는 코드(critical section)의mutual exclusion
보장을 위해 사용
- 공유 변수
- DB
Reader
와Writer
가 공유 DB 자체를 올바르게 접근하게 하는 역할
Pseudo Code
Initialization
// Shared Data
int readcount = 0;
DB 자체;
// Synchronization variables
semaphore mutex = 1, db = 1;
- DB 자체와 현재 읽는 중인
Reader
의 수를 나타내는readcount
가 공유 데이터이다. - 이 두 공유 데이터를 관리하기 위해 세마포어 변수
mutex
와db
를 사용한다.mutex
는Reader
가readcount
의 값을 변경할 때 쓰는 세마포어 변수다.db
는 DB 자체에 대해Writer
와Reader
간 Mutual Exclusion을 달성하기 위한 세마포어 변수다.
Writer
P(db);
// writing DB is performed
V(db);
Starvation
이 발생 가능하다.
Reader
P(mutex);
readcount++;
if(readcount == 1) P(db); // block writer
V(mutex);
// reading DB is performed
P(mutex);
readcount--;
if(readcount == 0) V(db); // enable writer
V(mutex);
- 첫번째
Reader
는Writer
가 접근하지 못하도록db
세마포어 변수에 lock을 건다 - 마지막
Reader
는 이제Writer
가 접근할 수 있도록db
세마포어 변수에 lock을 해제한다.
출처
반효경, "운영체제 2014-1", KOCW, http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
반응형