Tietokoneen kello
Tietokoneet ja monet muuta elektroniikkalaitteet sisältävät kellon, joka pitää kirjaa ajan kulusta. Tietokoneen muista piireistä erillisestä, kellonaikaa ylläpitävästä laitteistosta käytetään myös nimitystä reaaliaikakello (engl. real-time clock, RTC) erotuksena erilaisista kellosignaalia tuottavista laitteista, joita käytetään piirien ja väylien tahdistukseen.
Tietokoneet käyttävät reaaliajan ajoituksia moniin tarkoituksiin. Esimerkiksi hiiren kaksoisnapsautuksen väli on Windowsissa oletuksena korkeintaan 500 millisekuntia, joten käyttöjärjestelmän ikkunoinnin pitää pitää kirjaa jokaisen tapahtuman aikaleimasta. Aikaleimoja käytetään esimerkiksi myös verkkoliikenteessä havaitsemaan menivätkö verkkopaketit perille tietyn ajan sisällä. Varsinaista "seinäkelloaikaa" tai reaaliaikaa (wall-clock time) tarvitaan esimerkiksi tiedostojen aikaleimojen tallentamisessa, tehtävien ajoituksessa, kalentereissa ja salatussa verkkoliikenteessä, jossa on tunnettava salauksen sertifikaattien voimassaoloaika.
Reaaliaikakello
muokkaaReaaliaikakello pitää aikaa tyypillisesti kideoskillaattorilla, joka värähtelee esimerkiksi 32,768 kHz:n taajuudella. Tällainen kello heittää tyypillisesti korkeintaan muutaman sekunnin vuorokaudessa. Värähtelytaajuudella päivitetään laskuria, joka laskettuaan 32 768 pulssia lisää sekunnin kellon aikaan. Toimiakseen reaaliaikakello tarvitsee virtaa, vaikka sen virrankulutus on vähäinen. Tyypillisesti virranlähteenä on paristo. Tällöin sanotaan koneessa olevan paristovarmennettu kello. Jossain laitteissa on myös käytetty suuren kapasiteetin konsensaattoreita.[1][2]
PC-tietokoneiden RTC-reaaliaikakellon toteutus periytyy IBM PC:n ajalta, joka käytti Motorola 146818 -kellopiiriä. Tämä piiri pitää yllä kellonaikaa BCD-muodossa, joka pystyy yhden sekunnin tarkkuuteen ja tuottamaan IRQ 8 -kellokeskeytyksiä taajuuksilla 2–8192 hertsiä tai herätyksen.[3] IBM PC/AT lisäsi paristovarmennetun kellonajan.[4]
Nykyaikainen laitteisto pitää tarkempaa aikaa, sillä uudet suorittimet sisältävät sisäisen kellonaikalaskurin Time-Stamp Counter (TSC). Time-Stamp Counter on kaikissa Intelin prosessoreissa Pentiumista lähtien. Suoritin lisää sen arvoa yhdellä joka kellosyklillä. Tämä rekisteri voidaan lukea yhdellä käskyllä (RDTSC) suorittimen EDX:EAX-rekistereihin.[5] Jollei tätä ole käytössä voidaan käyttää emolevyn High Precision Event Timer (HPET) tai ACPI Power Management Timer (PM timer) -laskureita.[6]
HPET lisättiin PC-spesifikaatioihin 2004. Sen tarkoitus oli korvata vanhentuneeksi julistetut RTC ja Intel 8253/8254 Programmable Interval Timer (PIT) -piirit.[7] PM timer taas liittyy ACPI-arkkitehtuuriin.
Käyttöjärjestelmän aika
muokkaaTarkempiin ajoituksiin käyttöjärjestelmän on toteuttava oma kellonsa, jota päivitetään kellokeskeytyksillä. MS-DOS lukee kellonajan reaaliaikakellosta vain kerran koneen käynnistyessä, ja tämän jälkeen käyttöjärjestelmä pitää aikaa itse yllä.[8] Linux-ympäristössä on olemassa hwclock-ohjelma, jolla voi lukea tai tallentaa RTC-kellon ajan käyttöjärjestelmän ajasta.[9]
Unix-aika on eräs useissa käyttöjärjestelmissä käytettävä tapa kuvata aikaa. Se on yksinkertaisesti sekunteja ajanhetkestä 1970-01-01T00:00:00Z.
Hajautetuissa järjestelmissä (ja mm. Internetissä) olevien laitteiden kellot pyritään pitämään samassa ajassa. Yleinen keino tähän on NTP-protokolla.
Lähteet
muokkaa- ↑ admin: Real Time Clocks in Microcomputer Systems Basic Electronics Tutorials. 28.12.2016. Viitattu 21.1.2024. (englanniksi)
- ↑ https://www.allaboutcircuits.com/technical-articles/introduction-to-microcontroller-timers-real-time-clocks/
- ↑ phoxis: An overview of the PC Real Time Clock (RTC) Phoxis. 2.1.2016. Viitattu 21.1.2024. (englanniksi)
- ↑ How was the real-time clock implemented in the original IBM PC and PC/XT? Retrocomputing Stack Exchange. Viitattu 21.1.2024. (englanniksi)
- ↑ Intel® 64 and IA-32 Architectures Software Developer’s Manual § RDTSC—Read Time-Stamp Counter, pg. Vol. 2B 4-545[1]
- ↑ stevewhims: Acquiring high-resolution time stamps - Win32 apps learn.microsoft.com. 18.4.2023. Viitattu 21.1.2024. (englanti)
- ↑ https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/software-developers-hpet-spec-1-0a.pdf
- ↑ How was the real-time clock implemented in the original IBM PC and PC/XT? Retrocomputing Stack Exchange. Viitattu 21.1.2024. (englanniksi)
- ↑ HWCLOCK(8), util-linux 2.37.2, 2021-06-02