제 6 장 프로세스 동기화 (Process Synchronization)

Slides:



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

Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
프로세스 동기화(Process Synchronization)
VISUAL BASIC 양 계 탁.
Project #2-2. Pintos User Program
제 4 장 프로세스 Section 1 프로세스의 개념 Section 2 프로세스 스케줄링
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
제 6장 프로세스 간 동기화 및 통신 6.1 개요 6.2 병행 처리의 문제점
Chapter 13 – 병렬 프로그래밍과 병렬 처리
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
델파이7 웹서비스 클라이언트 델파이7에서 C#으로 작성한 웹서비스 함수를 사용하기 위한 간략한 방법을 정리해 보았습니다.
Internet Computing KUT Youn-Hee Han
프로세스 관리.
Internet Computing KUT Youn-Hee Han
신호등 제어기 차량의 흐름에 따라 신호등의 신호를 제어하는 장치 신호등 제어기의 입출력 신호
4장 병행 프로세스 병행성의 원리를 이해한다 병행 프로세스 수행과 관련된 상호 배 제 해결방안을 알아본다
CPU wait signal mutex 큐 준비 큐 … wait(mutex) 임계구역 signal(mutex) …
스택(stack) SANGJI University Kwangman Ko
Chapter 6. 프로세스 동기화(Process Synchronization)
Ch2-2. VHDL Basic VHDL lexical element VHDL description
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
DataScience Lab. 박사과정 김희찬 (월)
Operating System 12주차 - Process Synchronization (1)-
FSM 설계.
Synchronization.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter 6. 프로세스 동기화(Process Synchronization)
CPU wait signal mutex 큐 준비 큐 … wait(mutex) 임계구역 signal(mutex) …
제6장 프로세스 동기화(Process Synchronization)
4 병행 프로세스와 상호배제.
CHAP 11: 해싱 순천향대학교 하상호.
운영체제 (Operating Systems) (Process Synchronization)
성균관대학교 전자전기컴퓨터공학과 오영환, 박효진
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
5주차 실습 - solution.
제 6 장 프로세스 동기화 (Process Synchronization)
3장 운영체제 2C 김주성.
2. 상호배제와 동기화 01 program versionone; // 첫 번째 버전
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
4장 - PHP의 표현식과 흐름 제어-.
DataScience Lab. 박사과정 김희찬 (화)
2. 교착상태 해결 기법 실행 과정 - t0 시간에 시스템은 안정상태이며, 순서는 안정 조건을 만족함. - 프로세스 P1은 사용 가능한 자원을 2개 할당 받아 실행한 후 반납 가능하므로 시스템의 여분 자원은 5 개임. - P0은 사용 가능한 자원.
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
5. Semaphores ㈜아이티즌 기술연구소
제 1 장. 자료구조와 알고리즘.
U N I X 창원대학교 전자계산학과 김병찬.
동기화 문제 디버깅하기 사람이 컴퓨터 보다 아름다워♪ Advanced Windows Debugging Chapter.10
병행 프로세서 과목 : 운영체제 학번 : 이름 : 조장호.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C언어 응용 제 15 주 검색.
LCD.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
최대 공약수 구하기 (1) 프로그램 예제2 : 최대 공약수 구하기 문제 해결 방법 구상 (아는 지식 정리) GCD1 알고리즘
병행 프로세스 병행처리는 프로세스들이 서로 관계없이 독립적으 로 수행 가능하고 다른 프로세스들과 협력을 필요로 하면서 기능 수행 3.1 개요 parbegin/parend 제어문 : 순차적인 수행으로부터 여러 개의 동시 수행으로 갈라짐을 지시하는 명령어와 여러 개의 동시.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
첫 번째 수치 문제 컴퓨터시뮬레이션학과 담당교수 : 이형원 E304호,
전류는 자계에서 힘을 받는다 기계공학교육 박지훈 황인석 한만혁 이덕균.
5장 교착 상태 교착상태의 원리를 이해한다. 교착상태의 해결을 위한 예방, 회피, 탐지 그리고 회복에 대하여 알아본다.
이번 시간에는... 지난 시간까지 2회차에 걸쳐 WML의 택스트 포맷, 이미지 처리, 페이지 이동, 태스크 수행과 이벤트 처리 및 WML 사용자 Input 처리 태그 등, WML 개발에 대해서 알아보았습니다. 이번 시간에는 2회차에 걸쳐, WML 스크립트 개발에 대해서.
03. 병행 프로세스(Parallel Process)
Concurrency: Mutual Exclusion and Synchronization (상호배제와 동기화)
DataScience Lab. 박사과정 김희찬 (화)
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
3장 – 병행 프로세스 A 김정문.
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
Presentation transcript:

제 6 장 프로세스 동기화 (Process Synchronization) 6.1 배경 경합 상태(race condition) : 두 프로세스 모두 공동 변수를 조작 repeat ... nextp에서 한 항목 생산 while counter = n do no-op; buffer[in]:=nextp; in:=in+1 mod n; counter := counter + 1; until false; 생산자 repeat ... while counter = 0 do no-op; nextc:=buffer[out]; out:=out+1 mod n; counter := counter - 1; nextc에서 한 항목 소비 until false; 소비자 공동 변수 조작

