일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- package-private
- 세마포어
- 컴퓨터과학
- 깃허브
- CS
- 이펙티브 자바
- 신입
- 알고리즘
- 스터디
- 개발
- github
- IT
- 공채
- 뮤텍스
- 디지털
- 깃
- 프로그래밍
- Public
- 우리카드
- OS
- java
- 스프링
- 정보처리기사
- 신입사원
- spring
- 컴퓨터공학
- Effective Java
- 자바
- 운영체제
- 메모리
Archives
- Today
- Total
주니어 개발자 성장기
Process Synchronization - Readers-Writers Problem 본문
문제 상황
- 주로 데이터베이스에서 발생하는 문제이다.
- 한 프로세스가 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
'CS스터디 > 운영체제' 카테고리의 다른 글
Process Synchronization - Monitor (0) | 2024.04.02 |
---|---|
Process Synchronization - Dining-Philosophers Problem (0) | 2024.04.01 |
Process Synchronization - Bounded Buffer Problem (0) | 2024.03.30 |
운영체제의 예시(22/07/10) (0) | 2022.07.10 |
운영체제란? 목적과 분류(22/07/09) (0) | 2022.07.10 |