Tại sao thời gian Unix bắt đầu từ 1970-01-01?


Câu trả lời:


28

Tôi sẽ không biết câu trả lời ngoại trừ google đã ở đó cho tôi:

Từ đây (cần đăng ký miễn phí):

Linux đang theo truyền thống được thiết lập bởi Unix về thời gian đếm bằng giây kể từ "sinh nhật" chính thức của nó - được gọi là "kỷ nguyên" trong thuật ngữ điện toán - tức là ngày 1 tháng 1 năm 1970.

Một lời giải thích đầy đủ hơn có thể được tìm thấy trong bài báo Wired Wired này . Nó giải thích rằng các kỹ sư Unix ban đầu đã chọn ngày đó một cách tùy tiện, bởi vì họ cần thiết lập một ngày thống nhất cho thời gian bắt đầu và ngày đầu năm mới 1970 có vẻ thuận tiện nhất.


5

Unix không sinh năm 1970.

Kỷ nguyên Unix là nửa đêm ngày 1 tháng 1 năm 1970. Điều quan trọng cần nhớ là đây không phải là "sinh nhật" của Unix - phiên bản thô của hệ điều hành đã xuất hiện vào những năm 1960. Thay vào đó, ngày được lập trình vào hệ thống vào khoảng đầu thập niên 70 chỉ vì nó thuận tiện để làm điều đó, theo Dennis Ritchie, một trong những kỹ sư làm việc trên Unix tại Bell Labs khi mới thành lập.


Thuận tiện trở lại sau đó, bất tiện cho các nhà phát triển trên toàn thế giới kể từ đó.
Chris Halcrow

3
@ChrisHalcrow: bạn sẽ chọn thời điểm nào 0 nếu bạn là dmr? Và sự lựa chọn bất tiện cho nhà phát triển như thế nào? Sự bất tiện là do đo thời gian theo thuật ngữ "con người" (năm, tháng, ngày, giờ / phút / giây, múi giờ, thời gian ban ngày) là phức tạp, không phải vì một số (tùy ý) $ t = 0 $ ngay lập tức được chọn.
NickD

@NickD, lời nhắc tốt cho một lời giải thích và điểm tốt! Mặc dù vậy, tôi sẽ chọn 00:00:00 CE 0, vì tôi tin rằng điều đó sẽ khiến mọi thứ dễ dàng hơn một chút để tính toán. Hãy giải thích 'dmr' là gì? Ngoài ra, trớ trêu thay, việc OP yêu cầu một lời giải thích về lý do tại sao ngày này được chọn cho thấy rằng thật khó hiểu khi ai đó hiểu cách sử dụng ngày 01/01/70 như một ngày tham chiếu!
Chris Halcrow

2
@ChrisHalcrow: dmr = Dennis Ritchie. Bạn đã tính số giây từ nguồn gốc bạn chọn cho đến ngày hôm nay chưa? Nó cần bao nhiêu bit? PDP-11 có các thanh ghi và từ 16 bit, nhưng nó cho phép bạn nhóm hai thanh ghi và hai từ để tạo các thanh ghi 32 bit và hai từ cho một số thao tác. Điều đó mang lại cho bạn +/- 68 năm kể từ 0 lần của bạn (hoặc +136 năm nếu thời gian của bạn không được ký - nhưng dmr đã chọn ký). Sự lựa chọn của anh ta có thể là một chút bí ẩn khi lần đầu tiên bạn nhìn thấy nó, nhưng đó là một quyết định khá rõ ràng được đưa ra ở trên ...
NickD

1
@NickD - lời giải thích tuyệt vời! Đây phải là một phần của câu trả lời được chấp nhận - tại sao không chuyển bình luận của bạn đến đó và chúng tôi có thể xóa câu trả lời của chúng tôi khỏi đây?
Chris Halcrow

1

Tôi thích câu hỏi :-)

Hãy để tôi cố gắng trả lời nó (nguồn thông tin: internet)

Thời gian Unix được biểu thị bằng một số nguyên 32 bit (một số nguyên) có thể dương hoặc âm (đã ký). Unix ban đầu được phát triển vào những năm 60 và 70, do đó, "bắt đầu" của Giờ Unix được đặt thành ngày 1 tháng 1 năm 1970 lúc nửa đêm GMT (Giờ trung bình Greenwich) - ngày / giờ này được gán giá trị Thời gian Unix là 0. Đây là những gì bạn biết như Epoch Unix.

Số nguyên có chữ ký 32 bit có thể biểu thị toàn bộ số trong khoảng từ -2147483648 đến 2147483647. Vì Thời gian Unix bắt đầu từ 0, các giá trị Thời gian Unix âm quay ngược thời gian từ Epoch và các số dương đi theo thời gian. Điều này có nghĩa là Thời gian Unix kéo dài từ giá trị Thời gian Unix là -2147483648 hoặc 20:45:51 GMT ngày 13 tháng 12 năm 1901 đến giá trị Thời gian Unix là 2147483647 hoặc 3:14:07 GMT ngày 19 tháng 1 năm 2038. Những ngày này đại diện cho sự khởi đầu, tiền sử và sự kết thúc của Thời gian Unix.

Sự kết thúc của Giờ Unix sẽ xảy ra vào ngày 19 tháng 1 năm 2038 03:14:07 GMT. Vào ngày 19 tháng 1 năm 2038 03:14:08 GMT tất cả các máy tính vẫn sử dụng Thời gian Unix 32 bit sẽ tràn. Điều này được gọi là "vấn đề năm 2038". Một số người tin rằng đây sẽ là một vấn đề quan trọng hơn so với "vấn đề năm 2000". Cách khắc phục cho sự cố Năm 2038 là lưu trữ Thời gian Unix theo số nguyên 64 bit. Điều này đã được tiến hành trong hầu hết các Hệ điều hành 64 bit nhưng nhiều hệ thống có thể không được cập nhật vào năm 2038.


5
Chỉ có một đoạn trong số này thực sự giải quyết câu hỏi, và nó có phần không chính xác (thời đại ban đầu là vào năm 1971; nó đã được chuyển sau đó)
Michael Mrozek


1
Đúng vậy Michael. Từ Wikipedia: Các phiên bản đầu tiên của thời gian Unix có số nguyên tăng 32 bit với tốc độ 60 Hz, là tốc độ của đồng hồ hệ thống trên phần cứng của các hệ thống Unix đầu tiên. Kết quả là giá trị 60 Hz vẫn xuất hiện trong một số giao diện phần mềm. Kỷ nguyên cũng khác với giá trị hiện tại. Phiên bản đầu tiên Hướng dẫn lập trình viên Unix ngày 3 tháng 11 năm 1971 định nghĩa thời gian Unix là "thời gian kể từ 00:00:00, ngày 1 tháng 1 năm 1971, được đo bằng sáu mươi giây".
Nikhil Mulley

@Nikhil Tôi vẫn không hiểu tại sao năm 1970, chỉ vì Unix được phát triển vào thời điểm đó? Tại sao không phải là năm 1960? hoặc tháng khác nhau ngày khác nhau?
Templar

@Nikhil hay nó không thực sự quan trọng? Chỉ tháng đầu tiên ngày đầu tiên có vẻ tốt hơn và nó được thực hiện vào năm 1971 vì vậy năm 1970 cũng sẽ tốt hơn?
Templar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.