제 6장 프로세스 간 동기화 및 통신 6.1 개요 6.2 병행 처리의 문제점

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
OS 소개 Introduction 설계목표 기본 용어 Resource Management History.
프로세스 동기화(Process Synchronization)
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
C++ Espresso 제1장 기초 사항.
제 4 장 프로세스 Section 1 프로세스의 개념 Section 2 프로세스 스케줄링
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
Chapter 13 – 병렬 프로그래밍과 병렬 처리
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
Internet Computing KUT Youn-Hee Han
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
제 7 장 교착 상태 7.1 개요 개념 교착 상태란 프로세스들의 집합이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태 집합 내의 한 프로세스가 특정 사건의 발생을 기다리며 대기하고 있고, 이 사건이 집합 내의 다른 블록 된 프로세스에 의해 발생될 수 있을.
프로세스 관리.
Internet Computing KUT Youn-Hee Han
제 6 장 프로세스 동기화 (Process Synchronization)
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
4장 병행 프로세스 병행성의 원리를 이해한다 병행 프로세스 수행과 관련된 상호 배 제 해결방안을 알아본다
Chapter 6. 프로세스 동기화(Process Synchronization)
명품 Java Programming.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
2010학년도 2학기 객체지향의 이해.
DataScience Lab. 박사과정 김희찬 (월)
김 정 석 Web Programming 김 정 석
4장. 컴퓨터 구조에 대한 두 번째 이야기 작성자: 윤성우.
Synchronization.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
제6장 프로세스 동기화(Process Synchronization)
4 병행 프로세스와 상호배제.
adopted from KNK C Programming : A Modern Approach
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
5장 조건과 반복 ②.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6 장 프로세스 동기화 (Process Synchronization)
3장 운영체제 2C 김주성.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Introduction to Programming Language
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 19장 윈도우 기반의 쓰레드 동기화 데이터베이스실험실 석사 2학기 조정희
2. 상호배제와 동기화 01 program versionone; // 첫 번째 버전
[CPA340] Algorithms and Practice Youn-Hee Han
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
DataScience Lab. 박사과정 김희찬 (화)
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
U N I X 창원대학교 전자계산학과 김병찬.
병행 프로세서 과목 : 운영체제 학번 : 이름 : 조장호.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
자바 5.0 프로그래밍.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
03. 병행 프로세스(Parallel Process)
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
11장 다형성과 추상 클래스, 인터페이스 Section 1 객체의 형 변환 Section 2 연산자 Section 3 다형성
DataScience Lab. 박사과정 김희찬 (화)
C.
3장 병행 프로세스 2A 박훈.
3장 – 병행 프로세스 A 김정문.
Presentation transcript:

제 6장 프로세스 간 동기화 및 통신 6.1 개요 6.2 병행 처리의 문제점 병행 프로세스들은 서로 독립적으로 수행될 수도 있으며, 때로는 다른 프로세스들과의 협력을 통해서 기능을 수행하는 비동기적(asynchronous) 수행이 될 수도 있다. 6.2 병행 처리의 문제점 병행 처리 문제점 공유 자원의 상호 배타적인 사용(mutual exclusion) 하나의 기능을 공동으로 사용하여 수행하는 두 프로세스 간의 동기화 문제(synchronization) 자료 교환을 위한 메시지 전달 방식과 같은 통신 문제(communication) 두 개 이상 프로세스의 실행 순서와는 무관하게 항상 같은 결과를 얻을 수 있어야 하는 문제(determinancy) 교착상태 문제(deadlock) 프로그래밍 언어를 통한 병행 처리 문제(concurrent programming) 올바른 실행을 검증하는 문제(verification) Slide 1 (of 22)

6.2.1 임계구역 프로세스가 공유자료를 변경하는 코드 영역 하나의 프로세스만 공유 데이터에 대해 배타적으로 접근하고 나머지 프로세스들은 공유 데이터의 접근할 필요가 있더라도 기다려야 한다. 임계구역은 가능한 한 빨리 수행되어야만 하며, 프로세스가 임계구역에 들어간 후 프로세스가 블럭 상태로 되어서는 안 된다. Slide 2 (of 22)

shared double account; 6.2.2 상호배제 한 프로세스만 임계구역에 진입 다수의 프로세스들이 하나의 공유 자원을 상호 배타적으로 사용할 수 있게 하면서 동시에는 수행할 수 없도록 한다. 예) shared double account; 트랜잭션 1 트랜잭션 2 1-1 read account; 1-2 subtract 10,000 won from account; 1-3 store account; 2-1 read account; 2-2 add 10,000 won to account; 2-3 store account; 트랙잭션 실행 순서에 따라 account 값은 10,000, 20,000, 0 원일 수 있다. 공유 변수를 접근하고 있는 하나의 프로세스 이외에는 다른 모든 프로세스들이 공유 변수를 접근하지 못하게 제어하는 기법을 상호 배제라 한다. Slide 3 (of 22)

