2010-04-09 33 views
20

Tôi biết rằng 10 năm trước, độ chính xác đồng hồ điển hình bằng hệ thống đánh dấu, nằm trong khoảng 10-30ms. Trong những năm qua, độ chính xác được tăng lên theo nhiều bước. Ngày nay, có nhiều cách để đo khoảng thời gian trong nano giây thực tế. Tuy nhiên, các khung công tác thông thường vẫn trả về thời gian với độ chính xác chỉ khoảng 15ms.Đồng hồ bên trong của máy tính hiện đại chính xác đến mức nào?

Câu hỏi của tôi là, bước nào đã làm tăng độ chính xác, có thể đo lường bằng nano giây như thế nào và tại sao chúng ta vẫn thường nhận được độ chính xác nhỏ hơn 1 giây (ví dụ trong .NET).

(Tuyên bố từ chối trách nhiệm: Tôi cho rằng điều này không được hỏi trước đây, vì vậy tôi đoán tôi đã bỏ lỡ câu hỏi này khi tôi tìm kiếm. Vui lòng đóng và chỉ cho tôi câu hỏi trong trường hợp đó, cảm ơn. và không phải trên bất kỳ trang SOFU nào khác. Tôi hiểu sự khác biệt giữa độ chính xác và độ chính xác.)

Trả lời

20

Nó thực sự là một tính năng của lịch sử PC. IBM-PC ban đầu đã sử dụng chip gọi là Đồng hồ thời gian thực đã được sao lưu pin (Bạn có nhớ cần phải thay pin trên các thiết bị này không?) Các máy này hoạt động khi máy được tắt nguồn và giữ thời gian. Tần số này là 32.768 kHz (2^15 chu kỳ/giây) giúp dễ dàng tính thời gian trên hệ thống 16 bit. Đồng hồ thời gian thực này sau đó được ghi vào CMOS có sẵn thông qua một hệ thống ngắt trong các hệ điều hành cũ.

Một tiêu chuẩn mới hơn là ra từ Microsoft và Intel gọi là High Precision Event hẹn giờ đó xác định một tốc độ đồng hồ của 10MHz http://www.intel.com/hardwaredesign/hpetspec_1.pdf kiến ​​trúc PC Thậm chí mới thực hiện việc này và đặt nó trên bộ điều khiển Northbridge và HPET thể tun tại 100MHz hoặc thậm chí lớn hơn. Tại 10Mhz, chúng tôi có thể có độ phân giải 100 nano giây và ở 100MHz, chúng tôi có thể nhận được độ phân giải 10 nano giây.

Các hệ điều hành sau đây được biết đến không để có thể sử dụng HPET: Windows XP, Windows Server 2003, và phiên bản Windows trước đó, phiên bản Linux cũ

Các hệ điều hành sau được biết là có thể sử dụng HPET: Windows Vista, Windows 2008, Windows 7, x86 dựa trên các phiên bản của Mac OS X, hệ điều hành Linux sử dụng hạt nhân 2.6 và FreeBSD.

Với một hạt nhân Linux, bạn cần có phiên bản mới hơn "rtc-cmos" điều khiển thiết bị đồng hồ phần cứng chứ không phải là bản gốc "rtc" tài xế

Tất cả những gì đã nói làm thế nào để chúng ta truy cập vào độ phân giải phụ này? Tôi có thể cắt và dán từ các bài báo ngăn xếp trước đó, nhưng không - Chỉ cần tìm kiếm HPET và bạn sẽ tìm thấy câu trả lời về cách để có được các bộ định thời tốt hơn làm việc

+0

http://en.wikipedia.org/wiki/High_Precision_Event_Timer#Problems Rõ ràng một số hiện thực của HPET trớ trêu thay có vấn đề về độ chính xác, do đọc chậm hoặc trôi dạt, trong số các vấn đề khác. Vẫn nên sử dụng tốt trong hầu hết các trường hợp, đặc biệt là để phát lại/đồng bộ hóa phương tiện (vì đó là ý nghĩa ban đầu của nó). – Alex

1

Tôi đã đọc một bài đăng trên blog về MSDN hôm nay, read it here, nó bao gồm chủ đề khá tốt. Nó có một sự nhấn mạnh về DateTime của C# nhưng nó phổ dụng.

+0

Tôi chỉ đọc tương tự. Nó đặt ra câu hỏi, vì Eric đã không đi vào chi tiết. Bài viết của ông chỉ là về những điều cơ bản. – mafu

+0

@mafutrct :) Thời gian đo không phải là một khoa học chính xác, bởi vì thời gian là gì? Thời gian được định nghĩa là khoảng thời gian xảy ra sự kiện. Đồng hồ nguyên tử sử dụng một tiêu chuẩn tần số cộng hưởng nguyên tử làm yếu tố chấm công của nó làm cho nó rất chính xác. Nhưng máy tính không thể sử dụng các phép đo chính xác như vậy để sử dụng các phương pháp khác kém chính xác hơn. Đây là cách, theo thời gian, đồng hồ trở nên không đồng bộ. – Chris

+0

Vâng, nhưng điều đó không hoàn toàn trả lời câu hỏi. Máy tính có thể cung cấp độ chính xác ns cho các dấu thời gian, vì vậy cần có cách để cải thiện độ chính xác của ms mà chúng ta thường nhận được. Ngoài ra, tôi muốn biết về cách thức chính xác ns này đã được (đôi khi) đạt được. – mafu

Các vấn đề liên quan