Readers & Writers 운영체제 7조 배 영 빈( ) 서 준 교( )

Slides:



Advertisements
Similar presentations
CI(Continuous Integration) 이학성. C ontinuous I ntegration? 2 지속적으로 품질관리 를 적용하는 과정 개발자가 기존 코드의 수정 작업 을 시작할 때, 코드 베이스의복사본을 받아서 작업을 시작하면서 코드의 변경.
Advertisements

A 장형태.  병행프로세스 개요  상호배제 (Mutual Exclusion)  상호배제 ( 세마포어 )  모니터 (monitor)  프로세스간 2 가지 통신방법.
운영체제 Chapter 3 병형 프로세스 박요안.
운영체제 3주차 정리 박 남 규.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
제14장 동적 메모리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Windows Server 장. Windows Server 2008 개요.
제 9 장 구조체와 공용체.
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
Linux System Programming
목차 백업과 복원.
Windows Server 장. 사고를 대비한 데이터 백업.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
제 3장. C보다 나은 C++ II.
Multi-thread Programming
07. 디바이스 드라이버의 초기화와 종료 김진홍
Multi-thread Programming
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Multi-thread Programming
Operating System 12주차 - Process Synchronization (1)-
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
23장. 구조체와 사용자 정의 자료형 2.
뇌를 자극하는 Windows Server 장. Windows Server 2008 개요.
Sungkyunkwan University OS Project Dongkun Shin
TCP/IP Socket Programming…
03. 병행 프로세스 (Parallel Process)
1장. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
어서와 C언어는 처음이지 제14장.
메모리 관리 & 동적 할당.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
병행 프로세스 이나현.
뇌를 자극하는 Windows Server 2012 R2
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
자바 5.0 프로그래밍.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
School of Electronics and Information. Kyung Hee University.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Chapter 12. 파일, 프린트 서버관리 네트워크 환경에서 파일서버, 프린트 서버를 구축하여 사용하는 것은 기본이다. 효율성 있는 파일서버의 관리방법에 대해서 설명하고 있으며, 프린트 서버를 운영할 때 참고할 만한 기능에 대해서도 설명한다. 분산파일시스템, 디스크할당량.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
( Windows Service Application Debugging )
병행프로세스의개요 주세호.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Multi-thread Programming
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
병행 프로세스 병행처리는 프로세스들이 서로 관계없이 독립적으 로 수행 가능하고 다른 프로세스들과 협력을 필요로 하면서 기능 수행 3.1 개요 parbegin/parend 제어문 : 순차적인 수행으로부터 여러 개의 동시 수행으로 갈라짐을 지시하는 명령어와 여러 개의 동시.
TVM ver 최종보고서
구조체(struct)와 공용체(union)
System Security Operating System.
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
06. 디바이스의 등록과 해제 김진홍
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
CHAP 15. 데이터 스토리지.
 6장. SQL 쿼리.
13. 포인터와 배열! 함께 이해하기.
병행 프로세스(Parallel Process)
2. 프로세스 B 안우진 - 운영체제 -.
Presentation transcript:

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

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

“Readers & Writers”? 자원이 두 가지 유형(읽기, 쓰기)의 접근을 허용하는 상황 1. Many readers are accessing the file concurrently but no writers are currently accesing the database 2. At most one writer (and no readers) is accessing the database. 기본적인 IPC 관련 동기화 문제 하나 / 데이터베이스, 비행기예약시스템 프린터를 생각해 보자. 공유 디스크에 기록자가 기록한 후에 판독자가 읽어야 한다. 기록자가 기록할 때는 판독자가 읽어서는 안된다(P(writing), V(writing)). 판독자가 읽기 시작할 때도 기록을 하면 데이터가 훼손되므로 P(writing), V(writing) 연산이 필요하다.

기본 용어 정의(사전지식) 건국대학교 소프트웨어 운영체제 7조 “Readers & Writers” IPC(interprocess communication) : 프로세스 사이의 통신 동기화 : 병행 프로세스 사이에 협력 동기화 상호배제 : 공유자원을 상호배타적으로 사용 세마포어 : 공유자원에 접근을 제한 하는 방법으로 행동을 조절하기 위해 선언된 변수 뮤텍스 : 세마포어에서 카운트 기능을 생각하지 않은 단순화된 변수 세마포어 차단을 원하는 자원에대해서 세마포어를 생성하면 해당자원을 가리키는 세마포어 값이 할당된다. 이 세마포어 값에는 현재 세마포어를 적용하고 있는 자원에 접근할수 있는 프로세스의 숫자를 나타낸다. 이 값이 0이면 이 자원에 접근할수 있는 프로세스의 숫자가 0이라는 뜻이며, 자원), 0보다 큰 정수면 해당 정수의 크기만큼의 프로세스가 자원에 접근할수 있다라는 뜻이 된다.

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

건국대학교 소프트웨어 운영체제 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) 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조 “Readers & Writers” typedef int semaphore; /*세마포어 사용 선언*/ semaphore mutex = 1; /*rc를 컨트롤 하기 위한 세마포어 */ semaphore db = 1; /*데이터베이스 액세스를 위한 세마포어 */ int rc = 0; /* # readers 프로세스의 숫자를 세기 위한 카운트 */ Rc는 리더의 숫자이기도 하지만, 접근을 원하기 위한 프로세스의 숫자로 봐도 무방

문제 해결 건국대학교 소프트웨어 운영체제 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 사용반납)*/ ‘db’ 세마포어를 up&down으로 공유메모리(여기서는 DB) 사용을 허가하고 취소

문제 해결 건국대학교 소프트웨어 운영체제 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; Mutex는 rc카운터를 사용하기 위해 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조 “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에 대한 접근을 다시 반납한다.*/ }

실제 소스 건국대학교 소프트웨어 운영체제 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 사용반납)*/ }

실행 출력값 건국대학교 소프트웨어 운영체제 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

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

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

readers 실행 중 writers 실행 건국대학교 소프트웨어 운영체제 7조 “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 프로세스에서도 확인가능하다!

writers 독자실행 건국대학교 소프트웨어 운영체제 7조 “Readers & 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임을 확인 할 수 있다.

기본적인 Readers Writers의 문제 만약 판독자가 진행 되는 중에 기록자가 온다면 판독자가 끝나기 까지 계속 해서 기다리는 문제점이 있다. 이 때문에 다른 방법으로는 뒤에 오는 기록자를 블록시킨 후 현재 진행 되고 있는 판독자가 끝난 후 기록자를 활성화 시키는데, 이 방법은 기록자가 후에 오는 판독자를 위해 기다려주지는 않기 때문에 병행성이 떨어지고 성능도 저하된다. 기록자에게 우선권을 주면 판독자의 작업이 끝날 때까지 기다지만, 기록자 이후에 오는 판독자에 대해선 기다리지 않기 때문에 병행성이 떨어지고 성능도 저하 된다는 점이 있다. - 기록자 자체에 우선 순위를 부여하는 해결책?

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

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