합리적인 카운팅을 위한 상호 배제 프리미티브 mutual_exclusion() { int account; p1() { while(true) { get_account(); enter_mutex(); account = account + 10000; exit_mutex(); } p2() { account = account - 10000; account = 10000; parbegin p0(); p1() parend Slide 4 (of 22)

6.3 상호배제 프리미티브 임계구역 해결을 위한 3가지 요구 조건 6.3.1 1단계 프리미티브 상호배제(mutual exclusion): 한 프로세스만 임계구역에 진입. 진행(progress): 임계구역에 진입할 프로세스 선택이 영원이 지연되지 않음. 한계 대기(bounded waiting): 한 프로세스가 임계구역 진입 요청 후 기다리는데 한계가 있음. 6.3.1 1단계 프리미티브 1단계 상호 배제 프리미티브 program mutex1() { boolean turn; p0() { while(true) { while (turn == 1) ; critical_section; turn = 1; } p1() while (turn == 0) ; turn = 0; turn=0; parbegin p0(); p1(); parend Slide 5 (of 22)

6.3.2 2단계 프리미티브 2단계 상호 배제 프리미티브 program mutex2() { boolean p0_using, p1_using; p0() { while (true) { while (p1_using == TRUE) ; p0using = TRUE; critical section p0_using = FALSE; remainder section } p1(); while (p0_using == TRUE) ; p1using = TRUE; p1_using = FALSE; p0_using=false; p1_using=false; parbegin p0(); parend 상호 배제가 보장되지 않는다. Slide 6 (of 22)

6.3.3 3단계 프리미티브 3단계 상호 배제 프리미티브 program mutex3() { boolean p0_using, p1_using; p0() { while (true) { p0_using = TRUE; while (p1_using); critical section p0_using = FALSE; remainder section } p1() { p1_using = TRUE; while (p0_using) ; p1_using = FALSE; p0_using=false; p1_using=false; parbegin p0(); p1(); parend 교착상태 발생 Slide 7 (of 22)

6.3.4 4단계 프리미티브 4단계 상호 배제 프리미티브 program mutex4() { boolean p0_using, p1_using; p0() { while (true) { p0_using = true; while (p1_using) { p0_using := false; /* give p1 a chance */ p0_using := true } critical section remainder section p1() { p1_using = true; while (p0_using) { p1_using := false; /* give p0 a chance */ p1_using := true p0_using=false; p1_using=false; parbegin p0(); p1(); parend 진행 조건 불만족 Slide 8 (of 22)

6.3.5 Dekker의 알고리즘 Dekker's 알고리즘 Dekker() { int favored_process; boolean p1using, p2using; favored_process=0; p0() { while (true) { p0_using = true; while (p1_using) { if (favored_process == 1) then { p0_using = false; while (favored_process == 1); } critical section favored_process = 1; remainder section p1() { p1_using = true; while (p0_using) { if (favored_process == 0) p1_using = false; while (favored_process == 0); p1_using = true favored_process = 0; favoredprocess = 0; parbegin p0(); p1(); parend Slide 9 (of 22)

Slide 10 (of 22)

참고1: Lamport의 Bakery 알고리즘 Slide 11 (of 22)

6.4 하드웨어에 의한 동기화 더 이상의 분할이 불가능한 명령문 test_and_set(target)는 논리 변수 target의 값을 temp에 복사 한 후 target을 true로 설정하고 temp 값을 반환한다. test_and_set 명령을 이용한 상호 배제 boolean test_and_set(boolean &target) { boolean temp = target; target = true; return temp; } testandsetexample() { boolean active; p0() { while (1) { while (test_and_set(active)); critical section; active = false; remainder section p1() { parbegin p0(); p1() parend Slide 12 (of 22)

6.5 세마포어 6.5.1 정의 세마포어는 P와 V 그리고 semaphore_initialize(세마포어의 초기값 설정)라는 세 가지 오퍼레이션(operation)에 의해서만 접근될 수 있는 통제된 변수(protected variable)이다. 세마포어 변수 S는 2진 세마포어(binary semaphore)의 경우 그 값이 0 또는 1이 될 수 있고, 산술 세마포어(counting semaphore)는 0 과 양의 정수를 그 값으로 가질 수 있다. P와 V는 test_and_set처럼 분리될 수 없는 원자적 연산이다 Slide 13 (of 22)

6.5.2 프로세스 간 동기화 세마포어에 대한 block/wakeup 프로세스간 동기화 semaphore event_of_interest=0; process_one() { preliminary_stuff_one; P(event_of_interest); other_stuff_one } process_two() { preliminary_stuff_two; V(event_of_interest); other_stuff_two Slide 14 (of 22)

6.5.3 프로세스 간 통신 세마포어에 의한 프로세스 간 통신 : 생산자­소비자 문제 semaphore exclusive_access=1, number_deposited=0; int number_buffer;   producer_process() { int next_result; while (1) { calculate_next_result(); P(exclusive_access); number_buffer = next_result; V(exclusive_access); V(number_deposited) } consumer_process() { P(number_deposited); next_result = number_buffer; write(next_result); Slide 15 (of 22)

참고2: 식사하는 철학자 문제 공유 데이터: Semaphore chopStick[] = new Semaphore[5]; Slide 16 (of 22)

6.6 모니터 6.6.1 개요 모니터란 특정 공유 자원이나 한 그룹의 공유 자원을 할당하는 데 필요한 데이터 및 프로시저를 포함하는 병행성 구조(concurrency construct)로 자료 추상화(data abstraction)의 개념을 기초로 하고 있다. 모니터의 선언 형식의 구조 monitorname : monitor; { declarations of private data; /* local monitor variables */ void pub_name(formal parameters) { /* public procedures */ procedure_body; } void priv_name() { /* private procedures */ initialization of monitor data; }; 조건 변수(condition variable) wait(조건 변수 이름) signal(조건 변수 이름) Slide 17 (of 22)

6.6.2 사용 예 식사하는 철학자 문제 철학자 작업 DP.pickup(i) eat DP.putdown(i) monitor DP { enum { THINKING; HUNGRY, EATING) state [5] ; condition self [5]; void pickup (int i) { state[i] = HUNGRY; test(i); if (state[i] != EATING) self [i].wait; } void putdown (int i) { state[i] = THINKING; // test left and right neighbors test((i + 4) % 5); test((i + 1) % 5); void test (int i) { if ( (state[(i + 4) % 5] != EATING) && (state[i] == HUNGRY) && (state[(i + 1) % 5] != EATING) ) { state[i] = EATING ; self[i].signal () ; initialization_code() { for (int i = 0; i < 5; i++) 철학자 작업 DP.pickup(i) eat DP.putdown(i) Slide 18 (of 22)

환형 버퍼를 사용한 생산자/소비자 문제 monitor ring_buffer_monitor; char ring_buffer[N]; int next_slot_to_fill, next_slot_to_empty; int slot_in_use; condition ring_buffer_has_data, ring_buffer_has_space; void fill_a_slot(char x) { if (slot_in_use == N) wait(ring_buffer_has_space); ring_buffer[next_slot_to_fill] = x; slot_in_use = slot_in_use + 1; next_slot_to_fill = (next_slot_to_fill + 1) mod N; signal(ring_buffer_has_data); } void empty_a_slot(char x) { if (slot_in_use == 0) wait(ring_buffer_has_data); x = ring_buffer[next_slot_to_empty]; slot_in_use = slot_in_use -1; next_slot_to_empty = (next_slot_to_empty - 1) mod N; signal(ring_buffer_has_space); { slot_in_use = 0; next_slot_to_fill = 0; next_slot_to_empty = 0; Slide 19 (of 22)

읽기-쓰기 문제 monitor readers_and_writers; int readers; boolean someone_is_writing; condition reading_allowed, writing_allowed; void begin_reading() { if (someone_is_writing || queue(writing_allowed)) wait(reading_allowed); readers = readers + 1; signal(reading_allowed); } void finished_reading() { readers = readers - 1; if (readers == 0) signal(writing_allowed); viod begin_writing() { if (readers > 0 || someone_is_writing) wait(writing_allowed); someone_is_writing = true; viod finished_writing() { someone_is_writing = false; if (queue(reading_allowed)) signal(reading_allowed); else signal(writing_allowed); { readers = 0; someone_is_wrting = false; Slide 20 (of 22)

6.7 메시지 많은 운영체제들이 몇 가지 종류의 프로세스 간 통신을 지원하기 위하여 메시지 메커니즘을 채택하고 있다. 컴퓨터 네트워크에서 노드 간의 통신은 주로 메시지를 주고받음으로써 이루어지고, 이는 프로세스 간 통신 및 동기화를 자연스럽게 지원한다. 메시지 시스템 구현 How are links established? Can a link be associated with more than two processes? How many links can there be between every pair of communicating processes? What is the capacity of a link? Is the size of a message that the link can accommodate fixed or variable? Is a link unidirectional or bi-directional? Slide 21 (of 22)

참고 3: 메시지를 사용한 유한 버퍼 생산자/소비자 문제의 해 Slide 22 (of 22)