1 / 15

프로세스 1 … wait(mutex) 임계구역 signal(mutex) … …

프로세스 1 … wait(mutex) 임계구역 signal(mutex) … …. 프로세스 2 … wait(mutex) 임계구역 signal(mutex) … …. 프로세스 3 … wait(mutex) 임계구역 signal(mutex) … …. 프로세스 n … wait(mutex) 임계구역 signal(mutex) … …. …. wait. 프로그램 계수기. signal. CPU. mutex 큐. 준비 큐. 6.7 모니터 ( Monitor)

aman
Download Presentation

프로세스 1 … wait(mutex) 임계구역 signal(mutex) … …

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. 프로세스 1 … wait(mutex) 임계구역 signal(mutex) … … 프로세스 2 … wait(mutex) 임계구역 signal(mutex) … … 프로세스 3 … wait(mutex) 임계구역 signal(mutex) … … 프로세스 n … wait(mutex) 임계구역 signal(mutex) … … …... wait 프로그램 계수기 signal CPU mutex 큐 준비 큐

  2. 6.7 모니터 (Monitor) • 모니터 type : 또 하나의 고수준 동기화 구조체 • 프로그래머가 정의하는 type • 표현 방법: • 변수(어떤 순간에 한 instance의 상태를 나타냄) 선언 • 프로시져: 해당 모니터 type에 적용 가능한 연산들 • 한 순간에 한 P만 모니터 안에서 활동 보장 (그림 6.19) • 조건 변수 : type이 condition인 변수 • 특별한 동기화가 필요한 경우 (예: 젓가락 문제) • var x, y: condition; x.wait; y.signal;(그림 6.20) • 세마포의 경우와 다름 : 대기 중인 P가 없으면 signal 효과 없음 signal했다고 모니터를 떠난 것은 아님

  3. type dining-philosophers = monitor var state: array [0..4] of (thinking, hungry, eating); var self: array [0..4] ofcondition; procedure entry pickup (i: 0..4); begin state[i] := hungry; test (i); if state[i]  eating then self[i].wait; end; procedure entry putdown (i: 0..4); begin state[i] := thinking; test (i+4 mod 5); test (i+1 mod 5); end; procedure test (k: 0..4); begin if state[k+4 mod 5]  eating and state[k] = hungry and state[k+1 mod 5]  eating then begin state[k] := eating; self[k].signal; end; end; begin for i := 0 to 4 do state[i] := thinking; end. 조건 구조체 변수 선언 프로시져 초기화 코드

  4. 철학자 만찬 문제의 해결 (그림 6.21) • 교착상태도 해결, 그러나 기아는 가능 • 모니터의 호출 dp.pickup(i); … eat … dp.putdown(i); • 모니터의 구현(세마포의 사용) wait(mutex); ... 프로시져 몸체(pickup, …) ... if next-count > 0 then signal(next) else signal(mutex);

  5. 조건 변수(x)의 구현 x-count := x-count +1; if x-count > 0 if next-count > 0 then begin then signal(next) next-count := next-count + 1; else signal(mutex); signal(x-sem); wait(x-sem); wait(next) x-count := x-count - 1; next-count := next-count - 1; end; x.wait x.signal

  6. 조건부 대기 구조체 • 모니터 안에서의 프로세스의 재개 순서를 제어 예) x.wait(c) • 순서가 보장되려면, • 모든 프로세스가 아래 순서를 준수해야 한다 R.acquire(t) … 자원접근 … R.release; • 협조 관계에 있지 않은 프로세스들까지도 감시해야 한다. Type resource-allocation = monitor var busy: boolean; x: condition; procedure entry acquire(time: integer); begin if busy then x.wait(time); busy := true; end; procedure entry release; begin busy := false; x.signal; end; begin busy := false; end 자원 사용 예정 시간 프로그래머가 실수/고의로 위반 가능

  7. 6.9 원자성 트랜잭션 (Atomic Transactions) • 데이터 일관성(data consistency) • 원자적 실행 • 병행수행 결과=임의 순서 실행 결과 • 서로 방해하지 않음 (임계구역 상호배제) • 논리적 단위 : all or nothing (자동이체의 차변-대변) • DB기법 원용(예:파일 처리) 6.9.1 시스템 모델 • 트랜잭션(transaction) : 하나의 논리적 기능을 수행하는 명령 (동작)들의 집합, 원자성(atomicity) 유지가 중요 • T: 디스크상 파일의 자료 항목들을 접근/갱신하는 P • 일련의 read/write연산, commit(완성)/abort(취소)로 종료 • 취소 시 복귀(rollback): 원자성 보장

  8. 6.9.2 로그 기반 회복 (Log Based Recovery) • 단일 T(병행 T)의 관점 • 기록 우선 로깅(write-ahead logging) • 항상 안정(stable) 기억장치에 먼저 기록 • Undo(Ti)/Redo(Ti) • 시스템 실패 시 <Ti commits>가 없는 T는 모두 Undo(Ti) 6.9.3 검사점 (Checkpoint) • 주기적으로 안정 장치에 저장(로그, 갱신된 자료값) 후 <checkpoint>라는 로그를 추가로 저장 • 탐색/회복 시간 절약

  9. 6.9.4 병행 원자 트랜잭션 • 직렬성(serializability) • 병행 수행한 결과가 각 T를 순차 실행한 결과와 동일 • 세마포로 보장 가능, 그러나 지나친 제한 • 실행 중첩이 필요=>병행성 제어 알고리즘 6.9.4.1 직렬성 (Serializability)의 판별 • 직렬 스케쥴: 각 T를 원자적으로 실행 => n!가지 • 충돌연산(conflicting operation) • Oi, Oj가 동일 자료를 접근하고 최소 하나가 write • 충돌 직렬화 가능(conflict serializable) 스케쥴 • 비충돌 연산들끼리의 교체로 직렬 스케쥴로 변형 가능 (그림6-23, 6-24) 중첩 허용  항상 틀림

  10. -직렬 스케쥴 -충돌이 있지만 직렬화 가능한 스케쥴 T0 T1 read(A) write(A) read(B) write(B) read(A) write(B) read(B) write(B) T0 T1 read(A) write(A) read(A) write(A) read(B) write(B) read(B) write(B) 종속 그래프 T0 T1 A, B

  11. 6.9.4.2 로킹 프로토콜 (Locking Protocol) • (사전 스케쥴 없이) 직렬성을 보장하기 위한 하나의 수단 • 자료 항목마다 잠김(lock)을 획득/해제 • 공유(shared) 모드 잠금: read 가능/write불가 • 배타(exclusive) 모드 잠금: read/write 모두 가능 • 직렬성(무결성)을 보장하려면 => 2단계로킹 프로토콜 • 성장(growing) 단계: 잠김을 얻기만 하고 해제하지 않음 • 위축(shrinking) 단계: 해제만 하고 얻지는 않음 • 직렬성 보장하지만 교착 상태는 해결 못함

  12. T1, T2의 스케쥴 T11 Lock A T12 A 변경 T13 Unlock A T21 Lock A T22 A 변경 T23 Lock B T24 Unlock A T25 B 변경 T26 Unlock B T14 Lock B T15 B 변경 T16 Unlock B T1(2단계가 아닌 록킹) T11LOCK A T12 A := A + 100 T13UNLOCK A T14LOCK B T15 B := B + 100 T16UNLOCK B T'1(2단계 록킹) T'11LOCK A T'12 A := A + 100 T'13LOCK B T'14UNLOCK A T'15 B := B + 100 T'16UNLOCK B 직렬화 불가 => 무결성 깨짐 A T0 T1 B

  13. 6.9.4.3 타임스탬프(Timestamp) 기반 프로토콜 • clock이나 counter로 T의 입장 시간을 기록: TS(Ti) • W-타임스탬프: write(Q)를 성공한 T의 최대TS값 • R-타임스탬프: read(Q)를 성공한 T의 최대TS값 • 프로토콜 • Ti가 read(Q) 수행 시 • TS(Ti) < W-타임스탬프 : 거절, Ti는 roll back • TS(Ti)  W-타임스탬프 : 수행, W-타임스탬프 조정 • Ti가 write(Q) 수행 시 • TS(Ti) < R-타임스탬프 : 거절, roll back • TS(Ti) < W-타임스탬프 : 거절, roll back • 나머지 경우: 수행

  14. 복귀한 T는 새 TS를 가지고 처음부터 재시작 • cf. 로킹에서는 새로 시작하지는 않고 기다림 • 충돌 직렬성 보장, 교착 상태 없음 • 로킹이나 TS기법 중 한 가지로만 가능한 경우가 있음 T2 T3 read(B) read(B) write(B) read(A) read(A) read(A) • [그림 6.25] TS 프로토콜로 가능한 스케쥴의 예 로킹으로도 가능

  15. 기존 세마포 임계영역 모니터 병행 트랜잭션 wait문 각 P의 모든 compiler가 생성 & 임계구역의 각 P에는 없음 ” . signal문 앞뒤로 분산됨 배타적인 임계구역 region문 모니터 내의 자료 항목 범위 전체 전체 wait ~ signal 하나

More Related