Operating System 12주차 - Process Synchronization (1)-

Slides:



Advertisements
Similar presentations
운영체제 Chapter 3 병형 프로세스 박요안.
Advertisements

DB 프로그래밍 학기.
DB 프로그래밍 학기.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Cross Compiler를이용한 커널 컴파일 및 포팅
컴퓨터 프로그래밍 기초 [Final] 기말고사
제 6 장 프로세스 동기화 (Process Synchronization)
Multi-thread Programming
조 병 규 Software Quality Lab. 한국교통대학교
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Multi-thread Programming
07. 디바이스 드라이버의 초기화와 종료 김진홍
Multi-thread Programming
운영체제 허상복 컴퓨터시스템 연구실
Root Filesystem Porting
Communication and Information Systems Lab. 황재철
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Multi-thread Programming
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Root Filesystem Porting
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
Sungkyunkwan University OS Project Dongkun Shin
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
TCP/IP Socket Programming…
PySpark Review 박영택.
03. 병행 프로세스 (Parallel Process)
11장. 1차원 배열.
Grade Server Team14. Attention Seeker
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Readers & Writers 운영체제 7조 배 영 빈( ) 서 준 교( )
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
제 6 장 프로세스 동기화 (Process Synchronization)
24장. 파일 입출력.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Operating System 10주차 - IPC(InterProcess Communication) -
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
8장. spss statistics 20의 데이터 변환
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
CHAP 21. 전화, SMS, 주소록.
Canary value 스택 가드(Stack Guard).
데이터 동적 할당 Collection class.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Multi-thread Programming
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
05. General Linear List – Homework
7주차: Functions and Arrays
3. 모듈 (5장. 모듈).
논리회로 설계 및 실험 4주차.
JSP Programming with a Workbook
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
06. 디바이스의 등록과 해제 김진홍
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
CODE INJECTION 시스템B 김한슬.
7 생성자 함수.
6 객체.
연구실안전관리시스템 안전교육 이수방법 사무국 시설과.
Presentation transcript:

Operating System 12주차 - Process Synchronization (1)- Real-Time Computing and Communications Lab. Hanyang University yjuly0708@hanyang.ac.kr rooterby@gmail.com

Contents Process Synchronization Mutex Semaphore Readers-Writers Problem 과제 #6

Process Synchronization 데이터의 일관성을 위해 shared data에 대한 동시 접근을 제어하는 것 일관성을 유지하기 위해서는 관련된 프로세스들이 순차적으로 실행되는 보장하는 방법이 요구됨

The Critical-Section Problem N개의 프로세스들은 서로 shared data를 사용하기 위해 경쟁한다. shared data에 접근하는 코드 부분을 critical section이라고 한다. critical section 은 한번에 하나의 프로세스만 접근 가능하다.

The Critical-Section Problem 각각의 프로세스들은 동기화를 위해 사용하기 위한 변수를 공유한다. General process Pi entry section : critical section에 들어가기 위한 요청을 수행 exit section : critical section의 수 행이 끝난 후 출구 부분 remainder section : 코드의 나머 지 부분

Mutex Critical section으로 들어가기 위한 하나의 키.

Mutex Mutex mechanism

Mutex functions Header File : pthread.h Mutex 초기화 Mutex lock int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); mutex : 초기화할 mutex의 pointer mutexattr : mutex의 특성을 설정할 때 사용 (사용하지 않을 경우 NULL) Mutex lock int pthread_mutex_lock(pthread_mutex_t *mutex); Mutex unlock int pthread_mutex_unlock(pthread_mutex_t *mutex); Mutex 제거 int pthread_mutex_destory(pthread_mutex_t *mutex); 사용하고 난 뒤 mutex와 resource 해제 모든 함수는 성공 시 0을 return

Mutex Example

Mutex pthread compilation gcc command에서 맨 뒤에 -lpthread 옵션을 추가

Mutex Example 결과

Semaphore Mutex와 같이 critical section에 대한 접근을 제한하는 키로 활용됨 integer variable S를 가지며, 2개의 atomic operation을 통해 접근 제어가 수행됨 P(S) : wait function V(S) : signal function

