A computer only knows how to work with digital signals. Imagine a small device (called anÂ Oscillator) where if you pass an electrical signal into it, it sends out pulses of electrical signals at constant intervals. If these intervals are small enough, we can approximate the passage of time versus the number of signal pulses.
Now imagine that like all computer components, the Oscillator is mass produced cheaply and never perfect. So even though it’s supposed to send 100 pulses every second, my one actually only sends 90 pulses per second due to a manufacturing discrepancy, so my computer clock ends up running slow (when it counts 100 pulses, more than 1 second of real time has passed). In this case I can’t trust the passage of time on my own machine. I can solve this problem by asking the trusted clock twice. After I step the clock the first time, if I wait what I think is 1 second and ask the same trusted time source what the time is I’ll be able to figure out that I am 1/10 of a second slow, or, myÂ OFFSETÂ orÂ DRIFTÂ is 0.01 seconds. From there I can figure out that I need to count 10 fewer pulses to get to one second. If I now “remember” that I need to count 10 pulses less and step the clock again… Great, I have now compensated for my Oscillator defect and my desktop clock runs at the correct speed.
Now imagine that like all computer components, the Oscillator behaves differently under different conditions even though we don’t want it to. Maybe if it gets hotter it maybe it sends pulses faster, and if it gets colder it sends pulses slower. Or maybe due to more manufacturing faults that even though it is supposed to be a constant pulse, it’s not really.
I can now keep time accurately, but I have to be inÂ constantÂ communication with the trusted clock, and make constant frequency adjustments. Since I know my Oscillator can lose up to 1/10 of a second every second, that means my computer clock can run freely (orÂ FREERUN) for 10 of my seconds before I could be 1 second out. Lets say I don’t care about seconds, only minutes, so I can free run for at most 600 seconds (or 10 minutes) before I would have to assume my clock could be 1 minute inaccurate. Maybe I do updates once every 10 seconds then, that is enough to keep me happy.