운영체제

19
운운운운 운운운운 Readers & Writers 7운 운 (200316263) 운 (200316269) 운 (200316341)

Upload: isabelle-barrett

Post on 01-Jan-2016

47 views

Category:

Documents


0 download

DESCRIPTION

운영체제. Readers & Writers. 7 조 배 영 빈 (200316263) 서 준 교 (200316269) 조 민 혁 (200316341). 순 서. “ Readers & Writers ” ? 기본 용어 정의 ( 사전지식 ) 문제 정의 문제 해결 실행 결과. 건국대학교 소프트웨어 운영체제 7 조 “ Readers & Writers”. “ Readers & Writers ” ?. 자원이 두 가지 유형 ( 읽기 , 쓰기 ) 의 접근을 허용하는 상황 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 운영체제

운영체제운영체제

Readers & Writers

7 조

배 영 빈 (200316263)서 준 교 (200316269)조 민 혁 (200316341)

Page 2: 운영체제

순 서

“Readers & Writers”?

기본 용어 정의 ( 사전지식 )

문제 정의

문제 해결

실행 결과

Page 3: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

“Readers & Writers”?

자원이 두 가지 유형 ( 읽기 , 쓰기 ) 의 접근을 허용하는 상황-“ 기록자 (Writers) 가 기록할 때는 판독자가 읽어서는 안된다”

-“ 판독자 (Readers) 가 읽는 중에 기록자에 의해 내용이 변경 되어서는 안된다”1. Many readers are accessing the file concurrently but no writers are currently accesing the database2. At most one writer (and no readers) is accessing the database.

Page 4: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

기본 용어 정의 ( 사전지식 )

- IPC(interprocess communication) : 프로세스 사이의 통신

- 동기화 : 병행 프로세스 사이에 협력 동기화

- 상호배제 : 공유자원을 상호배타적으로 사용

- 세마포어 : 공유자원에 접근을 제한 하는 방법으로 행동을 조절하기 위해 선언된 변수

- 뮤텍스 : 세마포어에서 카운트 기능을 생각하지 않은 단순화된 변수

Page 5: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

문제 정의

파일 등의 데이터는 다수의 프로세서에 의해서 공유된다 .

일부 프로세스 (Readers) 는 자료를 읽고 또 다른 프로세스 (Writers) 는 자료를 생산 해야한다 .

-요구 사항 ( 전제조건 ) –

2 개 이상의 판독자 (Readers) 프로세스의 동시 접근을 허용

판독자 프로세스와 기록자 프로세스는 동시 접근 불가능(2 개 이상의 기록자 프로세스도 당연히 접근 불가능해야함 )

기록자는 항상 배타적으로 접근 ( 판독자의 수행이 끝날 때 까지 기다림 )

Page 6: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

typedef int semaphore; /* 세마포어 사용 선언 */semaphore mutex = 1; /*rc 를 컨트롤 하기 위한 세마포어 */semaphore db = 1; /* 데이터베이스 액세스를 위한 세마포어 */int rc = 0; /* # readers 프로세스의 숫자를 세기 위한 카운트 */

void writer(void){ while(TRUE){ think_up_data(); /* 비중요 지역 ( 공유영역이 아닌 곳에서의 쓰기 )*/ down(&db); /* 단독 엑세스를 얻음 (DB 사용허가 )*/ write_data_base(); /* 자료 등록 */ up(&db); /* 단독 엑세스 반납 (DB 사용반납 )*/ }}

void reader(void){ while(TRUE){ down(&mutex); /* rc 의 접근을 한다 '*/ rc = rc +1; /* 하나의 reader process 추가 */ if(rc == 1)down(&db); /* 만약 첫번째 reader 라면 db 권한을 얻는다 */ up(&mutex); /*rc 접근을 반납한다 '*/ read_data_base(); /* 데이터베이스 읽기 */ down(&mutex); /* rc 에 접근을 다시 한다 */ rc = rc -1; /* 하나의 읽기 과정이 끝났으므로 rc 를 줄인다 */ if(rc ==0) up(&db); /* 이때 rc 가 0 이면 reader 프로세스가 없다는 뜻이기 때문에 db 에 대한 엑세스를 반납한다 .*/ up(&mutex); /*rc 에 대한 접근을 다시 반납한다 .*/ use_data_read(); /* 공유지역이 아닌 곳에서 읽기 사용 */ } }

Page 7: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

문제 해결

typedef int semaphore; /* 세마포어 사용 선언 */semaphore mutex = 1; /*rc 를 컨트롤 하기 위한 세마포어 */semaphore db = 1; /* 데이터베이스 액세스를 위한 세마포어 */int rc = 0; /* # readers 프로세스의 숫자를 세기 위한 카운트 */

Page 8: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

문제 해결

void writer(void){ while(TRUE){ think_up_data(); /* 비중요 지역 ( 공유영역이 아닌 곳에서의 쓰기 )*/ down(&db); /* 단독 엑세스를 얻음 (DB 사용허가 )*/ write_data_base(); /* 자료 등록 */ up(&db); /* 단독 엑세스 반납 (DB 사용반납 )*/ }}

down(&db); /* 단독 엑세스를 얻음 (DB 사용허가 )*/

up(&db); /* 단독 엑세스 반납 (DB 사용반납 )*/

Page 9: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

문제 해결

