Timpul sistemului - System time
În informatică și programarea computerelor , timpul de sistem reprezintă noțiunea unui sistem informatic de trecere a timpului. În acest sens, timpul include și trecerea zilelor în calendar .
Timpul sistemului este măsurat de un ceas de sistem , care este de obicei implementat ca un număr simplu al numărului de căpușe care au transcurs de la o anumită dată de început arbitrară, numită epocă . De exemplu, sistemele compatibile Unix și POSIX codifică timpul sistemului („ Unix time ”) ca număr de secunde trecute de la începutul epocii Unix la 1 ianuarie 1970 00:00:00 UT , cu excepții pentru secundele bisective . Sistemele care implementează versiunile pe 32 de biți și 64 de biți ale Windows API , cum ar fi Windows 9x și Windows NT , furnizează ora sistemului atât ca SYSTEMTIME , reprezentat ca o lună / / oră minut / valoare an / zi / secundă / milisecunde , și FILETIME , reprezentate ca numărare a numărului de căpușe de 100 de nanosecunde de la 1 ianuarie 1601 00:00:00 UT așa cum se calculează în calendarul gregorian proleptic .
Ora sistemului poate fi convertită în timp calendaristic , care este o formă mai potrivită pentru înțelegerea umană. De exemplu, sistemul Unix timp de 1 000 000 000 de secunde de la începutul epocii se traduce în timpul calendaristic 09 septembrie 2001 01:46:40 UT . Subrutinele de bibliotecă care gestionează astfel de conversii se pot ocupa, de asemenea, de ajustări pentru fusurile orare , ora de vară (DST), secunde de salt și setările locale ale utilizatorului . Rutinele bibliotecii sunt, de asemenea, prevăzute, în general, pentru a converti orele calendaristice în timpii sistemului.
Alte măsurători de timp
Strâns legat de timpul sistemului este timpul procesului , care este un număr al timpului total al procesorului consumat de un proces de executare . Acesta poate fi împărțit în utilizator și sistem de timp CPU, reprezentând timpul petrecut de executare codul de utilizator și sistemul de nucleu de cod, respectiv. Timpii de proces reprezintă un număr de instrucțiuni ale procesorului sau cicluri de ceas și, în general, nu au nicio corelație directă cu timpul de perete .
Sistemele de fișiere țin evidența timpului în care fișierele sunt create, modificate și / sau accesate prin stocarea marcajelor de timp în blocul de control al fișierelor (sau inode ) al fiecărui fișier și director .
Istorie
Majoritatea computerelor personale din prima generație nu țineau evidența datelor și orelor. Acestea au inclus sisteme care rulează sistemul de operare CP / M , precum și primele modele de Apple II , BBC Micro și Commodore PET , printre altele. Add-on placi periferice , care a inclus în timp real ceas chips - uri , cu bord baterie de back-up au fost disponibile pentru IBM PC și XT , dar IBM a AT a fost prima disponibile pe scară largă PC - ul care a venit echipat cu hardware - ul data / ora construit în placa de baza . Înainte de disponibilitatea pe scară largă a rețelelor de calculatoare , majoritatea sistemelor de calculatoare personale care urmăreau timpul sistemului făceau acest lucru numai în raport cu ora locală și nu acordau alocații pentru diferite fusuri orare .
Cu tehnologia actuală, cele mai multe calculatoare moderne a ține evidența timpului civile locale, așa cum fac multe alte gospodării și dispozitive personale , cum ar fi VCR - uri , DVR - uri , receptoare de televiziune prin cablu , PDA - uri , pagere , telefoane mobile , faxuri , mașini de telefonici , aparate foto , camere video , aparate de aer condiționat centrale și cuptoare cu microunde .
Microcontrolerele care funcționează în cadrul sistemelor încorporate (cum ar fi Raspberry Pi , Arduino și alte sisteme similare ) nu au întotdeauna hardware intern pentru a ține evidența timpului. Multe astfel de sisteme de control funcționează fără cunoașterea timpului extern. Cei care necesită astfel de informații își inițializează timpul de bază la repornire obținând ora curentă de la o sursă externă, cum ar fi de la un server de timp sau de la un ceas extern, sau solicitând utilizatorului să introducă manual ora curentă.
Implementare
Ceasul de sistem este de obicei implementat ca un temporizator programabil care întrerupe periodic CPU, care apoi începe executarea unui temporizator de întrerupere de rutină de serviciu. Această rutină adaugă de obicei o bifă la ceasul sistemului (un contor simplu) și gestionează alte sarcini periodice de menaj ( preempțiune etc.) înainte de a reveni la sarcina pe care CPU o executa înainte de întrerupere.
Preluarea timpului sistemului
Următoarele tabele ilustrează metodele de recuperare a timpului sistemului în diferite sisteme de operare , limbaje de programare și aplicații . Valorile marcate cu (*) sunt dependente de sistem și pot diferi între implementări. Toate datele sunt date ca gregoriene sau calendarul gregorian proleptică datele.
Rețineți că rezoluția măsurării timpului unei implementări nu implică aceeași precizie a unor astfel de măsurători. De exemplu, un sistem ar putea returna ora curentă ca valoare măsurată în microsecunde, dar de fapt să fie capabil să discearnă căpușe de ceas individuale cu o frecvență de numai 100 Hz (10 ms).
Sisteme de operare
Sistem de operare | Comandă sau funcție | Rezoluţie | Epocă sau gamă |
---|---|---|---|
Android |
java.lang |
1 ms | 1 ianuarie 1970 |
BIOS ( IBM PC ) | INT 1Ah, AH = 00h | 54,9254 ms 18,2065 Hz |
Miezul nopții zilei curente |
INT 1Ah, AH = 02h | 1 s | Miezul nopții zilei curente | |
INT 1Ah, AH = 04h | 1 zi | 1 ianuarie 1980 - 31 decembrie 1999 sau 31 decembrie 2079 (dependent de sistem) | |
CP / M Plus | Bloc de control al sistemului: scb $ bază + 58h , Zile de la 1 ianuarie 1978 scb $ bază + 5Ah , oră (BCD) scb $ bază + 5Bh , minut (BCD) scb $ bază + 5Ch , al doilea (BCD) |
1 s | 1 ianuarie 1978 - septembrie 2067 |
Funcția BDOS 69 H > ( T_GET ): cuvânt , Zile începând cu o ianuarie 1978 byte , ora (BCD) octet , minut (BCD) octet , a doua (BCD) |
|||
DOS ( Microsoft ) |
C: \>DATA C: \>TIMP |
10 ms | 1 ianuarie 1980 - 31 decembrie 2099 |
INT 21h, AH = 2Ch TIMP SISTEM INT 21h, AH = 2Ah DATA SISTEMULUI |
|||
iOS ( Apple ) | CFAbsoluteTimeGetCurrent () | <1 ms | 1 ianuarie 2001 ± 10.000 de ani |
macOS | CFAbsoluteTimeGetCurrent () | <1 ms | 1 ianuarie 2001 ± 10.000 de ani |
OpenVMS | SYS $ GETTIM () | 100 ns | 17 noiembrie 1858 - 31 iulie 31.086 |
() | 1 μs | 1 ianuarie 1970 - 7 februarie 2106 | |
() | 1 ns | ||
z / OS | STCK | 2 −12 μs 244,14 ps |
1 ianuarie 1900 - 17 septembrie 2042 UT |
STCKE | 1 ianuarie 1900 până la 36.765 d.Hr. | ||
Unix , POSIX (vezi și funcțiile de dată și oră C ) |
$data ora () |
1 s | (*) 1 ianuarie 1970 - 19 ianuarie 2038 1 ianuarie 1970 până la 292.277.026.596 d.C. |
() | 1 μs | ||
() | 1 ns | ||
OS / 2 | DosGetDateTime () | 10 ms | 1 ianuarie 1980 - 31 decembrie 2079 |
Windows | GetSystemTime () | 1 ms | 1 ianuarie 1601 - 14 septembrie 30.828 |
GetSystemTimeAsFileTime () | 100 ns | ||
GetSystemTimePreciseAsFileTime () |
Limbaje de programare și aplicații
Limbă / aplicație | Funcție sau variabilă | Rezoluţie | Epocă sau gamă |
---|---|---|---|
Ada | Ada.Calendar.Clock | 100 μs până la 20 ms (*) |
1 ianuarie 1901 - 31 decembrie 2099 (*) |
AWK | sistime () | 1 s | (*) |
BAZIC , Adevărat BAZIC |
DATE , DATE $ TIME , TIME $ |
1 s | (*) |
Afaceri de bază | ZIUA , TIM | 0,1 s | (*) |
C (vezi funcțiile C de dată și oră ) | timp() | 1 s (*) | (*) |
C ++ |
std :: time () std :: chrono :: system_clock :: now () |
1 s (*) 1 ns (C ++ 11, dependent de sistemul de operare) |
(*) |
C # |
System.DateTime.Now System.DateTime.UtcNow |
100 ns | 1 ianuarie 0001 până la 31 decembrie 9999 |
CICS | ÎNTREBARE | 1 ms | 1 ianuarie 1900 |
COBOL | FUNCȚIA CURENT-DATA | 1 s | 1 ianuarie 1601 |
Lisp comun | (get-universal-time) | 1 s | 1 ianuarie 1900 |
Delphi ( Borland ) |
data și ora |
1 ms (virgulă mobilă) |
1 ianuarie 1900 |
Delphi ( Embarcadero Technologies ) |
System.SysUtils.Time | 1 ms | 0/0/0000 0: 0: 0: 000 până la 31/12/9999 23: 59: 59: 999 [sic] |
System.SysUtils.GetTime (alias pentru System.SysUtils.Time ) | |||
System.SysUtils.Date | 0/0/0000 0: 0: 0: 000 până la 31/12/9999 0: 0: 0: 000 [sic] | ||
System.DateUtils.Today | |||
System.DateUtils.Main | |||
System.DateUtils.Ieri | |||
System.SysUtils.Acum | 1 s | 0/0/0000 0: 0: 0: 000 până la 31/12/9999 23: 59: 59: 000 [sic] | |
System.SysUtils.DayOfWeek | 1 zi | 1 la 7 | |
System.SysUtils.CurrentYear | 1 an | (*) | |
Emacs Lisp | (ora curentă) | 1 μs (*) | 1 ianuarie 1970 |
Erlang | erlang: system_time () , os: system_time () | Depinde de sistemul de operare , de ex. Pe Linux 1ns | 1 ianuarie 1970 |
excela | Data() | ? | 0 ianuarie 1900 |
Fortran |
DATE_AND_TIME SYSTEM_CLOCK |
(*)
|
1 ianuarie 1970 |
CPU_TIME | 1 μs | ||
Merge | time.Now () | 1 ns | 1 ianuarie 0001 |
Haskell | Time.getClockTime | 1 ps (*) | 1 ianuarie 1970 (*) |
Data.Time.getCurrentTime | 1 ps (*) | 17 noiembrie 1858 (*) | |
Java |
java.util.Date () System.currentTimeMillis () |
1 ms | 1 ianuarie 1970 |
System.nanoTime () | 1 ns | arbitrar | |
Clock.systemUTC () | 1 ns | arbitrar | |
JavaScript , TypeScript |
(data nouă ()). getTime () Date.now () |
1 ms | 1 ianuarie 1970 |
Matlab | acum | 1 s | 0 ianuarie 0000 |
OREION | $ H ( prescurtare pentru $ HOROLOG ) | 1 s | 31 decembrie 1840 |
LabVIEW | Bifați numărul | 1 ms | 00: 00: 00.000 1 ianuarie 1904 |
Obțineți data / ora în secunde | 1 ms | 00: 00: 00.000 1 ianuarie 1904 | |
Obiectiv-C | [NSDate timeIntervalSinceReferenceDate] | <1 ms | 1 ianuarie 2001 ± 10.000 de ani |
OCaml | Unix.time () | 1 s | 1 ianuarie 1970 |
Unix.gettimeofday () | 1 μs | ||
Extins Pascal | GetTimeStamp () | 1 s | (*) |
Turbo Pascal |
GetTime () GetDate () |
10 ms | (*) |
Perl | timp() | 1 s | 1 ianuarie 1970 |
Time :: HiRes :: time | 1 μs | ||
PHP |
time () mktime () |
1 s | 1 ianuarie 1970 |
microtime () | 1 μs | ||
PureBasic | Data() | 1 s | 1 ianuarie 1970 - 19 ianuarie 2038 |
Piton | datetime.now (). timestamp () | 1 μs (*) | 1 ianuarie 1970 |
RPG |
CURENT (DATE) , % DATE CURENT (TIME) , % TIME |
1 s | 1 ianuarie 0001 până la 31 decembrie 9999 |
CURENT (TIMESTAMP) , % TIMESTAMP | 1 μs | ||
Rubin | Time.now () | 1 μs (*) | 1 ianuarie 1970 (până la 19 ianuarie 2038 înainte de Ruby 1.9.2) |
Convorbire scurtă |
Time microsecondClock (VisualWorks) |
1 s (ANSI) 1 μs (VisualWorks) 1 s (Squeak) |
1 ianuarie 1901 (*) |
Timp total Secunde ( Scârțâit ) |
|||
SystemClock bifează AcumSinceSystemClockEpoch (Chronos) |
|||
SQL |
CURDATE () sau CURTENT DATA CURTIME () sau CURRENT TIME GETDATE () ACUM () sau CURENT TIMESTAMP SYSDATE () |
3 ms | 1 ianuarie 1753 - 31 decembrie 9999 (*) |
60 s | 1 ianuarie 1900 - 6 iunie 2079 | ||
ML standard | Time.now () | 1 μs (*) | 1 ianuarie 1970 (*) |
TCL | [secunde de ceas] | 1 s | 1 ianuarie 1970 |
[ceas milisecunde] | 1 ms | ||
[microsecunde de ceas] | 1 μs | ||
[clicuri de ceas] | 1 μs (*) | (*) | |
Windows PowerShell | Get-Date | 100 ns | 1 ianuarie 0001 până la 31 decembrie 9999 |
[DateTime] :: Acum [DateTime] :: UtcNow |
|||
Visual Basic .NET |
System.DateTime.Now System.DateTime.UtcNow |
100 ns | 1 ianuarie 0001 până la 31 decembrie 9999 |
Vezi si
- Calendar
- Timpul de calcul
- DATE (comandă)
- Epocă
- Ora GPS
- Clipită
- Network Time Protocol
- Proces
- data
- TIME (comandă)
- timp.h
- timp_t
- Bug-uri de formatare și stocare a timpului
- Protocol TIME
- Partajarea timpului
- Standard de timp
- Temporizator
- Timestamp-ul
- Comanda data Unix
- Unix time
- Comanda Unix time
- Ora ceasului de perete
- Problema anului 2000
- Problema anului 2038
Note
- ^ a b Documentația pentru dezvoltatori Apple nu este clară cu privire la precizia și intervalul CFAbsoluteTime / CFTimeInterval, cu excepția documentației CFRunLoopTimerCreate care se referă la precizie „cel mult sub-milisecundă”. Cu toate acestea, tipul similar NSTimeInterval pare a fi interschimbabil și are precizia și intervalul listate.
- ^ A b c d biblioteca C standard nu specifică orice rezoluție specifică, epocă, interval sau datatype pentru valorile timpului de sistem . Biblioteca C ++ cuprinde biblioteca C, deci folosește aceeași implementare de timp a sistemului ca C.
Referințe
linkuri externe
- Date critice și semnificative , JR Stockton (recuperat 3 decembrie 2015)
- Biblioteca Boost Date / Time (C ++)
- Biblioteca Boost Chrono (C ++)
- Biblioteca Chronos Date / Time (Smalltalk)
- Joda Time , The Joda Date / Time Library (Java)
- Proiectul Perl DateTime (Perl)
- data: Ruby Standard Library Documentation (Ruby)