register1 := counter register1 := register1 + 1 counter := register1 T0: producer execute register1 := counter {register1 = 5} T1: producer execute register1 := register1 + 1 {register1 = 6} T2: consumer execute register2 := counter {register2 = 5} T3: consumer execute register2 := register2 - 1 {register2 = 4} T4: producer execute counter := register1 {counter = 6} T5: consumer execute counter := register2 {counter = 4}

6.2 임계 구역(Critical Section) 문제 임계 구역: 공동 변수 변경 등을 수행하는 구역 임계 구역의 실행은 시간적으로 상호 배타적이어야… 진입 구역(entry section) : 임계 구역 바로 앞, 허가권 요청 출구 구역(exit section) : 임계 구역 바로 뒤 잔류 구역(remainder section) : 나머지 코드 임계 구역 문제 해결을 위한 3가지 요건 상호 배제(mutual exclusion) : 오직 한 프로세스만 실행 진행(progress) : 임계 구역에 프로세스가 없고, 잔류 구역이 아닌 곳에서 진입을 원하는 프로세스가 있으면 무한히 연기할 수 없다 한계 대기 : 진입 요청 후 진입 허용 사이에 다른 프로세스가 진입하는 횟수에는 한계가 있어야 한다

6.2.1 2개 프로세스를 위한 해결법 repeat while turn  i do no-op; 임계 구역 turn := j; 잔류 구역 until false; [그림 6.1] 알고리즘 1- Pi의 구조 처음에 turn이 1이고 P1이 진입하려 하지 않으면 P0는 “진행” 못함 repeat flag[i] := true; while flag[j] do no-op; 임계 구역 flag[i] := false; 잔류 구역 until false; [그림 6.1] 알고리즘 2- Pi의 구조 여기서 interrupt되면 둘 다 “진행” 못할 수 있음

while (flag[j] and turn=j) do no-op; 임계 구역 flag[i] := false; 잔류 구역 앞의 둘을 결합 3 조건 모두 만족 repeat flag[i] := true; turn := j; while (flag[j] and turn=j) do no-op; 임계 구역 flag[i] := false; 잔류 구역 until false; [그림 6.1] 알고리즘 3- Pi의 구조

6.3 복수 프로세스를 위한 해결법 repeat choosing[i] := true; number의 초기값은 모두 0 repeat choosing[i] := true; number[i] := max(number[0], number[1], …, number[n-1]) +1; choosing[i] := false; for j := 0 to n - 1 do begin while choosing[j] do no-op; while number[j]  0 and (number[j], j) < (number[i], i) do no-op; end; 임계 구역 number[i] := 0; 잔류 구역 until false; [그림 6.5] 제과점 알고리즘에서 프로세스 Pi의 구조 나중에 실행하는 프로세스가 큰 수를 할당 받음 number가 같으면, 프로세스 번호까지 비교

6.3 동기화 하드웨어 원자적으로 실행되는 하드웨어 명령어: test-and-set, swap function Test-and-Set (var target: boolean): boolean; begin Test-and-Set := target; target := true; end; [그림 6.6] Test-and-Set을 이용한 한계 대기 상호 배제 중간에 interrupt되지 않음 Repeat while Test-and-Set( lock ) do no-op; 임계 구역 lock := false; 잔류 구역 until false; [그림 6.7] Test-and-Set으로 상호 배제 구현 아직 한계 대기 조건 은 만족 안됨 but 6.2, 6.3 보다 낫고 간단! 처음엔 false

Procedure Swap (var a, b: boolean); var temp: boolean; begin temp := a; a := b; b := temp; end; [그림 6.8] swap 명령어의 정의 앞의 Test-and-Set과 완전히 동일한 효과 repeat key := true; Swap(lock, key); until key = false; 임계 구역 lock := false; 잔류 구역 until false; [그림 6.9] Swap 명령어에 의한 상호 배제의 구현 처음엔 false

while waiting[i] and key do key := Test-and-Set(lock); waiting[i]와 lock은 처음에 모두 false repeat waiting[i] := true; key := true; while waiting[i] and key do key := Test-and-Set(lock); waiting[i] := false; 임계 구역 j := i+1 mod n; while (j  i) and (not waiting[j]) do j := j+1 mod n; if j = i then lock := false else waiting[j] := false; 잔류 구역 until false; [그림 6.10] Test-and-Set을 이용한 한계 대기 상호 배제 한계 대기를 위한 조치 다른 프로세스가 요청 후 기다리고 있는지 차례로 검사 요청 후 기다리고 있는 프로세스가 하나도 없으면... 만약 있다면, lock을 풀지 않은 채로 대기 중인 프로세스를 임계 구역으로 진입시킴