void reader(void){ while(TRUE){ down(&mutex); /* rc 의 접근을 한다 '*/ rc = rc +1; /* 하나의 reader process 추가 */ if(rc == 1)down(&db); /* 만약 첫번째 reader 라면 db 권한을 얻는다 */ up(&mutex); /*rc 접근을 반납한다 '*/ read_data_base(); /* 데이터베이스 읽기 */ down(&mutex); /* rc 에 접근을 다시 한다 */ rc = rc -1; /* 하나의 읽기 과정이 끝났으므로 rc 를 줄인다 */ if(rc ==0) up(&db); /* 이때 rc 가 0 이면 reader 프로세스가 없다는 뜻이기 때문에 db 에 대한 엑세스를 반납한다 .*/ up(&mutex); /*rc 에 대한 접근을 다시 반납한다 .*/ use_data_read(); /* 공유지역이 아닌 곳에서 읽기 사용 */ } }

down(&mutex); /* rc 의 접근을 한다 '*/

up(&mutex); /*rc 접근을 반납한다 '*/

rc = rc +1;

down(&mutex); /* rc 에 접근을 다시 한다 */

up(&mutex); /*rc 에 대한 접근을 다시 반납한다 .*/

rc = rc -1;

if(rc == 1)down(&db); /* 만약 첫번째 reader 라면 db 권한을 얻는다 */

if(rc ==0) up(&db); /* 이때 rc 가 0 이면 reader 프로세스가 없다는 뜻이기 때문에 db 에 대한 엑세스를 반납한다 .*/

read_data_base();

Page 10: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

실제 소스

sem_t *mutex, *db; // 두 개의 세마포어값

int *rc; /* # readers 프로세스의 숫자를 세기 위한 카운트 */

...

for(icount=0;icount<2;icount++)

{

sem_wait(mutex); /* rc 의 접근을 허락한다 '*/

(*rc)++; /* 하나의 reader process 추가 */

if((*rc) == 1) sem_wait(db); /* 첫번째 reader//db 권한을 얻는다 */

sem_post(mutex); /*rc 접근을 반납한다 '*/

printf("%d reader : %d's readers is reading now \n", now_reader_value, (*rc));

sleep(10);

sem_wait(mutex); /* rc 에 접근을 다시 한다 */

(*rc)--; /* 하나의 읽기 과정이 끝났으므로 rc 를 줄인다 */

if((*rc) == 0) sem_post(db); /* 이때 rc 가 0 이면 reader 프로세스가 없다는 뜻이기 때문에 db 에 대한 엑세스를 반납한다 .*/

sem_post(mutex); /*rc 에 대한 접근을 다시 반납한다 .*/

}

Page 11: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

실제 소스

while(1)

{

sem_wait(db); /* 단독 엑세스를 얻음 (DB 사용허가 )*/

printf("writers update database. writers say : Now readers value = %d\n", (*rc));

sleep(5);

sem_post(db); /* 단독 엑세스 반납 (DB 사용반납 )*/

}

Page 12: 운영체제

실행 출력값

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

Readers 실행시 ,

- 현재 두 개의 세마포어 mutex, db 의 값 출력

- 현재 rc 값 출력

semapore mutex data (value = 1).

semapore db data (value = 1).

reader add, readers count value = 1 -> 2

1 reader : 1 reader is reading now

Page 13: 운영체제

실행 출력값

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

Writers 실행시 ,

- DB 접근처리 용 세마포어 db 값 출력

- 자료처리 출력 ( 소스는 간단한 출력문 ), 현재의 RC 값도 출력

semapore db data (value = 1).

writers update database. writers say : Now readers value = 0

Page 14: 운영체제

소스 실행 ( 유닉스 환경 )

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

Page 15: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

readers 실행 중 writers 실행

실행결과

cslab:~/os/rw(499)% readers &

[1] 3178

cslab:~/os/rw(500)% Pointer to shared memory has been obtained.

semapore mutex data (value = 1).

semapore db data (value = 1).

reader add, readers count value = 0 -> 1

1 reader : 1 reader is reading now

실행결과

Writers

Pointer to shared memory has been obtained.

Semapore db data (value=0)

임계구역에서 DB 를 처리하는 과정인

writers update database. writers say : Now readers value = 0

은 출력이 되지 않는다 .

즉 , readers 프로세스가 실행 중일 때는 writers 가 접근이 불가능하다 .

Semapore db data (value=0) DB 세마포어가 0 임을

Writers 프로세스에서도 확인가능하다 !

Page 16: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

writers 독자실행

실행결과

Writers

Pointer to shared memory has been obtained.

Semapore db data (value=1)

writers update database. writers say : Now readers value = 0

Writer 만 독자적으로 실행 했을 시 , writers 의 db 처리 문장이

출력되고 , db 세마포어 값도 1 임을 확인 할 수 있다 .

Page 17: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

기본적인 Readers Writers 의 문제

만약 판독자가 진행 되는 중에 기록자가 온다면

판독자가 끝나기 까지 계속 해서 기다리는 문제점이 있다 .

이 때문에 다른 방법으로는 뒤에 오는 기록자를 블록시킨 후

현재 진행 되고 있는 판독자가 끝난 후 기록자를 활성화 시키는데 ,

이 방법은 기록자가 후에 오는 판독자를 위해 기다려주지는

않기 때문에 병행성이 떨어지고 성능도 저하된다 .

Page 18: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

우선 순위로 해결

두 프로세스 중 어느 곳에 우선 순위를 준다

-판독자 우선 동기화 (strong reader synchronization)

-기록자가 쓰고 있지 않다면 항상 판독자에게 우선권을 줌

-기록자 우선 동기화 (strong reader synchronization)

-기록자에게 항상 우선권을 준다 .

-대기중이거나 쓰기 중인 기록자가 완료될 때까지 판독자를 지연

Page 19: 운영체제

건국대학교 소프트웨어 운영체제 7 조 “Readers & Writers”

<<< 실행소스 및 토의 그룹 >>>

구글 그룹스 “건국대 운영체제 Readers & Writers”

http://groups.google.co.kr/group/kku_rw

토론 및 발표용 PPT

C language source(unix)