Lưu ý: Mặc dù NTP có ý tưởng về hạt nhân nano có thể được sử dụng để vá các hệ điều hành không sử dụng NTP, nhưng đặc biệt trong Linux không có trong trường hợp này. Mã NTP nằm trong chính hạt nhân như bạn đã nói ở câu hỏi 1 .
0: Làm thế nào để Nanokernel này quản lý để cung cấp độ chính xác thấp hơn đánh dấu đồng hồ hệ thống (chẳng hạn như độ chính xác của ns)?
Độ chính xác lớn hơn độ chính xác đánh dấu đồng hồ hệ thống được thực hiện bằng cách dựa vào độ chính xác tổng hợp của (các) máy tính hoặc thiết bị khác. Đánh dấu đồng hồ hệ thống cho biết tần suất cập nhật của máy tính này. Tuy nhiên, số lượng vị trí chính xác được xác định trong phần mềm cụ thể được sử dụng, chẳng hạn như HĐH thường dựa trên các tiêu chuẩn POSIX. Các tiêu chuẩn POSIX cho một số cấu trúc thời gian đi xuống độ chính xác nano giây như bạn đề cập.
Để xem làm thế nào chúng ta có thể có được độ chính xác lớn hơn độ chính xác của đồng hồ hệ thống, giả sử trên máy tính của tôi, tôi đã gắn vào nó một thiết bị GPS hoặc một loại đồng hồ nguyên tử lạ mắt nào đó. Bất cứ khi nào ai đó hỏi tôi mấy giờ, tôi chỉ cần tham khảo đồng hồ đó và đưa ra.
Nếu ntp nằm trong kernel như với Linux, thì thời gian của thiết bị GPS này thay vì thời gian của đồng hồ hệ thống có thể được sử dụng trong các cuộc gọi gettimeofday () .
Đối với đồng hồ của máy tính, chắc chắn, tôi so sánh thời gian tôi nhận được với GPS hoặc đồng hồ nguyên tử với những gì máy tính và khi nó vượt quá tích tắc, tôi sắp xếp để điều chỉnh lại bằng cách sử dụng adjtime () được mô tả trong câu trả lời cho câu hỏi 3 .
- Nếu và khi nào sửa đổi này được đưa vào nhân Linux dòng chính?
Ý tưởng Nok Nanokernel được giới thiệu trong phiên bản ntp 4.0, quay trở lại ít nhất là vào năm 1998. Tôi nghĩ rằng nó đã có trong nhân Linux ở một số dạng kể từ ít nhất là 2.2.36. Nhật ký github của linux báo cáo ngày 1 tháng 10 năm 2006 như khi mã ntp được tách riêng thành tệp riêng ntp.c
trong kernel. Nhưng tất nhiên nó ở đó từ trước.
Tóm lại, không ai trong số này là mới.
- Làm thế nào để nó sử dụng bộ đếm chu kỳ, bởi vì theo như tôi biết thì nó không cung cấp một ngắt, vì vậy Nanokernel có liên tục đọc giá trị đăng ký của bộ xử lý có chứa bộ đếm hiện tại không?
Nó sử dụng điều này giống như bất kỳ chương trình khác sẽ đọc một biến chương trình. Khi mã sử dụng nó chạy và giá trị là cần thiết, giả sử vì nó đã lấy lại thông tin mới, nó sẽ đọc biến và cập nhật nó. Nếu ai đó cần có thời gian, nó cũng sử dụng nó trong tính toán đó. Vì vậy, trừ khi mã được viết theo cách thực sự ngu ngốc (và tôi khá chắc chắn là không phải vậy), không, nó không "liên tục đọc giá trị đăng ký của bộ xử lý" nhiều hơn mức cần thiết.
- Cuối cùng, NTPD có bao giờ sửa đổi tần số xung nhịp CPU hay chỉ duy trì đồng hồ phần mềm nơi áp dụng điều chỉnh đồng hồ tính toán?
Nó sử dụng lệnh gọi hệ thống adjtime () quay trở lại ngay cả trước năm 1998. Thời gian điều chỉnh nào được sắp xếp theo định kỳ để bộ đếm đồng hồ bỏ lỡ một mức tăng để làm chậm hoặc tăng hơn 1 để tăng tốc.