트랜잭션 문제를 하나 빼먹었네요. ㄷㄷㄷㄷㄷㄷ 일단 문제를 읽어보았는데, 막 눈에 바로 들어오는 문제는 아니네요.
1) 트랜잭션 T1과 T2가 스케줄 s의 순서로 실행되었을 때, 스케줄 s의 회복 가능 여부를 쓰고, 그 이유를 서술할 것. (단, 스케줄 s 이전에 실행한 트랜잭션들은 모두 종료되었다고 가정함.)
s : r1(x) r2(x) w2(y, 60) r2(z) w1(x, 30) w2(z, 90) c2 c1
회복(recovery) 가능한 스케줄이란 어떤 트랜잭션 T가 읽은 데이터 x에 대해, 읽기 연산 이전에 데이터 x에 쓰기 연산을 수행한 모든 트랜잭션들이 완료되기 전까지는 T가 완료되지 않은 스케줄을 의미한다.
스케쥴 S를 설명하면,
s :
r1(x) T1에서 x를 읽음
r2(x) T2에서 x를 읽음
w2(y, 60) : T2에서 y를 60으로 저장
r2(z) : T2에서 z를 읽음
w1(x, 30) : T1에서 x에 30을 저장
w2(z, 90) : T2에서 z에 90을 저장
c2 : T2 종료
c1 : T1 종료
어떻게 설명을 해야할까요? 지문의 예를 가지고 설명을 해보았습니다.
x의 연산 사이에 w연산은 없습니다. 마지막에 w연산을 수행하고 T1/T2가 종료 됩니다.
답 : 회복 가능하다. T1 트랜잭션의 w가 완료된 이후에 T1 트랜잭션이 종료되었다.
(T1과 T2가 데이터 x를 읽고 T1이 데이터 x를 쓰기한 후 T2가 완료(commit)하고 이후 T1이 완료(commit)하기 때문이다.
2) 트랜잭션 T1, T2, T3이 병행적으로 실행되는 도중 시스템 실패가 발생하였으며, 그 동안 다음과 같은 로그가 기록되었다. 지연 갱신 기법에서 이 로그를 사용하여 회복 작업을 진행할 때, undo와 redo가 필요한 트랜잭션을 각 쓸 것. (단, 필요한 트랜잭션이 없을 경우 ‘없음’이라고 쓸 것.)
로그를 한번 볼까요?
<T1 start>
<T1, x, 20, 30>
<T1 commit>
<T2 start>
<T2, y, 50, 60>
<checkpoint>
<T3 start>
<T3, x, 30, 40>
<T2, z, 80, 90>
<T3 commit>
<-- 시스템 실패 발생 -->
지연 갱신 기법은 Undo가 없다.
undo가 필요한 트랜잭션 : 없음
redo가 필요한 트랜잭션 : T3
'백업 > 정보컴퓨터' 카테고리의 다른 글
[정보][OS][가상메모리] 2019-A-03 가상메모리 관리 (0) | 2021.02.12 |
---|---|
[정보][OS][가상기억장치] 2020-B-08 요구 페이징, LRU (0) | 2021.02.12 |
[정보][OS][프로세스] 2020-A-10 프로세스 (0) | 2021.02.11 |
[정보][OS][임계영역] 2021-A-04 임계영역 (1) | 2021.02.11 |
[정보][OS][가상메모리] 2021-B-10 OS 페이지 교체, 이차 기회 알고리즘 (1) | 2021.02.11 |