Timpul sistemului - System time

Comanda data Unix

Î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

13 octombrie 2021 20:29:48 UTC

Ora sistemului Wikipedia când ultima pagină a fost generată.
Curățați această pagină și actualizați acest contor.

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 .System.currentTimeMillis () 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
gettimeofday() 1 μs 1 ianuarie 1970 - 7 februarie 2106
clock_gettime() 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.
gettimeofday() 1 μs
clock_gettime() 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

Note

  1. ^ 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.
  2. ^ 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