1 / 19

운영체제

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

Download Presentation

운영체제

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 운영체제 Readers & Writers 7조 배 영 빈(200316263) 서 준 교(200316269) 조 민 혁(200316341)

  2. 순 서 • “Readers & Writers”? • 기본 용어 정의(사전지식) • 문제 정의 • 문제 해결 • 실행 결과

  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.

  4. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 기본 용어 정의(사전지식) • IPC(interprocess communication) : 프로세스 사이의 통신 • 동기화 : 병행 프로세스 사이에 협력 동기화 • 상호배제 : 공유자원을 상호배타적으로 사용 • 세마포어 : 공유자원에 접근을 제한 하는 방법으로 • 행동을 조절하기 위해 선언된 변수 • 뮤텍스 : 세마포어에서 카운트 기능을 생각하지 않은 단순화된 변수

  5. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 문제 정의 • 파일 등의 데이터는 다수의 프로세서에 의해서 공유된다. • 일부 프로세스(Readers)는 자료를 읽고 • 또 다른 프로세스(Writers)는 자료를 생산 해야한다. • 요구 사항(전제조건) – • 2개 이상의 판독자(Readers) 프로세스의 동시 접근을 허용 • 판독자 프로세스와 기록자 프로세스는 동시 접근 불가능 • (2개 이상의 기록자 프로세스도 당연히 접근 불가능해야함) • 기록자는 항상 배타적으로 접근(판독자의 수행이 끝날 때 까지 기다림)

  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(); /*공유지역이 아닌 곳에서 읽기 사용*/ } }

  7. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 문제 해결 typedef int semaphore; /*세마포어 사용 선언*/ semaphore mutex = 1; /*rc를 컨트롤 하기 위한 세마포어 */ semaphore db = 1; /*데이터베이스 액세스를 위한 세마포어 */ int rc = 0; /* # readers 프로세스의 숫자를 세기 위한 카운트 */

  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 사용반납)*/

  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; if(rc == 1)down(&db); /* 만약 첫번째 reader라면 db권한을 얻는다 */ if(rc ==0) up(&db); /* 이때 rc가 0이면 reader프로세스가 없다는 뜻이기 때문에 db에 대한 엑세스를 반납한다.*/ read_data_base(); down(&mutex); /* rc에 접근을 다시 한다*/ up(&mutex); /*rc에 대한 접근을 다시 반납한다.*/ rc = rc -1;

  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에 대한 접근을 다시 반납한다.*/ }

  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 사용반납)*/ }

  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

  13. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 실행 출력값 Writers 실행시, - DB 접근처리 용 세마포어 db 값 출력 - 자료처리 출력(소스는 간단한 출력문), 현재의 RC값도 출력 semapore db data (value = 1). writers update database. writers say : Now readers value = 0

  14. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” 소스 실행(유닉스 환경)

  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 프로세스에서도 확인가능하다!

  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임을 확인 할 수 있다.

  17. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 기본적인 Readers Writers의 문제 만약 판독자가 진행 되는 중에 기록자가 온다면 판독자가 끝나기 까지 계속 해서 기다리는 문제점이 있다. 이 때문에 다른 방법으로는 뒤에 오는 기록자를 블록시킨 후 현재 진행 되고 있는 판독자가 끝난 후 기록자를 활성화 시키는데, 이 방법은 기록자가 후에 오는 판독자를 위해 기다려주지는 않기 때문에 병행성이 떨어지고 성능도 저하된다.

  18. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” • 우선 순위로 해결 • 두 프로세스 중 어느 곳에 우선 순위를 준다 • 판독자 우선 동기화(strong reader synchronization) • 기록자가 쓰고 있지 않다면 항상 판독자에게 우선권을 줌 • 기록자 우선 동기화(strong reader synchronization) • 기록자에게 항상 우선권을 준다. • 대기중이거나 쓰기 중인 기록자가 완료될 때까지 판독자를 지연

  19. 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” <<<실행소스 및 토의 그룹>>> 구글 그룹스 “건국대 운영체제 Readers & Writers” http://groups.google.co.kr/group/kku_rw 토론 및 발표용 PPT C language source(unix)

More Related