일반적으로 즉각적인 시간 도약이 발생할 때 오류에 취약한 데이터베이스 서버는 아닙니다. 해당 시간을 사용하는 응용 프로그램입니다.
시간 추적에는 일반적으로 두 가지 방법이 있습니다. 자체 시간 추적 또는 시스템 시간 비교. 둘 다 긍정적이고 부정적인 장단점이 있습니다.
자신의 시간 추적
정확한 타이밍이 그다지 중요하지 않은 일부 임베디드 프로그래밍 및 시스템에서 이것이 사용되는 것을 볼 수 있습니다. 기본 응용 프로그램 루프에서는 '틱'추적 방법이 처리됩니다. 이것은 커널에 의해 제공되는 알람, 수면 시간 또는 경과 시간을 나타내는 수면 또는 선택이 될 수 있습니다. 시간이 지났다는 것을 알면이 시간을 카운터에 더하거나 뺄 수 있습니다. 이 카운터는 타이밍 응용 프로그램을 발생시키는 원인입니다. 예를 들어, 카운터가 10 초보다 높으면 무언가를 버릴 수 있거나 무언가를해야합니다.
응용 프로그램이 시간을 추적하지 않으면 카운터가 변경되지 않습니다. 이것은 응용 프로그램의 디자인에 따라 필요할 수 있습니다. 예를 들어, 장기 실행 프로세스가 처리하는 데 걸리는 시간을 추적하면 시작 / 중지 타임 스탬프 목록보다 카운터를 사용하는 것이 더 쉽습니다.
찬성:
- 시스템 시계에 의존하지 않음
- 큰 시간 왜곡으로 깨지지 않습니다.
- 비용이 많이 드는 시스템 호출 없음
- 작은 카운터는 전체 타임 스탬프보다 적은 메모리 비용
범죄자:
- 시간이 매우 정확하지 않습니다
- 시스템 시간의 변화는 더욱 부정확해질 수 있습니다
- 타이밍은 응용 프로그램 실행과 관련이 있으며 지속되지 않습니다.
시스템 시간 비교
이것은 더 자주 사용되는 시스템입니다. 타임 스탬프를 저장하고 시스템 타임 콜을 사용하여 타임 스탬프와 비교하십시오. 시스템 시간이 크게 왜곡되면 응용 프로그램의 무결성이 위협받을 수 있습니다. 시계 방향에 따라 몇 초 정도 걸리거나 몇 시간이 걸리거나 즉시 종료 될 수 있습니다.
찬성:
범죄자:
- 다른 타임 스탬프와 비교할 수있는 새로운 타임 스탬프를 얻기 위해 시스템 호출을받습니다.
- 응용 프로그램이 기울어 짐을 알고 있거나 깨질 수 있음
영향을받는 시스템
대부분의 응용 프로그램은 일정 작업과 비교할 때 타임 스탬프를 사용합니다. 캐시 정리가 가능한 데이터베이스 시스템의 경우.
쿼리 언어에서 데이터베이스 및 호출 시간 함수를 사용하는 모든 응용 프로그램은 응용 프로그램이 그에 따라 감지 및 처리하지 않으면 기울어 짐의 영향을받습니다. 응용 프로그램은 목적에 따라 실행을 중지하거나 무한 로그인 기간을 허용 할 수 없습니다.
메일 시스템은 오래된 메일 또는 배달되지 않은 메일을 처리하기 위해 타임 스탬프 및 / 또는 타임 아웃을 사용합니다. 시계 왜곡이 영향을 줄 수 있지만 훨씬 적은 영향을 미칩니다. 서버에 다시 연결하는 것과 관련된 백 오프 타이머가 누락되어 연결 서버에 불이익을 줄 수 있습니다.
시스템 시간을 변경할 때 커널 알람이 사라질 것이라고 생각하지 않습니다 (연구하지 않았습니다). 이를 사용하는 시스템은 안전 할 수 있습니다.
솔루션
부드럽게 움직입니다. 이것은 선호하는 시간 솔루션의 문서에서 찾을 수 있습니다.
now()
있습니다. 답변 시간을 변경하는 안전한 방법을 추가 할 수 있습니까?