Unix menyimpan waktu sebagai jumlah detik sejak 1 Januari 1970. Dan itu berarti Linux juga. Kami menjelaskan sistem yang tampaknya aneh ini, dan mengapa Kiamat dijadwalkan 2038.
Epoch Unix pertama
Goethe ( 1749-1832. ) dinyatakan "setiap detik adalah nilai tak terbatas." Itu benar, kita masing-masing hanya memiliki beberapa detik di sini di Planet Bumi, dan kita tidak tahu kapan kedua terakhir kita akan. Tapi kita tahu ulang tahun kita, dan ketika hitungan mundur fana kita dimulai.
Unix. -Seperti itu Ratu Inggris. -Memiliki dua ulang tahun. Atau, lebih akurat, ada dua kesempatan terpisah di mana ia mulai menghitung detik-detik keberadaannya. Pertama kali UNIX mulai menghitung dari tengah malam 1 Januari 1971.
Kita dapat melihat ini dengan cukup jelas dengan meninjau bagian dari edisi pertama
Manual Unix Programmer
, tanggal 3 November 1971. Gulir ke bawah ke halaman 13 dari bagian itu, dan Anda akan melihat deskripsi (sekarang mati)
waktu
memerintah. Kami diberitahu bahwa "
waktu
Mengembalikan waktu sejak 00:00:00, 1 Januari 1971, diukur pada enam puluh satu detik. "
Kalender dan sistem waktu mengukur waktu mulai dari beberapa titik signifikan di masa lalu, seperti peristiwa kosmologis, pendirian kekaisaran, atau keberhasilan revolusi. Dalam sistem operasi, waktu dan tanggal yang sewenang-wenang dipilih sebagai titik dari mana penghitungan dimulai. Ini adalah masa untuk sistem operasi itu.
Unix menggunakan bilangan bulat 32-bit yang tidak ditandatangani untuk menahan hitungan ke-60 detik sejak zaman. Ini adalah variabel numerik yang mampu menahan nilai dalam kisaran 0 hingga 4.294.967.295 (2 32. -1). Itu terdengar sangat banyak. Tetapi konter bertambah 60 kali per detik dan, sebagai manual programmer menunjukkan, "pengguna yang berpikiran kronologis akan mencatat bahwa 2 ** 32 enam puluh satu detik hanya sekitar 2,5 tahun."
Dengan tingkat konsumsi 60 angka per detik, penghitung akan mencapai nilai maksimumnya pada 8 April 1973, sedikit kurang dari 829 hari kemudian.
Zaman unix kedua
Tak perlu dikatakan, ini ditindaklanjuti dengan cepat. Integer yang tidak ditandatangani diganti dengan 32-bit tertanda bilangan bulat. Mungkin tampak pilihan yang mengejutkan karena bilangan bulat yang ditandatangani mampu menampung sejumlah kecil nilai positif-2,147.483.647 (2 31. ) -Ini integer yang tidak ditandatangani. Namun, kecepatan konsumsi juga berkurang dari 60 detik menjadi dua detik.
Butuh waktu lebih lama untuk dihitung dari 0 hingga 2.147.483.647 menghitung satu angka per detik daripada dihitung dari 0 hingga 4.294.967.295 pada 60 jumlah per detik. Dan dengan margin. Skema baru tidak akan mencapai nilai maksimumnya selama lebih dari 68 tahun. Ini tampak sejauh ini di masa depan bahwa zaman itu bahkan diatur ulang ke titik waktu sebelumnya. Epoch baru diatur ke tengah malam pada 1 Januari 1970, UTC.
Saat itu 68 tahun di masa depan sekarang tampak dekat. Menjadi tepat, kami akan mencapainya pada 03:14:07 UTC pada 19 Januari 2038.
Skema sederhana namun efektif
Menggunakan integer tunggal untuk menghitung jumlah langkah waktu dari titik waktu tertentu adalah cara yang efisien untuk menyimpan waktu. Anda tidak perlu menyimpan struktur yang rumit tahun, bulan, hari, dan waktu. Dan itu adalah negara, lokal, dan zona waktu independen.
Mengalikan angka dalam bilangan bulat berdasarkan ukuran langkah-dalam kasus ini, satu detik memberi Anda waktu sejak zaman, dan mengkonversi dari itu ke format spesifik lokal dengan penyesuaian zona waktu relatif sepele.
Itu memang memberi Anda batas atas built-in. Cepat atau lambat Anda akan mencapai nilai maksimum yang dapat Anda tahan dalam jenis variabel pilihan Anda. Pada saat penulisan artikel ini, tahun 2038 hanya berjarak 17 tahun.
Ini mirip tetapi sedikit berbeda dengan masalah dengan sistem komputer awal dari abad terakhir menggunakan dua digit untuk menyimpan tahun. Ketika kalender berguling ke tahun baru dan abad baru tahun 2000, akan menjadi nilai tahun yang disimpan sebagai "00" diartikan pada tahun 2000, atau 1900?
Mengoreksi apa yang disebut " Millenium bug. "Diperkirakan memiliki biaya A.S. Sendekan lebih dari $ 100 miliar, dan telah mengambil ribuan orang-tahun untuk mengatasi secara global. Ada beberapa masalah dalam beberapa hari pertama 2000, tetapi tidak seperti bencana yang akan terjadi jika bug telah diabaikan.
Kiamat ditunda
Karena Linux dan semua sistem operasi unix-lookayang berbagi masalah yang sama, tahun 2038 masalah telah ditanggapi dengan serius selama beberapa waktu, dengan perbaikan ditambahkan ke kernel sejak 2014. Ini sedang berlangsung dengan perbaikan ditambahkan ke kernel Baru-baru ini dengan Januari 2020 untuk mengatasi masalah integer 32-bit.
Tentu saja, komputer Linux yang berfungsi mengandung lebih dari sekadar kernel. Semua utilitas operasi dan aplikasi userland yang memanfaatkan waktu sistem melalui berbagai API dan antarmuka perlu dimodifikasi untuk mengharapkan nilai 64-bit. Sistem file juga harus diperbarui untuk menerima cap waktu 64-bit untuk file dan direktori.
Linux ada di mana-mana . Kegagalan bencana di Linux berarti kegagalan dalam segala macam sistem berbasis komputer. Linux menjalankan sebagian besar web, sebagian besar cloud publik, dan bahkan pesawat ruang angkasa. Ini menjalankan rumah pintar dan mobil self-driving. Smartphone memiliki kernel yang berasal dari Unix di hati mereka. Praktis apa-apa seperti firewall, router, dan modem broadband - yang telah tertanam sistem operasi di dalamnya di Linux.
Sangat menyenangkan bahwa Linux dengan baik dalam perjalanannya untuk diperbaiki. Kami akan menginstal upgrade dan itu akan terjadi. Tetapi apa peluang bahwa semua perangkat itu akan ditambal dan diperbarui? Banyak dari mereka bahkan tidak akan melayani saat itu sehingga akan menjadi titik moot, tetapi beberapa masih akan menghubungkan. Terselip dalam ceruk hitam dan berdebu di ruang server dan lemari rak mungkin, tetapi mereka akan berada di sana, bekerja dengan tenang, sementara detik-detik berdetak sampai sekitar seperempat lalu tiga pada 1938.
Tetapi perangkat seperti itu harus menjadi minoritas kecil. Sebagian besar sistem akan melihat waktu krisis datang dan pergi tanpa insiden. Sekali lagi, kita akan bisa bersantai. Setidaknya, hingga tahun 2486 mendekati, membawa masalah yang sama persis untuk sistem yang menggunakan bilangan bulat berbasis 64-bit untuk menghitung waktu sejak zaman.
Perintah tanggal
Kita dapat
menggunakan
tanggal
memerintah
Untuk memverifikasi Linux dan derivatif UNIX lainnya masih menggunakan skema asli yang sederhana untuk menyimpan nilai waktu sebagai jumlah detik sejak zaman.
Menggunakan
tanggal
Perintah tanpa parameter apa pun mencetak tanggal dan waktu saat ini ke jendela terminal. Anda juga ditunjukkan zona waktu bahwa waktu disesuaikan. EDT adalah waktu siang hari timur, yang berarti komputer uji kami berada di zona waktu timur, dan
Sabin Siang Hari
berlaku. Ketika waktu penghematan siang hari tidak berlaku, zona waktu timur menggunakan waktu standar Timur.
Untuk melihat nilai integer yang mendasarinya, kita dapat menggunakan string format tampilan. Format string memiliki tanda plus "+" sebagai karakter pertama mereka. Token format "% S" berarti "menunjukkan detik sejak zaman."
Jika kita mengambil nilai detik dikembalikan oleh
tanggal
dan memberi makan kembali ke
tanggal
perintah dengan
-D
(Waktu tampilan yang dijelaskan oleh string) Opsi, itu akan mengubahnya kembali ke tanggal dan waktu reguler.
Tanggal
Tanggal +% S
Tanggal -d @ 1633183955
Kami dapat menunjukkan bahwa nilai integer benar-benar mewakili waktu dengan menampilkan jumlah detik, tidur selama 10 detik, dan menunjukkan nomor detik baru. Dua nilai integer akan berbeda dengan tepat 10.
date +% s & amp; & amp; tidur 10 & amp; & amp; date +% s
Kami telah melihat bahwa kita dapat melewati sejumlah detik ke
tanggal
perintah dan mengkonversi ke waktu dan tanggal bagi kita. Jika kita melakukan hal itu dengan menggunakan nol detik sebagai input nilai kita,
tanggal
seharusnya untuk mencetak tanggal dan waktu dari zaman Unix.
TZ = 'UTC' tanggal -d @ 0 + '% x% R'
Perintah rusak seperti ini:
-
TZ =’UTC’
: Zaman ini didirikan menggunakan Coordinated Universal Time (UTC, jadi kami perlu memberitahu
tanggaluntuk menggunakan UTC. The “TZ =” membangun set zona waktu yang efektif untuk perintah saat ini saja. -
tanggal
: NS
tanggalmemerintah. -
-D
@ 0
: Kami memberitahu
tanggaluntuk menggunakan string sebagai masukan, bukan waktunya “sekarang.” String kita lulus dalam memegang nol detik. -
+’% X% R’
: Format string output. The “% x” format token memberitahu
tanggaluntuk menampilkan tahun, bulan, dan hari. The “% R” format menginstruksikan tandatanggalmenggunakan format 24-jam untuk jam dan menit. Karena ada ruang dalam format string, kami membungkus seluruh string dalam tanda kutip tunggal”'”Sehingga string diperlakukan sebagai item tunggal.
Seperti yang diharapkan, output adalah tengah malam pada 1 Januari 1970.
TERKAIT: Cara Menampilkan Tanggal dan Waktu di Terminal Linux (dan Gunakan Script Ini Di Bash)
Sampai Lain waktu
Sederhana sering terbaik. Menghitung detik dari datum tetap adalah cara paling sederhana untuk menandai berlalunya waktu. Tapi perjalanan waktu membawa tantangan baru. Dengan perbaikan yang telah dimasukkan ke dalam tempat, sepertinya kita melalui jelas sedang untuk tahun 2486.
Saya pikir aman untuk mengatakan kami akan khawatir tentang itu sedikit lebih dekat ke waktu.