2020 adalah tahun yang penting untuk Unix: sistem pengendalian asal telah berusia 50 tahun pada awal tahun. Masa Unix, juga dikenali sebagai "tarikh zaman", ialah bilangan saat yang telah berlalu sejak 1 Januari 1970. Tetapi apakah kebimbangan pembangun kernel mengenai ulang tahun ke-50 Unix?

Walaupun beberapa perkembangan awal Unix mendahului permulaan rasmi "era"nya, 1 Januari 1970, kekal sebagai titik sifar dalam masa POSIX. Oleh itu, dengan bermulanya 1 Januari 2020, platform secara rasminya berusia 50 tahun.
Masa Unix berbanding masa manusia
Dari segi masa manusia, 50 tahun adalah masa yang lama. Dari segi masa Unix, 50 tahun bukanlah sesuatu yang istimewa, dan 43 tahun tidak kurang pentingnya. Sistem Unix (termasuk Linux) menyimpan nilai tarikh dan masa sebagai bilangan saat berlalu sejak 1970-01-01 00:00:00 UTC, ditulis dalam 32 bit. Untuk menentukan berapa saat telah berlalu sejak itu, dan oleh itu nilai masa Unix semasa, anda boleh menjalankan arahan:
$ tarikh +%s
1576883876
Argumen %s kepada arahan tarikh menyebabkan tarikh dan masa semasa dipaparkan sebagai bilangan saat sejak 1970-01-01.

Apakah tarikh maksimum yang boleh disimpan oleh sistem? Unix?
Untuk memahami berapa banyak masa yang boleh disimpan oleh sistem Unix, anda perlu menganggarkan kapasiti medan 32-bit. Ini boleh dikira seperti berikut:
$ echo '2^32' | bc
4294967296
Walau bagaimanapun, oleh kerana Unix membenarkan nombor negatif disimpan, satu bit dikhaskan untuk tanda, dengan itu mengurangkan nilai masa kepada:
$ echo '2^31' | bc
2147483648
Dan oleh kerana penomboran Unix bermula pada 0, ini bermakna kita mempunyai 2,147,483,648 nilai, tetapi yang terbesar ialah 2,147,483,647—nilai tarikh dan masa Unix tidak boleh melebihi nombor ini. Sama seperti odometer kereta tidak boleh menunjukkan lebih daripada 999,999 kilometer—tambah 1 dan nilai diset semula kepada sifar.
Berapa lama setahun dalam saat?
Bilangan saat dalam setahun boleh dikira seperti berikut:
$ expr 24 * 60 * 60 * 365
31536000
Dalam tahun lompat, satu hari lagi ditambah:
$ expr 24 * 60 * 60 * 366
31622400

Bagaimanakah Unix memaparkan hari lahirnya yang ke-50?
Pada 1 Januari 2020, pada 12:00 AM, masanya ialah 1577836800. Pengiraan agak rumit kerana tahun lompat mesti diambil kira. Sejak awal era Unix, terdapat 12 tahun seperti itu, bermula pada 1972 dan berakhir pada 2016. Ini bermakna 38 tahun biasa telah berlalu.
Inilah rupa arahan expr untuk mengira saat sepanjang 50 tahun yang lalu:
$expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Atau seperti ini, dengan mengambil kira pengiraan yang dijalankan sebelum ini:
$expr 31536000 * 38 + 31622400 * 12
1577836800
Kaedah rakaman masa ini menjadikan sistem Unix kebal terhadap masalah Y2K, yang menyebabkan orang ramai bimbang pada akhir 1999 bahawa peralihan Y2K akan mendatangkan malapetaka pada sistem komputer. Masalahnya ternyata jauh lebih sedikit daripada yang dijangkakan. Malah, hanya aplikasi yang merekodkan tahun dalam format dua digit mengalami peralihan tarikh. Ramai pembangun mengambil langkah tambahan untuk memastikan aplikasi mereka tidak terjejas oleh masalah Y2000K.
Bilakah masanya Adakah Unix akan menghadapi masalah?
Sistem Unix akan menghadapi cabaran yang sama tidak lebih awal daripada 2038, apabila tarikh yang disimpan dalam format yang diterangkan di atas akan melebihi ruang 32-bit. Itu masih 18 tahun lagi, tetapi pembangun kernel sudah berusaha untuk mengelakkan kegagalan masa depan ini.
Masalah Tahun 2038 kadangkala dirujuk sebagai masalah Y2K38. Jika ia tidak diselesaikan pada hari Selasa, 19 Januari 2038, sistem selepas tarikh itu mungkin menganggap ia adalah 1901. Satu cara untuk menyelesaikan masalah ini ialah menukar kepada perwakilan 64-bit maklumat tarikh dan masa. Sesetengah percaya ini akan menjadi lebih sukar daripada yang kelihatan.
Walau apa pun, masih terlalu awal untuk panik. Apa yang benar-benar penting hari ini ialah ulang tahun ke-50 sistem Unix, yang diiktiraf sebagai beberapa sistem pengendalian yang paling penting dalam sejarah.
Sumber: 3dnews.ru
