원자성 (데이터베이스 시스템): 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Npsp (토론 | 기여)
잔글 때 마다 → 때마다('마다'는 조사)
Maybee (토론 | 기여)
잔글편집 요약 없음
9번째 줄:
전통적으로, 원자성은 트랜잭션이 시작되고 종료되었는지를 알려주는 메커니즘과 변경 전, 후 데이터의 복사본을 보존하는 것에 의해 실행된다. 몇몇 [[파일 시스템]]은 저널링(journaling)을 이용해 여러 본의 데이터 복사본의 저장을 회피하는 방법들을 개발해 왔다. 많은 데이터베이스는 원자성 실행을 돕기 위해 또한 커밋-롤백 메커니즘을 지원한다. 또, 변경을 트래킹할 수 있는 로깅/저널링 형태를 사용한다. 로그는 실제 변경이 성공적으로 이뤄질 때마다 동기화 된다. 시스템 충돌로부터 복구시, 저장되지 않은 내용은 무시된다. 병행제어 이슈, 원자성의 원칙 (즉, 완전한 성공 또는 완전한 실패) 에 따라 원자성은 다양하게 구현된다.
 
궁극적으로, 어떤 어플리케이션애플리케이션 레벨의 구현은 운영체제 기능에 의존한다. 여기서 운영체제는 시스템 자원을 다시 전환하려는 다른 소프트웨어나 자원을 이용할 수 없는 상태가 발생(예. 전원 정지)에 대비해 전문화된 하드웨어를 차례로 사용한다. (pre-emptive multitasking)
 
예를 들면, POSIX 호환 시스템은 어플리케이션이애플리케이션이 단독으로 하나의 파일을 사용할 수 있도록 시스템 콜 open(2)을 제공한다. 원자성을 제공하기 위해 다른 널리 사용되는 시스템 콜은 mkdir(2), flock(2), fcntl(2), rasctl(2) (NetBSD restartable sequences), semop(2), sem_wait(2), sem_post(2), fdatasync(2), fsync(2) 그리고 rename(2) 등이 있다.
 
하드웨어 레벨에서, test-and-set(TAS) 같은 원자적 운용과 원자적 증가/감소 기능이 필요하다. 이런 기능이 없거나 필요할 때, 모든 가능한 하드웨어나 소프트웨어의 인터럽트를 불가능하게 인터럽트 레벨을 증가시켜 원자적 동기화 구현에 사용될 수 있다. 이런 하위 레벨 동작은 때로는 [[기계어]]나 [[어셈블리어]]에 의해 수행된다.