Semaphore functions Header file : semaphore.h Semaphore 초기화 int sem_init(sem_t *sem, int pshared, unsigned int value); sem : 초기화할 semaphore 객체 pshared : 0이 아니면 프로세스들 간에 semaphore를 공유. 0이면 프로세스 내부에서만 semaphore를 사용 value : semaphore 초기값 Semaphore value 감소 int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem); sem_wait : semaphore 값이 0보다 크면 프로세스는 semaphore를 얻은 뒤 감소시키고 즉시 리턴값을 반환한다. semaphore 값이 0이면 0보다 커지거나 signal이 발생할 때까지 대기한다. sem_trywait : sem_wait과 기본적으로 같지만, 즉시 semaphore를 감소시키고 리턴값을 반환한다는 점이 다르다.

Semaphore functions Semaphore value 증가 Semaphore value 저장 Semaphore 삭제 int sem_post(sem_t *sem); Semaphore value 저장 int sem_getvalue(sem_t *sem, int *sval); sval이 가리키는 위치에 sem의 현재값을 저장 Semaphore 삭제 int sem_destory(sem_t *sem); semaphore를 포함해 관련된 resource를 모두 해제

Semaphore Example

Semaphore Example

Semaphore Example 결과

Classical Problems of Synchronization Readers and Writers Problem First problem – give preferential treatment to readers Second problem – give preferential treatment to writers Third problem – give neither priority The Dining – Philosophers Problem Example of concurrency-control problem

Readers-Writers Problem 하나의 저장공간을 여러 명의 독자와 저자들이 접근할 때 발생하는 문제이며 크게 2가지 문제로 나눌 수 있다. First Readers-Writers Problem Second Readers-Writers Problem 독자는(Readers) 저장공간에서 데이터를 읽어오기만 한다. 저자는(Writers) 저장공간에 데이터를 기록한다. Shared Memory Writer Reader

First Readers-Writers Problem 기본적으로 프로세스의 동기화를 위해서 같은 저장공간에 2개 이상의 프로세스가 동시에 접근하는 것을 막는다. 하지만 독자(Readers)는 데이터를 읽어오기만 하므로, 동시에 여러 명의 독자가 접근하는 것을 막는 행위는 어리석은 짓이다. 이에 대한 문제 해결한 것을 First Readers-Writers Problem 혹은 Readers-Preference 라고 한다. Shared Memory Writer Reader[1] Reader[2] Reader[N] … 우리들도 같이 읽을래!

