-
파일 및 레코드 잠금 목차
목표
- 파일 및 레코드 잠금의 필요성과 개념을 이해한다.
- 잠금의 두 가지 종류 권고 잠금과 강제 잠금에 대해 알아본다
파일 및 레코드 잠금의 필요성?
- 잠금을 사용하지 않은 경우
- A라는 사람과 B라는 사람이 더블 통장을 쓴다. 더블 통장에는 100만 원이 들어가 있다.
- A라는 사람이 돈이 생겨 10만원을 입금하려 한다.
- B라는 사람은 돈을 사용할 일이 생겨 10만 원을 출금하려 한다.
- A가 통장에 접근하여 잔액 100만원을 읽는다.
- B도 통장에 접근하여 잔액 100만원을 읽는다.
- A는 100만원에 10만 원을 입금하여 잔액이 110만 원이 된 것을 확인했다.
- B는 A가 입금하기 전에 잔액을 읽었으므로 100만원에 10만 원을 사용해 잔액이 90만 원이 되었다.
- 통장에는 90만원이 남았다(오류 발생).
- 잠금을 사용한 경우
- A라는 사람과 B라는 사람이 더블 통장을 쓴다. 더블 통장에는 100만 원이 들어가 있다.
- A라는 사람이 돈이 생겨 10만원을 입금하려 한다.
- B라는 사람은 돈을 사용할 일이 생겨 10만 원을 출금하려 한다.
- A가 통장에 접근하여 잔액 100만원을 읽는다.
- B도 통장에 접근하지만 접근 권한이 없으므로 읽지 못한다.
- A는 100만원에 10만 원을 입금하여 잔액이 110만 원이 된 것을 확인했다.
- B는 A가 10만원을 입금한 후에 접근 권한이 생겨 110만원을 읽는다
- B는 10만원을 출금하여 통장에는 100만 원이 남았다(성공).
- 한 프로세스가 해당영역을 읽거나 수정할 때, 다른 프로세스의 접근을 제한
- 잠금 된 영역에서는 하나의 프로세스만 접근 가능
잠금 구현
- fcntl() : 잠금 함수
- lockf() : 배타적 쓰기 잠금
권고 잠금과 강제 잠금
- 권고 잠금 : 지금까지 설명한 잠금. 즉 시스템에 강제되지 않는 잠금
- 다른 프로세스가 이미 잠금 된 파일의 영역에 대해서 잠금 규칙을 무시하고 읽거나 쓰기 시도하는 것이 가능
- 모든 관련 응용 프로세스들은 자발적으로 잠금 규칙을 준수하고 사용
- 강제 잠금 : 잠금 된 파일 영역에 대해 잠금 규칙을 무시하고 읽거나 쓰는 것이 불가능한 강력한 잠금
정리 및 느낀 점
- 파일레코드 잠금은 동시에 여러 사람이 접속하여 정보를 수정할 경우를 대비한 기능이다.
- 잠금에는 권고 잠금과 강제 감금이 있다.
- 대부분 권고 장금을 사용하나 다른 프로세스로 접근하면 잠금 규칙을 무시한다.
- 강제 장금은 이상적이나 모든 프로세스에게 장제 하므로 시스템에 부하가 있을 수 있다.
출처
- 창병모, 리눅스 프로그래밍, 생능출판사, 2014.