Sự cố năm 2038
![](http://upload.wikimedia.org/wikipedia/commons/e/e9/Year_2038_problem.gif)
Sự cố máy tính năm 2038 (còn gọi là Y2038[1], Y2K38, hoặc Epochalypse[2][3]) là một lỗi của việc định dạng thời gian trong các hệ thống máy tính với mốc thời gian được dự đoán là sau 03:14:07 giờ UTC ngày 19 tháng 1 năm 2038.
Nguyên nhân
Nhiều hệ thống máy tính đo ngày giờ bằng thời gian Unix, một tiêu chuẩn quốc tế cho sự định thời gian điện tử. Thời gian Unix được định nghĩa là số giây đã trôi qua kể từ 00:00:00 giờ UTC vào ngày 1 tháng 1 năm 1970 (mốc thời gian này được chọn ngẫu nhiên), đã tạo nên thời kì Unix.
Thời gian Unix được mã hóa như một số nguyên 32-bit có dấu (signed), một dạng dữ liệu được cấu tạo bởi 32 chữ số nhị phân (bit) cho phép thể hiện một giá trị nguyên, với khái niệm 'signed' nghĩa là 1 bit đã được dùng để biểu diễn dấu (+/–). Như vậy, một số nguyên 32-bit signed chỉ có thể biểu diễn số nguyên từ -() đến . Hệ quả là, nếu một số nguyên thuộc dạng 32-bit signed được dùng để lưu trữ thời gian Unix, thời gian muộn nhất nó có thể lưu trữ là (2.147.483.647) giây sau mốc Unix, có nghĩa là 03:14:07 thứ Ba, ngày 19 tháng 1 năm 2038[4]. Các hệ thống cố để tăng giá trị này thêm một giây lên giây sau mốc Unix (03:14:08) sẽ gây ra hiện tượng tràn số nguyên, việc này vô tình chỉnh sửa bit dùng để biểu diễn dấu và biến thành một số âm. Sự thay đổi này sẽ chuyển giá trị thành -() hay giây trước mốc Unix thay vì sau, các hệ thống sẽ thông dịch như 20:45:52 thứ Sáu, ngày 13 tháng 12 năm 1901. Từ đó, hệ thống sẽ tiếp tục đếm, hướng tới số 0 và tiếp tục lên số dương một lần nữa. Nếu hệ thống máy tính sử dụng hệ thống tính toán thời gian để chạy những tính năng quan trọng, sự cố này sẽ gây ra những lỗi nghiêm trọng.
Ảnh hưởng và phương pháp xử lí
Hệ thống máy tính sử dụng thời gian cho các phép tính quan trọng có thể gặp lỗi nghiêm trọng khi sự cố Y2038 không được xử lý. Một số các ứng dụng sử dụng các ngày trong tương lai đã gặp lỗi này. Các hệ thống dễ bị tấn công nhất là những hệ thống không được thường xuyên hoặc không bao giờ được cập nhật như các hệ thống kế thừa hoặc các hệ thống nhúng. Không có giải pháp chung nào cho sự cố này, mặc dù nhiều hệ thống hiện đại đã được nâng cấp để đếm thời gian Unix với các số nguyên 64-bit có dấu sẽ không tràn trong 292 tỷ năm.
Tham khảo
- ^ “Is the Year 2038 problem the new Y2K bug?”. the Guardian (bằng tiếng Anh). 17 tháng 12 năm 2014. Truy cập ngày 6 tháng 3 năm 2022.
- ^ “The end of an Era”. Linaro (bằng tiếng Anh). Bản gốc lưu trữ ngày 7 tháng 2 năm 2020. Truy cập ngày 6 tháng 3 năm 2022.
- ^ published, Paul Wagenseil (28 tháng 7 năm 2017). “Digital 'Epochalypse' Could Bring World to Grinding Halt”. Tom's Guide (bằng tiếng Anh). Truy cập ngày 6 tháng 3 năm 2022.
- ^ Spinellis, Diomidis (3 tháng 4 năm 2006). Code Quality: The Open Source Perspective (bằng tiếng Anh). Adobe Press. ISBN 978-0-7686-8512-1.