3.4병행성 시간은 중요하다.
- 1. 3.4 병행성 : 시간은 중요하다.
Structure and Interpretation of Computer Programs
2014.11.22
aceigy6322@gmail.com
- 2. • 물체가 시간에 따라 달라지는 상태를 가짐.
• 덮어 쓰기 연산으로 변수 값이 바뀔때마다
시간의 변화를 나타냄.
• 상태의 변화는 한번에 하나씩 바뀌는게 아
니라 병행으로 바뀐다고 봄.
- 4. 병행 시스템에서 시간의 성질
• 사건의 일어나는 차례
차례가 바로 시간.
• 같은 시간에 상태하나
를 여러 프로세스가
덮어쓰려해서 문제.
- 5. 병행성을 다스리는 방법
• 상태 변화가 병행으로 일어 날때, 그 시스
템이 제대로 돌아간다는 사실을 보장할 방
법이 필요.
• 제약 조건을 걸어줌.
• 줄 세우개(Serializer)
- 8. 한 상태를 여럿이 같이 쓸때 그 차
례를 정하는 방법
(define x 10)
(parallel-execute ( lambda () (set! X (* x x)))
( lambda () (set! X (+ x 1))))
- 9. (define x 10)
(define s (make-serializer))
(parallel-execute ( s (lambda () (set! X (* x
x))))
( s (lambda () (set! X (+ x
1)))))
- 10. 여러자원을 함께 쓰는 문제
(define (exchange account1 account2)
(let ((difference (- (account1 ‘balance)
(account2 ‘balance))))
((account1 ‘withdraw) difference)
((account2 ‘deposit) difference)))
- 11. (define (serialized-exchange account1
account2)
(let ((serializer1 (account1 ‘serializer’))
(serializer2 (account2 ‘seralizer’)))
((serializer1 (serializer2 exchange))
account1
account2)))
- 12. 줄세우기 만들기
(define (make-serializer)
(let ((mutex (make-mutex)))
(lambda (p)
(define (serialized-p . Args)
(mutex ‘acquire)
(let ((val (apply p args)))
(mutex ‘release)
val))
serialized-p)))
- 13. (define (make-mutex)
(let ((cell (list false)))
(define (the-mutex m)
(cond ((eq? m ‘acquire)
(if (test-and-set! Cell)
(the-mutex ‘acquire)))
(eq? m ‘release) (clear! Cell))))
the-mutex))
(define (clear! Cell)
(set-car! Cell false))
- 15. 엇갈림(deadlock)
• 여러 프로세스가 다른 프로세스를 지켜보
면서 아무것도 하지 못하고 끝없이 기다려
야 하는 상태.
• 공유자원에 번호를 매겨놓고 차례대로 쓰
는 기법
• 엇갈림 벗어나기 기법(deadlock-recovery)
- 17. Referance
• 컴퓨터 프로그램의 구조와 해석 2/E
– 헤럴드에빌슨, 제럴드 제이 서스먼, 줄리 서스먼 지음. 인사이트.