아래와 같이 NTP Nanokernel에 대해 몇 가지 질문이 있습니다.http://www.eecis.udel.edu/~mills/database/brief/nano/nano.pdf
가장 큰 질문은 이 나노커널이 어떻게 시스템 클럭 사이클 이하의 정확도(즉, ns 정확도)를 제공할 수 있느냐는 것입니다.
몇 가지 사소한 질문이 있습니다.
- 이 수정 사항이 메인라인 Linux 커널에 도입된다면 언제 도입됩니까?
- 둘째, 나노커널은 CPU 클록 주기(HZ가 어떻게 설정되었는지에 관계 없음)와 클록 주기 카운터의 통합된 조합을 사용하는 것으로 보입니다.
"프로세스 사이클 카운터(PCC)는 틱 인터럽트 사이에 마이크로초 또는 나노초를 삽입하는 데 사용됩니다."
내가 아는 한 인터럽트를 제공하지 않기 때문에 사이클 카운터를 어떻게 사용합니까? 나노커널은 현재 카운터가 포함된 프로세서 레지스트리 값을 계속해서 읽습니까?
- 마지막으로 NTPD는 CPU 클럭 주파수를 수정합니까, 아니면 컴퓨팅 클럭 조정을 적용하는 소프트웨어 클럭만 유지합니까?
답변1
참고: NTP에는 NTP를 사용하지 않는 운영 체제를 패치하는 데 사용할 수 있는 마이크로커널이라는 아이디어가 있지만 특히 Linux에서는 그렇지 않습니다. 질문 1에서 언급했듯이 NTP 코드는 커널 자체에 있습니다..
0: 이 나노코어는 어떻게 시스템 클럭 주기 이하의 정확도(예: ns 정확도)를 제공합니까?
시스템 시계 틱 정확도보다 더 큰 정확도는 다른 컴퓨터나 장치의 총 정확도에 의존하여 달성됩니다. 시스템 시계 틱은 이 컴퓨터의 틱 업데이트 빈도를 제공합니다. 그러나 정밀도 자릿수는 일반적으로 POSIX 표준을 사용하는 운영 체제와 같이 사용되는 특정 소프트웨어에서 정의됩니다. 언급한 대로 특정 시간 구조에 대한 POSIX 표준은 나노초 정밀도를 달성할 수 있습니다.
시스템 시계보다 더 나은 정확도를 얻는 방법을 알아보기 위해 GPS 장치나 일종의 멋진 원자 시계가 내 컴퓨터에 연결되어 있다고 가정해 보겠습니다. 누군가 나에게 지금이 몇 시냐고 물을 때마다 나는 시계를 보고 대답한다.
ntp가 Linux와 같은 커널에 있는 경우 시스템 시계 시간 대신 GPS 장치 시간을 사용할 수 있습니다.하루 중 시간을 가져옵니다()수신 전화.
컴퓨터의 시계는 물론 GPS나 원자시계를 통해 얻은 시간을 컴퓨터의 시간과 비교하여 1틱이 지나면 질문 3의 답변에 설명된 대로 adjtime()을 사용하여 조정하도록 조정합니다.
- 이 수정 사항이 메인라인 Linux 커널에 도입된다면 언제 도입됩니까?
NTP 나노커널의 아이디어는 적어도 1998년으로 거슬러 올라가는 ntp 버전 4.0에서 소개되었습니다. 나는 그것이 적어도 2.2.36 이후로 어떤 형태로든 리눅스 커널에 존재했다고 생각합니다.리눅스 github 로그ntp.c
2006년 10월 1일에 ntp 코드가 커널에서 자체 파일 로 분리되었다고 보고되었습니다 . 그러나 물론 그것은 이전에도 있었습니다.
대체로 이것은 새로운 것이 아닙니다.
- 내가 아는 한 인터럽트를 제공하지 않기 때문에 사이클 카운터를 어떻게 사용합니까? 나노커널은 현재 카운터가 포함된 프로세서 레지스트리 값을 계속해서 읽습니까?
프로그램 변수를 읽는 다른 프로그램처럼 이를 사용합니다. 이를 사용하는 코드가 실행되어 값이 필요할 때, 예를 들어 새로운 정보를 얻었기 때문에 변수를 읽고 업데이트합니다. 누군가 시간이 필요할 경우에도 계산에 사용됩니다. 따라서 코드가 매우 어리석은 방식으로 작성되지 않는 한(그렇지 않을 것이라고 확신합니다), 필요하지 않은 한 "프로세서 레지스트리 값을 지속적으로 읽지" 않습니다.
- 마지막으로 NTPD는 CPU 클럭 주파수를 수정합니까, 아니면 컴퓨팅 클럭 조정을 적용하는 소프트웨어 클럭만 유지합니까?
시스템 호출을 사용합니다.시간을 조정하세요() 심지어 1998년 이전까지 거슬러 올라갑니다. adjtime의 목적은 주기적으로 시계 카운터를 예약하여 증가분을 놓치고 속도를 늦추거나 1을 넘어 증가시켜 속도를 높이는 것입니다.