더욱 다양한 동기화 문제(“순서” 제어 등)의 해결이 목표 6.4 세마포 (Semaphore)  더욱 다양한 동기화 문제(“순서” 제어 등)의 해결이 목표 세마포 S(정수)를 wait연산과 signal 연산(혹은 P, V)으로 조절 wait와 signal은 모두 원자적 연산 mutex는 처음에 1 고전적 정의 repeat wait(mutex); 임계 구역 signal(mutex); 잔류 구역 until false; [그림 .11] 세마포에 의한 상호 배제의 구현 wait(S): while S  0 do no-op; S := S - 1; signal(S): S:= S + 1; 프로세스 1 프로세스 2 S1; wait(synch) signal(synch) S2; 명시적 순서 지정(synch는 처음에 0)

구현 방법 type semaphore = record (인터럽트 금지 혹은 value: integer; 임계구역으로) L: list of process; end; wait(S): S.value := S.value - 1; if S.value < 0 then begin add this process to S.L; block; signal(S): S.value := S.value + 1; if S.value  0 remove a process from S.L; wakeup(P); S가 음수면, |S| = 대기 프로세스 수 FIFO라면, 한계 대기 보장 가능 OS에 시스템 호출 바쁜 대기(busy waiting) 제거

var S1: binary-semaphore; S2: binary-semaphore; C: integer; wait 연산: wait(S1); C := C - 1; if C < 0 then begin signal(S1); wait(S2); end signal 연산: wait(S1); C := C + 1; if C  0 then signal(S2); else signal(S1); 6.4.3 교착상태와 기아 P0 P1 wait(S); wait(Q); wait(Q); wait(S); . . signal(S); signal(Q); signal(Q); signal(S); 인터럽트 금지나 임계 구역을 사용 하지 않고 구현 6.4.4 이진 세마포

6.5 동기화의 고전적인 문제들 6.5.1 한계 버퍼 문제 repeat … nextp에서 한 항목을 생산 초기값: mutex=1, empty=n, full=0 repeat … nextp에서 한 항목을 생산 wait(empty); wait(mutex); nextp를 buffer에 추가 signal(mutex); signal(full); until false; [그림 6.12] 생산자 프로세스의 구조 repeat wait(full); wait(mutex); … buffer로부터 삭제하여 nextc로 signal(mutex); signal(empty); nextp에서 한 항목을 생산 until false; [그림 6.13] 소비자 프로세스의 구조

readcount := readcount + 1; if readcount = 1 then wait(wrt); … 쓰기를 수행 signal(wrt); [그림 6.14] writer 프로세스의 구조 6.5.2 판독 기록 문제 wrt는 writer와 첫 reader가 공유 mutex는 reader들끼리 공유 wait(mutex); readcount := readcount + 1; if readcount = 1 then wait(wrt); signal(mutex); … 읽기를 수행 readcount := readcount - 1; if readcount = 0 then signal(wrt); [그림 6.15] reader 프로세스의 구조 초기값: mutex=0, wrt=0 첫번째 reader만 writer 때문에 기다리고, 이후의 reader들은 다른 reader 때문에 기다림 일단 read가 시작되면 reader들은 병행 read 가능 마지막 reader가 writer를 깨움

6.5.3 철학자들의 만찬(Dining Philosophers) 문제 각 젓가락 -> 세마포 repeat  wait(chopstick[i]); wait(chopstick[i+1 mod 5]); … 식사한다 signal(chopstick[i]); signal(chopstick[i+1 mod 5]); 생각한다 until false; [그림 6.17] 철학자 i의 구조 인접한 둘이 동시에 먹는 일은 방지, 그러나 교착 상태나 굶어 죽는 일 발생 가능 교착상태까지 막으려면… 1. 철학자를 4명만 앉게 2. 2개 모두 잡을 수 있을 때만 잡게 (임계구역에서 wait) 3. 홀짝제

6.6 임계 영역 (Critical Region)  오류 혹은 악의에 의해 wait, signal을 잘못 표현 임계 구역 동시 수행 혹은 교착 상태 유발 가능 임계 영역: 고수준 언어 구조체(construct) (동기화 구조) var v: shared T; region v when B do S (공유 변수 선언) (region 문) S 실행 동안 다른 프로세스가 v를 접근 못함

Encapusulation(캡슐화): var buffer: shared record pool: array [0..n-1] of item; count, in, out: integer; end; 생산자 프로세스: region buffer when count < n do begin pool[in] := nextp; in := in + 1 mod n; count := count + 1; 소비자 프로세스: region buffer when count > 0 nextc := pool[out]; out := out + 1 mod n; count := count - 1; pool, count, in 등을 프로세스에서 함부로 접근 못함 (반드시 region문을 통해서만 가능)

first-count := first-count + 1; if second-count > 0 wait(mutex); while not B do begin first-count := first-count + 1; if second-count > 0 then signal(second-delay) else signal(mutex); wait(first-delay); first-count := first-count - 1; second-count := second-count + 1; if first-count > 0 then signal(first-delay) else signal(second-delay); wait(second-delay); second-count := second-count - 1; end; S; then signal(first-delay); else if second-count > 0 then signal(second-delay); [그림 6.18] 조건부 구역 구조체의 구현 Mutex=1, 나머지는 모두 0으로 초기화