First Readers-Writers Problem { wait(wrt); // writing // (Critical Section Area) signal(wrt); } Shared Data semaphore wrt = 1, mutex = 1; int readcount = 0; 첫 번째 독자가 저자가 접근 못하게 잠근다. 마지막 독자가 다시 접근 가능하게 풀어준다. reader() wait(mutex); readcount++; if(readcont == 1) signal(mutex); // reading readcount--; if(readcount == 0) 1. 2.

Second Readers-Writers Problem First Readers-Writers Problem에서 다수의 독자가 존재하거나, 소수의 독자가 지속적으로 공유 메모리에 접근함으로써 새롭게 접근한 저자가 “resource starvation”에 처할 수 있다. 이에 대한 문제 해결한 것을 Second Readers-Writers Problem 혹은 Writers-Preference 라고 한다. 독자들이 계속 접근해난 언제까지 기다려? Reader[1] Writer[1] Shared Memory Reader[2] Writer[2] … Reader[N]

Second Readers-Writers Problem Shared Data semaphore mutex_rdcnt = 1, mutex_wrcnt = 1; semaphore mutex_check = 1; semaphore w = 1, r = 1; int readcount = 0, writecount = 0; writer() { wait(mutex_wrcnt); writecount++; if(writecount == 1) wait(r); signal(mutex_wrcnt); wait(w); // writing // (Critical Section Area) signal(w); writecount--; if(writecount == 0) signal(r); } 새로운 저자가 접근을 시도하면 독자가 접근 못하게 잠근다. 마지막 저자가 다시 풀어준다. reader() wait(mutex_check); wait(mutex_rdcnt); readcount++; if(readcont == 1) signal(mutex_rdcnt); signal(mutex_check); // reading readcount--; if(readcount == 0) 1. 2.

과제 #6 1. 앞에서 배운 Shared Memory에 대하여, Second Readers-Writers Problem을 해결하는 Lock, Unlock System call을 구현한다. 2. System call은 세마포어를 이용하여 구현한다. 3. 유저레벨에서 만든 shared memory에 대해서 동작하며, 이를 위해 shmid를 인수로 받아온다. printk를 이용해 커널버퍼에 현재 상태를 기록함으로써, 동기화 여부를 판단할 수 있도록 한다. sleep 함수 등을 이용하여, 적당한 딜레이를 주어 다음 슬라이드에 확인해야 할 3가지 상황에 대한 측정을 용이하게 할 수 있도록 한다.

과제 #6 4. 구현한 시스템 콜을 이용하여 Reader, Writer 프로그램을 구현한다. 5. Test Writer는 SIGINT(ctrl+c)신호를 받으면 유저로부터 문자열을 입력 받아 데이터를 공유메모리에 기록하고, SIGTSTP(ctrl+z)가 있을 때까지 프로그램을 종료하지 않고 대기한다. Reader는 SIGTSTP(ctrl+z)이 있을 때까지, 계속해서 데이터를 읽어온다. IPC 실습 PPT + signal 사용법 참고. 5. Test 각각의 터미널에서 프로그램을 실행한다. 이때 커널메시지를 확인하기 위해 사전에 $sudo dmesg --clear 를 입력한다. 아래의 항목들을 확인하고, 캡쳐한 뒤 분석한다. (1) 2명의 저자가 동시에 접근 불가한 것을 확인할 수 있어야 한다. (2) 2명 이상의 독자가 동시에 접근 가능한 것을 확인할 수 있어야 한다. (3) 저자에게 우선권이 있음을 확인할 수 있어야 한다. (writers-preference)

과제 #6 Example> (1) 2명의 저자 동시접근 불가능! 위에서 2500, 2501은 해당 writer process의 pid를 의미한다. Writer[2500]이 Unlock 한 뒤, Writer[2051]이 Write Start를 시작하는 것을 확인할 수 있다. 즉, 복수의 저자의 접근을 방지한다. 2명의 저자 동시접근 불가능!

과제 #6 Example> (2) 3명의 Reader 3353, 3354, 3355가 존재하고, Read End에 상관없이 동시에 공유메모리에 정보를 읽는 것을 확인할 수 있다. 복수의 Reader가 접근가능

과제 #6 Example> (3) 진행중인 Reader가 끝나면, 즉시 기다리고 있던 Writer가 실행 기존의 동작하던 3개의 Reader Process가 Read를 끝낸 뒤 다시 Read하지 않고, 기다리고 있는 Write Process에게 우선권을 주는 것을 확인할 수 있다. First readers-writers problem 에 대해서 구현하게 되면, 다수의 Reader Process가 계속해서 접근할 경우 resource starvation 으로 인해, Writer Process가 계속해서 실행되지 않을 수 있다. 진행중인 Reader가 끝나면, 즉시 기다리고 있던 Writer가 실행 (Writer-Preference)

과제 #6 Due : 2015/06/05 실습 수업 시간 6/5 실습 보고서 출력해서 수업시간에 제출 보고서 표지 과제 내용 요약 전체적인 과제 구현 과정(시스템 콜, 유저레벨 프로그램, 커널코드 수정 등…) 최종 결과 및 분석 (앞에 3가지 경우에 대한 스크린샷과 분석) 후기 6/5 실습수업 강의 후 프로그램 동작 확인 결석해야 할 사유가 있을 시 사전에 조교에게 말할 것. 지연제출에 대해서는 개별적으로 조교에게 연락해서 확인 받을 것! 보고서 및 프로그램 확인 전부 받아야 과제 점수 인정.

과제 #6 문의사항 지연제출에 대해서는 감점이 있을 수 있음. 이름 : 김연준 E-Mail : yjuly0708@hanyang.ac.kr 이름 : 하태욱 E-Mail : rooterby@gmail.com 실습관련 질문 시 제목을 아래의 양식에 맞춰서 메일을 보내주세요. ex> [운영체제] 학번_이름 지연제출에 대해서는 감점이 있을 수 있음.